test-simulator-cond-rd-operand-rn-shift-amount-1to32-a32.cc revision 919e3fe28a5024c53ede42922092bbc32e89dcb8
1b78f13911bfe6eda303e91ef215c87a165aae8aeAlexandre Rames// Copyright 2016, 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
2719c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois
2888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// -----------------------------------------------------------------------------
2988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// This file is auto generated from the
30d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames// test/aarch32/config/template-simulator-aarch32.cc.in template file using
3188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// tools/generate_tests.py.
3288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//
3388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// PLEASE DO NOT EDIT.
3488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// -----------------------------------------------------------------------------
3588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
3619c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois
3788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#include "test-runner.h"
3888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
3988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#include "test-utils.h"
40d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "test-utils-aarch32.h"
4188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
42d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/assembler-aarch32.h"
43d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/macro-assembler-aarch32.h"
44d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/disasm-aarch32.h"
4588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
4688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define __ masm.
4788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define BUF_SIZE (4096)
4888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
491e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois#ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
5088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Run tests with the simulator.
5188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
5288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define SETUP() MacroAssembler masm(BUF_SIZE)
5388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
54919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames#define START() masm.GetBuffer()->Reset()
5588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
5688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define END() \
5788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Hlt(0);  \
5888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ FinalizeCode();
5988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// TODO: Run the tests in the simulator.
6188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define RUN()
6288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define TEARDOWN()
6488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
651e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois#else  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32.
6688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define SETUP() MacroAssembler masm(BUF_SIZE);
6888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
69919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames#define START()              \
70919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  masm.GetBuffer()->Reset(); \
71919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r4);               \
72919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r5);               \
73919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r6);               \
74919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r7);               \
75919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r8);               \
76919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r9);               \
77919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r10);              \
78919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r11);              \
79919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  __ Push(r12);              \
8088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Push(lr)
8188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
8288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define END()  \
8388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(lr);  \
8488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r12); \
8588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r11); \
8688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r10); \
8788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r9);  \
8888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r8);  \
8988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r7);  \
9088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r6);  \
9188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r5);  \
9288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Pop(r4);  \
9388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ Bx(lr);   \
9488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  __ FinalizeCode();
9588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
96919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames#define RUN()                                                 \
97919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames  {                                                           \
98919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames    int pcs_offset = masm.IsUsingT32() ? 1 : 0;               \
99919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames    masm.SetBufferExecutable();                               \
100919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames    ExecuteMemory(masm.GetBuffer()->GetStartAddress<byte*>(), \
101919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames                  masm.GetSizeOfCodeGenerated(),              \
102919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames                  pcs_offset);                                \
103919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames    masm.SetBufferWritable();                                 \
10488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
10588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
10688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define TEARDOWN()
10788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
1081e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois#endif  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
10988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
11088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace vixl {
11188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace aarch32 {
11288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
11388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// List of instruction encodings:
11488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define FOREACH_INSTRUCTION(M) \
11588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Cmn)                       \
11688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Cmp)                       \
11788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Mov)                       \
11888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Movs)                      \
11988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Mvn)                       \
12088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Mvns)                      \
12188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Teq)                       \
12288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  M(Tst)
12388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
12419c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois
12588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Values to be passed to the assembler to produce the instruction under test.
12688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstruct Operands {
12788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Condition cond;
12888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Register rd;
12988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Register rn;
13088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  ShiftType shift;
13188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  uint32_t amount;
13288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
13388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
13488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Input data to feed to the instruction.
13588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstruct Inputs {
13688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  uint32_t apsr;
13788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  uint32_t rd;
13888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  uint32_t rn;
13988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
14088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
14188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// This structure contains all input data needed to test one specific encoding.
14288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// It used to generate a loop over an instruction.
14388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstruct TestLoopData {
14488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // The `operands` fields represents the values to pass to the assembler to
14588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // produce the instruction.
14688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Operands operands;
14788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // Description of the operands, used for error reporting.
14888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  const char* operands_description;
14988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // Unique identifier, used for generating traces.
15088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  const char* identifier;
15188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // Array of values to be fed to the instruction.
15288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  size_t input_size;
15388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  const Inputs* inputs;
15488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
15588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
15688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstatic const Inputs kCondition[] = {{NFlag, 0xabababab, 0xabababab},
15788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {ZFlag, 0xabababab, 0xabababab},
15888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {CFlag, 0xabababab, 0xabababab},
15988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {VFlag, 0xabababab, 0xabababab},
16088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NZFlag, 0xabababab, 0xabababab},
16188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NCFlag, 0xabababab, 0xabababab},
16288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NVFlag, 0xabababab, 0xabababab},
16388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {ZCFlag, 0xabababab, 0xabababab},
16488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {ZVFlag, 0xabababab, 0xabababab},
16588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {CVFlag, 0xabababab, 0xabababab},
16688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NZCFlag, 0xabababab, 0xabababab},
16788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NZVFlag, 0xabababab, 0xabababab},
16888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NCVFlag, 0xabababab, 0xabababab},
16988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {ZCVFlag, 0xabababab, 0xabababab},
17088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NZCVFlag, 0xabababab, 0xabababab}};
17188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
17288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstatic const Inputs kRdIsRn[] = {{NoFlag, 0x00000000, 0x00000000},
17388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x00000001, 0x00000001},
17488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x00000002, 0x00000002},
17588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x00000020, 0x00000020},
17688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x0000007d, 0x0000007d},
17788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x0000007e, 0x0000007e},
17888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x0000007f, 0x0000007f},
17988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x00007ffd, 0x00007ffd},
18088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x00007ffe, 0x00007ffe},
18188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x00007fff, 0x00007fff},
18288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x33333333, 0x33333333},
18388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x55555555, 0x55555555},
18488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x7ffffffd, 0x7ffffffd},
18588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x7ffffffe, 0x7ffffffe},
18688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x7fffffff, 0x7fffffff},
18788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x80000000, 0x80000000},
18888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0x80000001, 0x80000001},
18988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa},
19088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xcccccccc, 0xcccccccc},
19188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffff8000, 0xffff8000},
19288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffff8001, 0xffff8001},
19388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffff8002, 0xffff8002},
19488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffff8003, 0xffff8003},
19588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffffff80, 0xffffff80},
19688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffffff81, 0xffffff81},
19788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffffff82, 0xffffff82},
19888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffffff83, 0xffffff83},
19988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffffffe0, 0xffffffe0},
20088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xfffffffd, 0xfffffffd},
20188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xfffffffe, 0xfffffffe},
20288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 {NoFlag, 0xffffffff, 0xffffffff}};
20388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
20488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstatic const Inputs kRdIsNotRn[] = {{NoFlag, 0x00000002, 0xcccccccc},
20588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffd, 0x00007ffe},
20688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0x00000020},
20788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa},
20888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffffff82},
20988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8001, 0x7ffffffe},
21088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffd, 0x00007ffe},
21188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0x80000000},
21288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000001, 0x33333333},
21388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0x7ffffffe},
21488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0xcccccccc},
21588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0x55555555},
21688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xffffffff},
21788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007e, 0xffff8002},
21888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000000, 0x7ffffffd},
21988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0x0000007e},
22088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007f, 0xffff8001},
22188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffe0, 0x00007ffd},
22288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8003, 0x00000002},
22388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0x55555555},
22488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xffffff80},
22588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0xffff8000},
22688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000020, 0x7ffffffe},
22788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffe0, 0x00000000},
22888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7fffffff, 0x0000007e},
22988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0xffffffff},
23088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000001, 0x80000001},
23188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000002, 0x0000007f},
23288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7fffffff, 0xcccccccc},
23388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0x00007ffe},
23488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0x0000007e},
23588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffe, 0xcccccccc},
23688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000000, 0xffff8002},
23788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0x7ffffffe},
23888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8001, 0x00000001},
23988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0x00000020},
24088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffe, 0xffff8001},
24188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xfffffffe},
24288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0x55555555},
24388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000020, 0xffffff83},
24488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xffff8001},
24588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xffff8000},
24688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007fff, 0x00000002},
24788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0xffff8000},
24888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0xffffff81},
24988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000002, 0x00000000},
25088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffffff81},
25188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8001, 0xffffff82},
25288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0xffff8003},
25388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8003, 0x7ffffffd},
25488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007d, 0x00007ffe},
25588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0x0000007d},
25688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xaaaaaaaa, 0x00007ffd},
25788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000000, 0xffffff82},
25888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000002, 0x7ffffffe},
25988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000002, 0xffffff83},
26088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0x00000002},
26188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xffffff82},
26288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xaaaaaaaa, 0x00000020},
26388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000001, 0xffffff82},
26488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007f, 0xffffff82},
26588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffd, 0xaaaaaaaa},
26688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffe, 0x00000001},
26788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffd, 0xffffffe0},
26888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0xffffff83},
26988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007d, 0x00000000},
27088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007d, 0xffff8000},
27188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0x7fffffff},
27288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0x80000000},
27388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0x00000001},
27488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0xffffff82},
27588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffe, 0x00007ffe},
27688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0xfffffffd},
27788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007fff, 0x33333333},
27888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007fff, 0x80000000},
27988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0x00007fff},
28088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffe, 0xffffffe0},
28188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0x0000007f},
28288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffd, 0xffff8001},
28388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000002, 0x00000001},
28488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000000, 0xffffffff},
28588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xcccccccc},
28688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0x7ffffffe},
28788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xaaaaaaaa, 0x00000000},
28888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0xcccccccc},
28988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffffff83},
29088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007e, 0xffffffe0},
29188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007e, 0x00007fff},
29288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007f, 0x00000002},
29388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0xcccccccc},
29488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007d, 0xffffff80},
29588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007fff, 0x00000020},
29688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0xfffffffe},
29788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffe, 0xffffff81},
29888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0x0000007f},
29988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0x7ffffffd},
30088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8001, 0xfffffffe},
30188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffff8002},
30288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0xffffffff},
30388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffffff80},
30488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007f, 0x00007fff},
30588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xffff8001},
30688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7fffffff, 0xffff8002},
30788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffd, 0xffffff83},
30888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7fffffff, 0x0000007f},
30988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xfffffffe},
31088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0xffff8003},
31188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0xffff8002},
31288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0x0000007f},
31388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000020, 0x00000002},
31488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff82, 0xffff8001},
31588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0x00000001},
31688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0xffff8002},
31788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8003, 0x7fffffff},
31888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xffff8000},
31988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0x00007ffd},
32088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000020, 0xffffff81},
32188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000001, 0x55555555},
32288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0x00000020},
32388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000000, 0x00000001},
32488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffd, 0xffff8002},
32588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7fffffff, 0xfffffffe},
32688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0x00007ffd},
32788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0xfffffffd},
32888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8003, 0xffffff80},
32988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0xffffff80},
33088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xffff8002},
33188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffe, 0xffff8002},
33288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0x00007ffe},
33388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0xffff8001},
33488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007f, 0xffffff80},
33588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0x80000000},
33688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007fff, 0x00007ffe},
33788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffff8000},
33888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0x00007fff},
33988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0x0000007d},
34088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0x00000000},
34188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0x55555555},
34288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0x80000000},
34388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffff, 0xffffff80},
34488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff81, 0xffff8003},
34588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0x80000001},
34688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7fffffff, 0xffff8001},
34788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0x00000002},
34888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007e, 0xffffff81},
34988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000000, 0xffff8001},
35088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0xfffffffe},
35188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007e, 0xfffffffd},
35288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffe0, 0xffffffff},
35388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0x80000000},
35488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007d, 0x80000001},
35588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffffe0, 0x7ffffffd},
35688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0x00000000},
35788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0x00000001},
35888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffd, 0x7fffffff},
35988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x55555555, 0xffffffff},
36088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8003, 0x00007fff},
36188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff82, 0x00007fff},
36288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0x55555555},
36388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000020, 0x33333333},
36488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0xfffffffd},
36588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffe, 0x00000001},
36688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xffffffe0},
36788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffe, 0xaaaaaaaa},
36888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0x33333333},
36988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8002, 0xffff8003},
37088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0x7fffffff},
37188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffd, 0xffffff83},
37288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0xffff8000},
37388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff82, 0x55555555},
37488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff82, 0xffffff81},
37588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0xfffffffe},
37688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffd, 0x7fffffff},
37788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007fff, 0x7fffffff},
37888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0xffff8003},
37988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffe, 0xffffffff},
38088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffd, 0x00007ffd},
38188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffd, 0x00007fff},
38288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffd, 0xffffffff},
38388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000001, 0xffff8003},
38488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff80, 0xfffffffd},
38588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0x80000000},
38688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8001, 0x00000020},
38788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0x00000002},
38888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00000000, 0x00000002},
38988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x0000007d, 0x00007fff},
39088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xcccccccc, 0x00000001},
39188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0x00007fff},
39288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x80000001, 0x00000020},
39388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8003, 0xffffffe0},
39488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffd, 0xaaaaaaaa},
39588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x33333333, 0xffff8001},
39688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff83, 0x80000001},
39788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8000, 0xffff8000},
39888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffe, 0xffff8001},
39988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x7ffffffd, 0x00000000},
40088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0x00007ffe, 0x33333333},
40188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffff8001, 0xffffff80},
40288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xfffffffe, 0x55555555},
40388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    {NoFlag, 0xffffff82, 0xffffffff}};
40488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
40588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstatic const Inputs kShiftTypes[] = {{NoFlag, 0xabababab, 0x00000000},
40688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x00000001},
40788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x00000002},
40888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x00000020},
40988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x0000007d},
41088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x0000007e},
41188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x0000007f},
41288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x00007ffd},
41388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x00007ffe},
41488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x00007fff},
41588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x33333333},
41688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x55555555},
41788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x7ffffffd},
41888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x7ffffffe},
41988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x7fffffff},
42088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x80000000},
42188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0x80000001},
42288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xaaaaaaaa},
42388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xcccccccc},
42488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffff8000},
42588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffff8001},
42688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffff8002},
42788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffff8003},
42888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffffff80},
42988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffffff81},
43088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffffff82},
43188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffffff83},
43288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffffffe0},
43388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xfffffffd},
43488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xfffffffe},
43588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     {NoFlag, 0xabababab, 0xffffffff}};
43688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
43719c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois
43888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// A loop will be generated for each element of this array.
43988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstatic const TestLoopData kTests[] = {{{eq, r0, r0, LSR, 1},
44088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "eq r0 r0 LSR 1",
44188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_eq_r0_r0_LSR_1",
44288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
44388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
44488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{ne, r0, r0, LSR, 1},
44588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ne r0 r0 LSR 1",
44688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_ne_r0_r0_LSR_1",
44788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
44888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
44988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{cs, r0, r0, LSR, 1},
45088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "cs r0 r0 LSR 1",
45188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_cs_r0_r0_LSR_1",
45288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
45388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
45488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{cc, r0, r0, LSR, 1},
45588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "cc r0 r0 LSR 1",
45688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_cc_r0_r0_LSR_1",
45788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
45888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
45988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{mi, r0, r0, LSR, 1},
46088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "mi r0 r0 LSR 1",
46188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_mi_r0_r0_LSR_1",
46288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
46388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
46488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{pl, r0, r0, LSR, 1},
46588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "pl r0 r0 LSR 1",
46688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_pl_r0_r0_LSR_1",
46788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
46888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
46988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{vs, r0, r0, LSR, 1},
47088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "vs r0 r0 LSR 1",
47188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_vs_r0_r0_LSR_1",
47288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
47388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
47488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{vc, r0, r0, LSR, 1},
47588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "vc r0 r0 LSR 1",
47688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_vc_r0_r0_LSR_1",
47788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
47888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
47988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{hi, r0, r0, LSR, 1},
48088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "hi r0 r0 LSR 1",
48188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_hi_r0_r0_LSR_1",
48288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
48388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
48488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{ls, r0, r0, LSR, 1},
48588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ls r0 r0 LSR 1",
48688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_ls_r0_r0_LSR_1",
48788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
48888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
48988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{ge, r0, r0, LSR, 1},
49088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ge r0 r0 LSR 1",
49188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_ge_r0_r0_LSR_1",
49288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
49388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
49488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{lt, r0, r0, LSR, 1},
49588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "lt r0 r0 LSR 1",
49688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_lt_r0_r0_LSR_1",
49788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
49888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
49988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{gt, r0, r0, LSR, 1},
50088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "gt r0 r0 LSR 1",
50188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_gt_r0_r0_LSR_1",
50288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
50388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
50488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{le, r0, r0, LSR, 1},
50588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "le r0 r0 LSR 1",
50688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_le_r0_r0_LSR_1",
50788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
50888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
50988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 1},
51088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 1",
51188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "Condition_al_r0_r0_LSR_1",
51288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kCondition),
51388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kCondition},
51488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 1},
51588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 1",
51688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r0_r0_LSR_1",
51788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
51888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
51988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r1, r1, LSR, 1},
52088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r1 r1 LSR 1",
52188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r1_r1_LSR_1",
52288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
52388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
52488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r2, r2, LSR, 1},
52588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r2 r2 LSR 1",
52688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r2_r2_LSR_1",
52788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
52888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
52988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r3, r3, LSR, 1},
53088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r3 r3 LSR 1",
53188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r3_r3_LSR_1",
53288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
53388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
53488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r4, r4, LSR, 1},
53588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r4 r4 LSR 1",
53688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r4_r4_LSR_1",
53788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
53888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
53988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r5, r5, LSR, 1},
54088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r5 r5 LSR 1",
54188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r5_r5_LSR_1",
54288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
54388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
54488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r6, r6, LSR, 1},
54588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r6 r6 LSR 1",
54688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r6_r6_LSR_1",
54788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
54888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
54988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r7, r7, LSR, 1},
55088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r7 r7 LSR 1",
55188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r7_r7_LSR_1",
55288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
55388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
55488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r8, r8, LSR, 1},
55588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r8 r8 LSR 1",
55688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r8_r8_LSR_1",
55788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
55888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
55988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r9, r9, LSR, 1},
56088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r9 r9 LSR 1",
56188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r9_r9_LSR_1",
56288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
56388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
56488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r10, r10, LSR, 1},
56588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r10 r10 LSR 1",
56688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r10_r10_LSR_1",
56788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
56888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
56988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r11, r11, LSR, 1},
57088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r11 r11 LSR 1",
57188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r11_r11_LSR_1",
57288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
57388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
57488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r12, r12, LSR, 1},
57588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r12 r12 LSR 1",
57688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r12_r12_LSR_1",
57788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
57888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
57988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r14, r14, LSR, 1},
58088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r14 r14 LSR 1",
58188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsRn_al_r14_r14_LSR_1",
58288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsRn),
58388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsRn},
58488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r1, r8, LSR, 1},
58588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r1 r8 LSR 1",
58688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r1_r8_LSR_1",
58788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
58888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
58988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r7, r4, LSR, 1},
59088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r7 r4 LSR 1",
59188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r7_r4_LSR_1",
59288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
59388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
59488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r14, r10, LSR, 1},
59588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r14 r10 LSR 1",
59688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r14_r10_LSR_1",
59788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
59888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
59988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r10, r6, LSR, 1},
60088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r10 r6 LSR 1",
60188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r10_r6_LSR_1",
60288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
60388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
60488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r6, r5, LSR, 1},
60588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r6 r5 LSR 1",
60688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r6_r5_LSR_1",
60788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
60888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
60988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r12, r2, LSR, 1},
61088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r12 r2 LSR 1",
61188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r12_r2_LSR_1",
61288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
61388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
61488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r11, LSR, 1},
61588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r11 LSR 1",
61688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r0_r11_LSR_1",
61788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
61888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
61988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r10, r14, LSR, 1},
62088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r10 r14 LSR 1",
62188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r10_r14_LSR_1",
62288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
62388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
62488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r5, LSR, 1},
62588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r5 LSR 1",
62688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r0_r5_LSR_1",
62788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
62888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
62988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r3, LSR, 1},
63088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r3 LSR 1",
63188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "RdIsNotRn_al_r0_r3_LSR_1",
63288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kRdIsNotRn),
63388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kRdIsNotRn},
63488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 1},
63588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 1",
63688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_1",
63788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
63888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
63988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 2},
64088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 2",
64188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_2",
64288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
64388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
64488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 3},
64588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 3",
64688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_3",
64788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
64888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
64988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 4},
65088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 4",
65188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_4",
65288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
65388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
65488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 5},
65588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 5",
65688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_5",
65788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
65888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
65988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 6},
66088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 6",
66188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_6",
66288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
66388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
66488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 7},
66588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 7",
66688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_7",
66788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
66888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
66988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 8},
67088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 8",
67188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_8",
67288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
67388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
67488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 9},
67588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 9",
67688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_9",
67788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
67888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
67988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 10},
68088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 10",
68188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_10",
68288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
68388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
68488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 11},
68588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 11",
68688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_11",
68788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
68888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
68988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 12},
69088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 12",
69188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_12",
69288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
69388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
69488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 13},
69588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 13",
69688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_13",
69788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
69888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
69988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 14},
70088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 14",
70188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_14",
70288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
70388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
70488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 15},
70588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 15",
70688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_15",
70788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
70888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
70988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 16},
71088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 16",
71188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_16",
71288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
71388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
71488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 17},
71588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 17",
71688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_17",
71788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
71888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
71988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 18},
72088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 18",
72188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_18",
72288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
72388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
72488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 19},
72588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 19",
72688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_19",
72788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
72888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
72988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 20},
73088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 20",
73188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_20",
73288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
73388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
73488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 21},
73588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 21",
73688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_21",
73788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
73888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
73988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 22},
74088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 22",
74188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_22",
74288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
74388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
74488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 23},
74588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 23",
74688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_23",
74788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
74888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
74988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 24},
75088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 24",
75188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_24",
75288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
75388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
75488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 25},
75588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 25",
75688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_25",
75788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
75888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
75988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 26},
76088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 26",
76188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_26",
76288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
76388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
76488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 27},
76588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 27",
76688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_27",
76788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
76888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
76988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 28},
77088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 28",
77188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_28",
77288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
77388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
77488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 29},
77588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 29",
77688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_29",
77788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
77888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
77988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 30},
78088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 30",
78188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_30",
78288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
78388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
78488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 31},
78588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 31",
78688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_31",
78788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
78888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
78988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, LSR, 32},
79088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 LSR 32",
79188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_LSR_32",
79288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
79388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
79488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 1},
79588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 1",
79688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_1",
79788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
79888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
79988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 2},
80088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 2",
80188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_2",
80288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
80388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
80488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 3},
80588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 3",
80688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_3",
80788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
80888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
80988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 4},
81088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 4",
81188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_4",
81288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
81388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
81488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 5},
81588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 5",
81688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_5",
81788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
81888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
81988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 6},
82088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 6",
82188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_6",
82288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
82388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
82488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 7},
82588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 7",
82688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_7",
82788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
82888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
82988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 8},
83088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 8",
83188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_8",
83288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
83388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
83488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 9},
83588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 9",
83688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_9",
83788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
83888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
83988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 10},
84088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 10",
84188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_10",
84288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
84388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
84488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 11},
84588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 11",
84688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_11",
84788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
84888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
84988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 12},
85088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 12",
85188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_12",
85288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
85388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
85488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 13},
85588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 13",
85688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_13",
85788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
85888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
85988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 14},
86088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 14",
86188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_14",
86288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
86388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
86488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 15},
86588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 15",
86688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_15",
86788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
86888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
86988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 16},
87088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 16",
87188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_16",
87288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
87388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
87488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 17},
87588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 17",
87688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_17",
87788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
87888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
87988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 18},
88088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 18",
88188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_18",
88288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
88388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
88488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 19},
88588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 19",
88688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_19",
88788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
88888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
88988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 20},
89088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 20",
89188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_20",
89288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
89388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
89488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 21},
89588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 21",
89688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_21",
89788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
89888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
89988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 22},
90088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 22",
90188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_22",
90288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
90388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
90488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 23},
90588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 23",
90688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_23",
90788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
90888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
90988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 24},
91088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 24",
91188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_24",
91288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
91388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
91488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 25},
91588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 25",
91688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_25",
91788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
91888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
91988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 26},
92088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 26",
92188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_26",
92288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
92388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
92488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 27},
92588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 27",
92688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_27",
92788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
92888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
92988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 28},
93088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 28",
93188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_28",
93288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
93388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
93488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 29},
93588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 29",
93688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_29",
93788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
93888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
93988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 30},
94088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 30",
94188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_30",
94288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
94388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
94488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 31},
94588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 31",
94688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_31",
94788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
94888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes},
94988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      {{al, r0, r0, ASR, 32},
95088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "al r0 r0 ASR 32",
95188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       "ShiftTypes_al_r0_r0_ASR_32",
95288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ARRAY_SIZE(kShiftTypes),
95388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kShiftTypes}};
95488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
95588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// We record all inputs to the instructions as outputs. This way, we also check
95688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// that what shouldn't change didn't change.
95788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstruct TestResult {
95888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  size_t output_size;
95988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  const Inputs* outputs;
96088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
96188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
96288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// These headers each contain an array of `TestResult` with the reference output
96388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// values. The reference arrays are names `kReference{mnemonic}`.
964d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-cmn.h"
965d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-cmp.h"
966d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-mov.h"
967d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-movs.h"
968d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-mvn.h"
969d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-mvns.h"
970d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-teq.h"
971d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/traces/simulator-cond-rd-operand-rn-shift-amount-1to32-a32-tst.h"
97288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
97319c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois
97488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// The maximum number of errors to report in detail for each test.
97588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisstatic const unsigned kErrorReportLimit = 8;
97688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
97719c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langloistypedef void (MacroAssembler::*Fn)(Condition cond,
97819c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois                                   Register rd,
97988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   const Operand& op);
98088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
98119c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langloisstatic void TestHelper(Fn instruction,
98219c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois                       const char* mnemonic,
98388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const TestResult reference[]) {
98488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  SETUP();
98510dae1a549308bddc1931f29754d6a4459f70c9bJacob Bramley  masm.UseA32();
98688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  START();
98788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
98888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // Data to compare to `reference`.
98988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  TestResult* results[ARRAY_SIZE(kTests)];
99088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
99188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // Test cases for memory bound instructions may allocate a buffer and save its
99288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // address in this array.
99388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  byte* scratch_memory_buffers[ARRAY_SIZE(kTests)];
99488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
99588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // Generate a loop for each element in `kTests`. Each loop tests one specific
99688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  // instruction.
99788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
99888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Allocate results on the heap for this test.
99988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    results[i] = new TestResult;
100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    results[i]->outputs = new Inputs[kTests[i].input_size];
100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    results[i]->output_size = kTests[i].input_size;
100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
1003f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size;
1004f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    VIXL_ASSERT(IsUint32(input_stride));
100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    scratch_memory_buffers[i] = NULL;
100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Label loop;
100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    UseScratchRegisterScope scratch_registers(&masm);
101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Include all registers from r0 ro r12.
101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    scratch_registers.Include(RegisterList(0x1fff));
101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Values to pass to the macro-assembler.
101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond = kTests[i].operands.cond;
101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Register rd = kTests[i].operands.rd;
101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Register rn = kTests[i].operands.rn;
101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    ShiftType shift = kTests[i].operands.shift;
101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    uint32_t amount = kTests[i].operands.amount;
101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Operand op(rn, shift, amount);
102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    scratch_registers.Exclude(rd);
102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    scratch_registers.Exclude(rn);
102288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Allocate reserved registers for our own use.
102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Register input_ptr = scratch_registers.Acquire();
102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Register input_end = scratch_registers.Acquire();
102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Register result_ptr = scratch_registers.Acquire();
102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Initialize `input_ptr` to the first element and `input_end` the address
102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // after the array.
1030f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    __ Mov(input_ptr, Operand::From(kTests[i].inputs));
1031f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride));
1032f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    __ Mov(result_ptr, Operand::From(results[i]->outputs));
103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ Bind(&loop);
103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    {
103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      UseScratchRegisterScope temp_registers(&masm);
103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      Register nzcv_bits = temp_registers.Acquire();
103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      Register saved_q_bit = temp_registers.Acquire();
103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // Save the `Q` bit flag.
104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ Mrs(saved_q_bit, APSR);
104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ And(saved_q_bit, saved_q_bit, QFlag);
104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // Set the `NZCV` and `Q` flags together.
104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr)));
104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ Orr(nzcv_bits, nzcv_bits, saved_q_bit);
104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ Msr(APSR_nzcvq, nzcv_bits);
104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd)));
104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ Ldr(rn, MemOperand(input_ptr, offsetof(Inputs, rn)));
104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    (masm.*instruction)(cond, rd, op);
105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    {
105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      UseScratchRegisterScope temp_registers(&masm);
105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      Register nzcv_bits = temp_registers.Acquire();
105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ Mrs(nzcv_bits, APSR);
105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // Only record the NZCV bits.
105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ And(nzcv_bits, nzcv_bits, NZCVFlag);
105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr)));
105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd)));
106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ Str(rn, MemOperand(result_ptr, offsetof(Inputs, rn)));
106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Advance the result pointer.
1064f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Loop back until `input_ptr` is lower than `input_base`.
1066f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois    __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ Cmp(input_ptr, input_end);
106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    __ B(ne, &loop);
106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  END();
107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  RUN();
107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (Test::generate_test_trace()) {
107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Print the results.
107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
107819c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois      printf("static const Inputs kOutputs_%s_%s[] = {\n",
107919c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois             mnemonic,
108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois             kTests[i].identifier);
108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      for (size_t j = 0; j < results[i]->output_size; j++) {
108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf("  { ");
108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf("0x%08" PRIx32, results[i]->outputs[j].apsr);
108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf(", ");
108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf("0x%08" PRIx32, results[i]->outputs[j].rd);
108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf(", ");
108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf("0x%08" PRIx32, results[i]->outputs[j].rn);
108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        printf(" },\n");
108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      printf("};\n");
109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    printf("static const TestResult kReference%s[] = {\n", mnemonic);
109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      printf("  {\n");
109519c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois      printf("    ARRAY_SIZE(kOutputs_%s_%s),\n",
109619c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois             mnemonic,
109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois             kTests[i].identifier);
109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      printf("    kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier);
109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      printf("  },\n");
110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    printf("};\n");
110254fce717d9371fa2e8fc46e1d811bdb4ab74f279Alexandre Rames  } else if (kCheckSimulatorTestResults) {
110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    // Check the results.
110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    unsigned total_error_count = 0;
110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      bool instruction_has_errors = false;
110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      for (size_t j = 0; j < kTests[i].input_size; j++) {
110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t apsr = results[i]->outputs[j].apsr;
110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t rd = results[i]->outputs[j].rd;
111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t rn = results[i]->outputs[j].rn;
111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t apsr_input = kTests[i].inputs[j].apsr;
111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t rd_input = kTests[i].inputs[j].rd;
111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t rn_input = kTests[i].inputs[j].rn;
111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t apsr_ref = reference[i].outputs[j].apsr;
111588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t rd_ref = reference[i].outputs[j].rd;
111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        uint32_t rn_ref = reference[i].outputs[j].rn;
111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        if (((apsr != apsr_ref) || (rd != rd_ref) || (rn != rn_ref)) &&
111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            (++total_error_count <= kErrorReportLimit)) {
112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // Print the instruction once even if it triggered multiple failures.
112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (!instruction_has_errors) {
112219c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois            printf("Error(s) when testing \"%s %s\":\n",
112319c0535d3c9c0bec6eeecce0ae704a7fd527a9d8Pierre Langlois                   mnemonic,
112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   kTests[i].operands_description);
112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            instruction_has_errors = true;
112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // Print subsequent errors.
112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("  Input:    ");
112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, apsr_input);
113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf(", ");
113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, rd_input);
113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf(", ");
113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, rn_input);
113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("\n");
113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("  Expected: ");
113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, apsr_ref);
113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf(", ");
113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, rd_ref);
113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf(", ");
114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, rn_ref);
114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("\n");
114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("  Found:    ");
114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, apsr);
114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf(", ");
114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, rd);
114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf(", ");
114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("0x%08" PRIx32, rn);
114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          printf("\n\n");
114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
115188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (total_error_count > kErrorReportLimit) {
115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      printf("%u other errors follow.\n",
115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois             total_error_count - kErrorReportLimit);
115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    VIXL_CHECK(total_error_count == 0);
115854fce717d9371fa2e8fc46e1d811bdb4ab74f279Alexandre Rames  } else {
115954fce717d9371fa2e8fc46e1d811bdb4ab74f279Alexandre Rames    VIXL_WARNING("Assembled the code, but did not run anything.\n");
116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    delete[] results[i]->outputs;
116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    delete results[i];
1165ec4fdd22abecf1b8f52ee9dbff596ebdded9b5d6Serban Constantinescu    delete[] scratch_memory_buffers[i];
116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  TEARDOWN();
116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Instantiate tests for each instruction in the list.
117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#define TEST(mnemonic)                                                      \
117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  static void Test_##mnemonic() {                                           \
117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \
117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }                                                                         \
117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  static Test test_##mnemonic(                                              \
117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      "AARCH32_SIMULATOR_COND_RD_OPERAND_RN_SHIFT_AMOUNT_1TO32_"            \
117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      "A32_" #mnemonic,                                                     \
117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      &Test_##mnemonic);
118088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisFOREACH_INSTRUCTION(TEST)
118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#undef TEST
118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}  // aarch32
118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}  // vixl
1185