xref: /aosp_15_r20/external/vixl/test/aarch32/test-simulator-cond-rd-rn-operand-rm-shift-rs-a32.cc (revision f5c631da2f1efdd72b5fd1e20510e4042af13d77)
1 // Copyright 2016, VIXL authors
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 //   * Redistributions of source code must retain the above copyright notice,
8 //     this list of conditions and the following disclaimer.
9 //   * Redistributions in binary form must reproduce the above copyright notice,
10 //     this list of conditions and the following disclaimer in the documentation
11 //     and/or other materials provided with the distribution.
12 //   * Neither the name of ARM Limited nor the names of its contributors may be
13 //     used to endorse or promote products derived from this software without
14 //     specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 
27 
28 // -----------------------------------------------------------------------------
29 // This file is auto generated from the
30 // test/aarch32/config/template-simulator-aarch32.cc.in template file using
31 // tools/generate_tests.py.
32 //
33 // PLEASE DO NOT EDIT.
34 // -----------------------------------------------------------------------------
35 
36 
37 #include "test-runner.h"
38 
39 #include "test-utils.h"
40 #include "test-utils-aarch32.h"
41 
42 #include "aarch32/assembler-aarch32.h"
43 #include "aarch32/disasm-aarch32.h"
44 #include "aarch32/macro-assembler-aarch32.h"
45 
46 #define __ masm.
47 #define BUF_SIZE (4096)
48 
49 #ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
50 // Run tests with the simulator.
51 
52 #define SETUP() MacroAssembler masm(BUF_SIZE)
53 
54 #define START() masm.GetBuffer()->Reset()
55 
56 #define END() \
57   __ Hlt(0);  \
58   __ FinalizeCode();
59 
60 // TODO: Run the tests in the simulator.
61 #define RUN()
62 
63 #else  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32.
64 
65 #define SETUP()                  \
66   MacroAssembler masm(BUF_SIZE); \
67   UseScratchRegisterScope harness_scratch;
68 
69 #define START()                 \
70   harness_scratch.Open(&masm);  \
71   harness_scratch.ExcludeAll(); \
72   masm.GetBuffer()->Reset();    \
73   __ Push(r4);                  \
74   __ Push(r5);                  \
75   __ Push(r6);                  \
76   __ Push(r7);                  \
77   __ Push(r8);                  \
78   __ Push(r9);                  \
79   __ Push(r10);                 \
80   __ Push(r11);                 \
81   __ Push(lr);                  \
82   harness_scratch.Include(ip);
83 
84 #define END()                  \
85   harness_scratch.Exclude(ip); \
86   __ Pop(lr);                  \
87   __ Pop(r11);                 \
88   __ Pop(r10);                 \
89   __ Pop(r9);                  \
90   __ Pop(r8);                  \
91   __ Pop(r7);                  \
92   __ Pop(r6);                  \
93   __ Pop(r5);                  \
94   __ Pop(r4);                  \
95   __ Bx(lr);                   \
96   __ FinalizeCode();           \
97   harness_scratch.Close();
98 
99 #define RUN()                                                 \
100   {                                                           \
101     int pcs_offset = masm.IsUsingT32() ? 1 : 0;               \
102     masm.GetBuffer()->SetExecutable();                        \
103     ExecuteMemory(masm.GetBuffer()->GetStartAddress<byte*>(), \
104                   masm.GetSizeOfCodeGenerated(),              \
105                   pcs_offset);                                \
106     masm.GetBuffer()->SetWritable();                          \
107   }
108 
109 #endif  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
110 
111 namespace vixl {
112 namespace aarch32 {
113 
114 // List of instruction encodings:
115 #define FOREACH_INSTRUCTION(M) \
116   M(Adc)                       \
117   M(Adcs)                      \
118   M(Add)                       \
119   M(Adds)                      \
120   M(And)                       \
121   M(Ands)                      \
122   M(Bic)                       \
123   M(Bics)                      \
124   M(Eor)                       \
125   M(Eors)                      \
126   M(Orr)                       \
127   M(Orrs)                      \
128   M(Rsb)                       \
129   M(Rsbs)                      \
130   M(Rsc)                       \
131   M(Rscs)                      \
132   M(Sbc)                       \
133   M(Sbcs)                      \
134   M(Sub)                       \
135   M(Subs)
136 
137 
138 // The following definitions are defined again in each generated test, therefore
139 // we need to place them in an anomymous namespace. It expresses that they are
140 // local to this file only, and the compiler is not allowed to share these types
141 // across test files during template instantiation. Specifically, `Operands` and
142 // `Inputs` have various layouts across generated tests so they absolutely
143 // cannot be shared.
144 
145 #ifdef VIXL_INCLUDE_TARGET_A32
146 namespace {
147 
148 // Values to be passed to the assembler to produce the instruction under test.
149 struct Operands {
150   Condition cond;
151   Register rd;
152   Register rn;
153   Register rm;
154   ShiftType shift;
155   Register rs;
156 };
157 
158 // Input data to feed to the instruction.
159 struct Inputs {
160   uint32_t apsr;
161   uint32_t rd;
162   uint32_t rn;
163   uint32_t rm;
164   uint32_t rs;
165 };
166 
167 // This structure contains all input data needed to test one specific encoding.
168 // It used to generate a loop over an instruction.
169 struct TestLoopData {
170   // The `operands` fields represents the values to pass to the assembler to
171   // produce the instruction.
172   Operands operands;
173   // Description of the operands, used for error reporting.
174   const char* operands_description;
175   // Unique identifier, used for generating traces.
176   const char* identifier;
177   // Array of values to be fed to the instruction.
178   size_t input_size;
179   const Inputs* inputs;
180 };
181 
182 static const Inputs kCondition[] =
183     {{NFlag, 0xabababab, 0xabababab, 0xabababab, 0},
184      {ZFlag, 0xabababab, 0xabababab, 0xabababab, 0},
185      {CFlag, 0xabababab, 0xabababab, 0xabababab, 0},
186      {VFlag, 0xabababab, 0xabababab, 0xabababab, 0},
187      {NZFlag, 0xabababab, 0xabababab, 0xabababab, 0},
188      {NCFlag, 0xabababab, 0xabababab, 0xabababab, 0},
189      {NVFlag, 0xabababab, 0xabababab, 0xabababab, 0},
190      {ZCFlag, 0xabababab, 0xabababab, 0xabababab, 0},
191      {ZVFlag, 0xabababab, 0xabababab, 0xabababab, 0},
192      {CVFlag, 0xabababab, 0xabababab, 0xabababab, 0},
193      {NZCFlag, 0xabababab, 0xabababab, 0xabababab, 0},
194      {NZVFlag, 0xabababab, 0xabababab, 0xabababab, 0},
195      {NCVFlag, 0xabababab, 0xabababab, 0xabababab, 0},
196      {ZCVFlag, 0xabababab, 0xabababab, 0xabababab, 0},
197      {NZCVFlag, 0xabababab, 0xabababab, 0xabababab, 0}};
198 
199 static const Inputs kRdIsRn[] =
200     {{NoFlag, 0xffffff83, 0xffffff83, 0xffff8002, 0},
201      {NoFlag, 0x0000007e, 0x0000007e, 0x7fffffff, 0},
202      {NoFlag, 0x0000007d, 0x0000007d, 0xffffffe0, 0},
203      {NoFlag, 0x7fffffff, 0x7fffffff, 0x00000002, 0},
204      {NoFlag, 0xffff8002, 0xffff8002, 0xfffffffd, 0},
205      {NoFlag, 0xffffffe0, 0xffffffe0, 0x00007fff, 0},
206      {NoFlag, 0xffff8000, 0xffff8000, 0xffffff83, 0},
207      {NoFlag, 0xffff8002, 0xffff8002, 0x80000001, 0},
208      {NoFlag, 0x00007ffd, 0x00007ffd, 0xffff8003, 0},
209      {NoFlag, 0x00007fff, 0x00007fff, 0xffffffff, 0},
210      {NoFlag, 0x00000000, 0x00000000, 0xffffff80, 0},
211      {NoFlag, 0xffff8001, 0xffff8001, 0x33333333, 0},
212      {NoFlag, 0xffffff80, 0xffffff80, 0x0000007e, 0},
213      {NoFlag, 0x0000007e, 0x0000007e, 0x7ffffffd, 0},
214      {NoFlag, 0xffffff80, 0xffffff80, 0xfffffffd, 0},
215      {NoFlag, 0x00000020, 0x00000020, 0xffff8002, 0},
216      {NoFlag, 0xffffff80, 0xffffff80, 0xfffffffe, 0},
217      {NoFlag, 0x00000002, 0x00000002, 0x00000000, 0},
218      {NoFlag, 0x0000007e, 0x0000007e, 0x00000001, 0},
219      {NoFlag, 0x00000002, 0x00000002, 0x0000007f, 0},
220      {NoFlag, 0x80000000, 0x80000000, 0x80000000, 0},
221      {NoFlag, 0x7fffffff, 0x7fffffff, 0xffffff80, 0},
222      {NoFlag, 0x00000001, 0x00000001, 0xfffffffe, 0},
223      {NoFlag, 0x33333333, 0x33333333, 0x0000007d, 0},
224      {NoFlag, 0x00000001, 0x00000001, 0x7ffffffe, 0},
225      {NoFlag, 0x00007ffe, 0x00007ffe, 0x7fffffff, 0},
226      {NoFlag, 0x80000000, 0x80000000, 0xffffff83, 0},
227      {NoFlag, 0x00000000, 0x00000000, 0x7ffffffe, 0},
228      {NoFlag, 0x00000000, 0x00000000, 0x0000007f, 0},
229      {NoFlag, 0x7fffffff, 0x7fffffff, 0xcccccccc, 0},
230      {NoFlag, 0xffffff82, 0xffffff82, 0x00000002, 0},
231      {NoFlag, 0x7ffffffd, 0x7ffffffd, 0xaaaaaaaa, 0},
232      {NoFlag, 0xcccccccc, 0xcccccccc, 0xffff8001, 0},
233      {NoFlag, 0xfffffffe, 0xfffffffe, 0xffff8001, 0},
234      {NoFlag, 0x7fffffff, 0x7fffffff, 0x00000020, 0},
235      {NoFlag, 0xffffffe0, 0xffffffe0, 0x00007ffe, 0},
236      {NoFlag, 0x80000001, 0x80000001, 0xffff8000, 0},
237      {NoFlag, 0xffffff82, 0xffffff82, 0x0000007d, 0},
238      {NoFlag, 0x0000007e, 0x0000007e, 0x7ffffffe, 0},
239      {NoFlag, 0x00007ffd, 0x00007ffd, 0xffffff80, 0},
240      {NoFlag, 0x0000007d, 0x0000007d, 0x0000007e, 0},
241      {NoFlag, 0xffff8002, 0xffff8002, 0x7fffffff, 0},
242      {NoFlag, 0xffffffe0, 0xffffffe0, 0x0000007f, 0},
243      {NoFlag, 0x00007ffe, 0x00007ffe, 0xffffff81, 0},
244      {NoFlag, 0x80000000, 0x80000000, 0x0000007e, 0},
245      {NoFlag, 0xffffffff, 0xffffffff, 0xaaaaaaaa, 0},
246      {NoFlag, 0xfffffffe, 0xfffffffe, 0x00000020, 0},
247      {NoFlag, 0xffffff82, 0xffffff82, 0xffff8003, 0},
248      {NoFlag, 0x7ffffffd, 0x7ffffffd, 0xffff8002, 0},
249      {NoFlag, 0x7ffffffe, 0x7ffffffe, 0x00000000, 0},
250      {NoFlag, 0xfffffffd, 0xfffffffd, 0xffffffe0, 0},
251      {NoFlag, 0xffff8000, 0xffff8000, 0xffff8002, 0},
252      {NoFlag, 0xffffff82, 0xffffff82, 0x7ffffffd, 0},
253      {NoFlag, 0xcccccccc, 0xcccccccc, 0x80000000, 0},
254      {NoFlag, 0x80000001, 0x80000001, 0x33333333, 0},
255      {NoFlag, 0x00000001, 0x00000001, 0x00000002, 0},
256      {NoFlag, 0x55555555, 0x55555555, 0x0000007f, 0},
257      {NoFlag, 0xffffffff, 0xffffffff, 0xfffffffd, 0},
258      {NoFlag, 0xffffff80, 0xffffff80, 0x80000000, 0},
259      {NoFlag, 0x00000000, 0x00000000, 0x00000020, 0},
260      {NoFlag, 0xfffffffe, 0xfffffffe, 0xffff8003, 0},
261      {NoFlag, 0xffff8001, 0xffff8001, 0xffff8000, 0},
262      {NoFlag, 0x55555555, 0x55555555, 0x55555555, 0},
263      {NoFlag, 0x00007fff, 0x00007fff, 0xffff8000, 0},
264      {NoFlag, 0x7fffffff, 0x7fffffff, 0xffffffe0, 0},
265      {NoFlag, 0x00000001, 0x00000001, 0x55555555, 0},
266      {NoFlag, 0x33333333, 0x33333333, 0x7ffffffe, 0},
267      {NoFlag, 0x80000000, 0x80000000, 0xffffffe0, 0},
268      {NoFlag, 0xffffff83, 0xffffff83, 0x0000007d, 0},
269      {NoFlag, 0xffff8003, 0xffff8003, 0x00000002, 0},
270      {NoFlag, 0x7ffffffe, 0x7ffffffe, 0xffffff81, 0},
271      {NoFlag, 0xfffffffe, 0xfffffffe, 0xffffff80, 0},
272      {NoFlag, 0x00007ffe, 0x00007ffe, 0xffff8002, 0},
273      {NoFlag, 0x80000001, 0x80000001, 0xfffffffe, 0},
274      {NoFlag, 0x7ffffffd, 0x7ffffffd, 0xfffffffd, 0},
275      {NoFlag, 0x7ffffffd, 0x7ffffffd, 0xfffffffe, 0},
276      {NoFlag, 0x7ffffffe, 0x7ffffffe, 0xffffff83, 0},
277      {NoFlag, 0xfffffffd, 0xfffffffd, 0x00007ffe, 0},
278      {NoFlag, 0x7fffffff, 0x7fffffff, 0x80000000, 0},
279      {NoFlag, 0xffffff82, 0xffffff82, 0x7fffffff, 0},
280      {NoFlag, 0xffffffe0, 0xffffffe0, 0xffffff83, 0},
281      {NoFlag, 0xffff8000, 0xffff8000, 0xffff8000, 0},
282      {NoFlag, 0x00000001, 0x00000001, 0x7fffffff, 0},
283      {NoFlag, 0xfffffffe, 0xfffffffe, 0xffffffff, 0},
284      {NoFlag, 0xffffff82, 0xffffff82, 0xffffffff, 0},
285      {NoFlag, 0xffffffff, 0xffffffff, 0xfffffffe, 0},
286      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0x0000007d, 0},
287      {NoFlag, 0xffff8001, 0xffff8001, 0xfffffffe, 0},
288      {NoFlag, 0x00007ffe, 0x00007ffe, 0x0000007d, 0},
289      {NoFlag, 0xffffff82, 0xffffff82, 0xfffffffe, 0},
290      {NoFlag, 0x00000000, 0x00000000, 0x00007ffd, 0},
291      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0xffff8002, 0},
292      {NoFlag, 0x0000007f, 0x0000007f, 0xffffff82, 0},
293      {NoFlag, 0x00007fff, 0x00007fff, 0x33333333, 0},
294      {NoFlag, 0xfffffffd, 0xfffffffd, 0x80000000, 0},
295      {NoFlag, 0x00000000, 0x00000000, 0xfffffffd, 0},
296      {NoFlag, 0x0000007d, 0x0000007d, 0x0000007f, 0},
297      {NoFlag, 0xfffffffd, 0xfffffffd, 0x0000007e, 0},
298      {NoFlag, 0xffffffe0, 0xffffffe0, 0x55555555, 0},
299      {NoFlag, 0xffffffff, 0xffffffff, 0x80000000, 0},
300      {NoFlag, 0xffffffe0, 0xffffffe0, 0x0000007e, 0},
301      {NoFlag, 0xffffff81, 0xffffff81, 0x00007ffd, 0},
302      {NoFlag, 0x00000020, 0x00000020, 0xffff8001, 0},
303      {NoFlag, 0x00007fff, 0x00007fff, 0xffffff83, 0},
304      {NoFlag, 0x33333333, 0x33333333, 0x00000000, 0},
305      {NoFlag, 0xffff8000, 0xffff8000, 0xffffff82, 0},
306      {NoFlag, 0xffff8001, 0xffff8001, 0x0000007e, 0},
307      {NoFlag, 0xffffff80, 0xffffff80, 0x00000001, 0},
308      {NoFlag, 0x80000000, 0x80000000, 0xcccccccc, 0},
309      {NoFlag, 0x00000002, 0x00000002, 0x00007ffd, 0},
310      {NoFlag, 0x7ffffffe, 0x7ffffffe, 0x80000001, 0},
311      {NoFlag, 0x00000020, 0x00000020, 0x00007ffe, 0},
312      {NoFlag, 0xffff8000, 0xffff8000, 0xfffffffd, 0},
313      {NoFlag, 0x7fffffff, 0x7fffffff, 0xffff8001, 0},
314      {NoFlag, 0x00000000, 0x00000000, 0xffffff83, 0},
315      {NoFlag, 0x0000007f, 0x0000007f, 0x00000020, 0},
316      {NoFlag, 0x80000001, 0x80000001, 0xffff8003, 0},
317      {NoFlag, 0xffff8001, 0xffff8001, 0x0000007f, 0},
318      {NoFlag, 0x0000007f, 0x0000007f, 0x80000001, 0},
319      {NoFlag, 0x00000002, 0x00000002, 0x7ffffffe, 0},
320      {NoFlag, 0xffffff82, 0xffffff82, 0xffffff83, 0},
321      {NoFlag, 0x00007ffd, 0x00007ffd, 0x7fffffff, 0},
322      {NoFlag, 0x7ffffffe, 0x7ffffffe, 0xfffffffe, 0},
323      {NoFlag, 0xffffff82, 0xffffff82, 0xffff8000, 0},
324      {NoFlag, 0xfffffffe, 0xfffffffe, 0xffff8000, 0},
325      {NoFlag, 0xffff8002, 0xffff8002, 0xffffff81, 0},
326      {NoFlag, 0x33333333, 0x33333333, 0x7fffffff, 0},
327      {NoFlag, 0x80000001, 0x80000001, 0x00007fff, 0},
328      {NoFlag, 0xffff8002, 0xffff8002, 0xcccccccc, 0},
329      {NoFlag, 0xffffffff, 0xffffffff, 0x00000002, 0},
330      {NoFlag, 0x33333333, 0x33333333, 0xffffff81, 0},
331      {NoFlag, 0xfffffffd, 0xfffffffd, 0xffffff80, 0},
332      {NoFlag, 0x55555555, 0x55555555, 0xaaaaaaaa, 0},
333      {NoFlag, 0x33333333, 0x33333333, 0xffffff82, 0},
334      {NoFlag, 0xffffff80, 0xffffff80, 0xaaaaaaaa, 0},
335      {NoFlag, 0x0000007e, 0x0000007e, 0x00000020, 0},
336      {NoFlag, 0xffffff83, 0xffffff83, 0x00007ffd, 0},
337      {NoFlag, 0xffffff82, 0xffffff82, 0xaaaaaaaa, 0},
338      {NoFlag, 0xffff8003, 0xffff8003, 0xffffffff, 0},
339      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0xfffffffe, 0},
340      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0x00000000, 0},
341      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0x0000007f, 0},
342      {NoFlag, 0x0000007f, 0x0000007f, 0x0000007d, 0},
343      {NoFlag, 0xfffffffd, 0xfffffffd, 0x55555555, 0},
344      {NoFlag, 0xffffffff, 0xffffffff, 0x00000020, 0},
345      {NoFlag, 0x00007ffe, 0x00007ffe, 0xffffff83, 0},
346      {NoFlag, 0x7fffffff, 0x7fffffff, 0x55555555, 0},
347      {NoFlag, 0x55555555, 0x55555555, 0xcccccccc, 0},
348      {NoFlag, 0xffffffe0, 0xffffffe0, 0xffff8003, 0},
349      {NoFlag, 0x7ffffffe, 0x7ffffffe, 0x00007ffe, 0},
350      {NoFlag, 0x00007ffd, 0x00007ffd, 0xffff8002, 0},
351      {NoFlag, 0x00007ffd, 0x00007ffd, 0x00000001, 0},
352      {NoFlag, 0x00000000, 0x00000000, 0x00007ffe, 0},
353      {NoFlag, 0xffffff80, 0xffffff80, 0x00000020, 0},
354      {NoFlag, 0xffff8000, 0xffff8000, 0x0000007d, 0},
355      {NoFlag, 0xffff8003, 0xffff8003, 0x00000000, 0},
356      {NoFlag, 0x0000007e, 0x0000007e, 0x80000000, 0},
357      {NoFlag, 0xfffffffd, 0xfffffffd, 0x00000000, 0},
358      {NoFlag, 0xffffff80, 0xffffff80, 0xffffffff, 0},
359      {NoFlag, 0xcccccccc, 0xcccccccc, 0x0000007f, 0},
360      {NoFlag, 0x7ffffffd, 0x7ffffffd, 0x00000000, 0},
361      {NoFlag, 0x00007fff, 0x00007fff, 0x00000000, 0},
362      {NoFlag, 0x0000007f, 0x0000007f, 0x00000001, 0},
363      {NoFlag, 0xffffffff, 0xffffffff, 0xffffff82, 0},
364      {NoFlag, 0x00007ffe, 0x00007ffe, 0x00007ffd, 0},
365      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0x33333333, 0},
366      {NoFlag, 0xffffff82, 0xffffff82, 0x55555555, 0},
367      {NoFlag, 0xffff8003, 0xffff8003, 0x0000007e, 0},
368      {NoFlag, 0xffffff83, 0xffffff83, 0x00000002, 0},
369      {NoFlag, 0xffffff82, 0xffffff82, 0x33333333, 0},
370      {NoFlag, 0x55555555, 0x55555555, 0xffffffff, 0},
371      {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa, 0x80000001, 0},
372      {NoFlag, 0xffffff83, 0xffffff83, 0xffffffe0, 0},
373      {NoFlag, 0x00000001, 0x00000001, 0xffffffe0, 0},
374      {NoFlag, 0x33333333, 0x33333333, 0x33333333, 0},
375      {NoFlag, 0x55555555, 0x55555555, 0x00000001, 0},
376      {NoFlag, 0xffffff83, 0xffffff83, 0x00007fff, 0},
377      {NoFlag, 0x00000002, 0x00000002, 0xfffffffd, 0},
378      {NoFlag, 0xffffffe0, 0xffffffe0, 0xffff8002, 0},
379      {NoFlag, 0x80000000, 0x80000000, 0x00007ffd, 0},
380      {NoFlag, 0xffffff83, 0xffffff83, 0xfffffffe, 0},
381      {NoFlag, 0x80000001, 0x80000001, 0xffffffff, 0},
382      {NoFlag, 0xffff8003, 0xffff8003, 0x00000020, 0},
383      {NoFlag, 0xffffff82, 0xffffff82, 0xcccccccc, 0},
384      {NoFlag, 0x00000020, 0x00000020, 0x7fffffff, 0},
385      {NoFlag, 0xffffff80, 0xffffff80, 0x55555555, 0},
386      {NoFlag, 0x00000001, 0x00000001, 0x00000020, 0},
387      {NoFlag, 0xffff8001, 0xffff8001, 0x00007fff, 0},
388      {NoFlag, 0x00000020, 0x00000020, 0xaaaaaaaa, 0},
389      {NoFlag, 0x55555555, 0x55555555, 0x7fffffff, 0},
390      {NoFlag, 0xfffffffe, 0xfffffffe, 0x7fffffff, 0},
391      {NoFlag, 0x00007fff, 0x00007fff, 0x55555555, 0},
392      {NoFlag, 0x55555555, 0x55555555, 0x0000007d, 0},
393      {NoFlag, 0xcccccccc, 0xcccccccc, 0x7ffffffe, 0},
394      {NoFlag, 0xffff8002, 0xffff8002, 0x00007ffe, 0},
395      {NoFlag, 0xfffffffe, 0xfffffffe, 0xffffff81, 0},
396      {NoFlag, 0xffffff81, 0xffffff81, 0x0000007d, 0},
397      {NoFlag, 0x00000020, 0x00000020, 0x0000007e, 0},
398      {NoFlag, 0xffffffff, 0xffffffff, 0x00007ffe, 0},
399      {NoFlag, 0xffff8002, 0xffff8002, 0x0000007e, 0}};
400 
401 static const Inputs kRdIsRm[] =
402     {{NoFlag, 0x55555555, 0x7ffffffe, 0x55555555, 0},
403      {NoFlag, 0xfffffffe, 0x00000001, 0xfffffffe, 0},
404      {NoFlag, 0xffffff82, 0xffffff82, 0xffffff82, 0},
405      {NoFlag, 0xffff8000, 0xffff8003, 0xffff8000, 0},
406      {NoFlag, 0x00000001, 0x00000000, 0x00000001, 0},
407      {NoFlag, 0xffffff81, 0x00007fff, 0xffffff81, 0},
408      {NoFlag, 0x0000007d, 0xffff8002, 0x0000007d, 0},
409      {NoFlag, 0x80000000, 0xffff8000, 0x80000000, 0},
410      {NoFlag, 0xffffff80, 0x00000020, 0xffffff80, 0},
411      {NoFlag, 0x55555555, 0xffffff81, 0x55555555, 0},
412      {NoFlag, 0x00007ffd, 0xffffff82, 0x00007ffd, 0},
413      {NoFlag, 0x55555555, 0x00007fff, 0x55555555, 0},
414      {NoFlag, 0x7ffffffd, 0xffff8000, 0x7ffffffd, 0},
415      {NoFlag, 0xffffffff, 0xffffff83, 0xffffffff, 0},
416      {NoFlag, 0x00000000, 0xffffffff, 0x00000000, 0},
417      {NoFlag, 0xffff8002, 0x33333333, 0xffff8002, 0},
418      {NoFlag, 0x00007ffd, 0xaaaaaaaa, 0x00007ffd, 0},
419      {NoFlag, 0x55555555, 0xffff8000, 0x55555555, 0},
420      {NoFlag, 0x80000001, 0xffffffff, 0x80000001, 0},
421      {NoFlag, 0x0000007d, 0xffffff83, 0x0000007d, 0},
422      {NoFlag, 0x0000007e, 0xffffff82, 0x0000007e, 0},
423      {NoFlag, 0xcccccccc, 0x0000007d, 0xcccccccc, 0},
424      {NoFlag, 0xffff8002, 0xffffffff, 0xffff8002, 0},
425      {NoFlag, 0xffffff81, 0x0000007f, 0xffffff81, 0},
426      {NoFlag, 0xffff8000, 0xffffff83, 0xffff8000, 0},
427      {NoFlag, 0xffffffff, 0xffffffe0, 0xffffffff, 0},
428      {NoFlag, 0xfffffffd, 0x80000001, 0xfffffffd, 0},
429      {NoFlag, 0x55555555, 0x80000000, 0x55555555, 0},
430      {NoFlag, 0xffff8000, 0x0000007d, 0xffff8000, 0},
431      {NoFlag, 0xaaaaaaaa, 0xffff8003, 0xaaaaaaaa, 0},
432      {NoFlag, 0x00000001, 0x00007ffd, 0x00000001, 0},
433      {NoFlag, 0x0000007e, 0x7ffffffe, 0x0000007e, 0},
434      {NoFlag, 0x00000020, 0x00007ffd, 0x00000020, 0},
435      {NoFlag, 0xffffff81, 0x7ffffffd, 0xffffff81, 0},
436      {NoFlag, 0xffffff83, 0x0000007f, 0xffffff83, 0},
437      {NoFlag, 0x00000001, 0x0000007e, 0x00000001, 0},
438      {NoFlag, 0xffffff82, 0xfffffffd, 0xffffff82, 0},
439      {NoFlag, 0xffff8003, 0x7ffffffe, 0xffff8003, 0},
440      {NoFlag, 0x00000002, 0x00000002, 0x00000002, 0},
441      {NoFlag, 0xffffff83, 0xffff8001, 0xffffff83, 0},
442      {NoFlag, 0xffff8002, 0xfffffffe, 0xffff8002, 0},
443      {NoFlag, 0xffffff80, 0xffffff81, 0xffffff80, 0},
444      {NoFlag, 0x7fffffff, 0xffffff81, 0x7fffffff, 0},
445      {NoFlag, 0x00000020, 0xffffff81, 0x00000020, 0},
446      {NoFlag, 0x0000007f, 0xffffffff, 0x0000007f, 0},
447      {NoFlag, 0x0000007d, 0xcccccccc, 0x0000007d, 0},
448      {NoFlag, 0x00007fff, 0x55555555, 0x00007fff, 0},
449      {NoFlag, 0xffff8003, 0x00007ffd, 0xffff8003, 0},
450      {NoFlag, 0x80000001, 0x80000001, 0x80000001, 0},
451      {NoFlag, 0xffffffff, 0xfffffffd, 0xffffffff, 0},
452      {NoFlag, 0xffff8000, 0xfffffffe, 0xffff8000, 0},
453      {NoFlag, 0xcccccccc, 0x0000007f, 0xcccccccc, 0},
454      {NoFlag, 0x00000001, 0x00000002, 0x00000001, 0},
455      {NoFlag, 0xffffff82, 0xffffff81, 0xffffff82, 0},
456      {NoFlag, 0xfffffffd, 0x00007ffd, 0xfffffffd, 0},
457      {NoFlag, 0x80000001, 0x33333333, 0x80000001, 0},
458      {NoFlag, 0xffffff82, 0xffff8002, 0xffffff82, 0},
459      {NoFlag, 0xffff8003, 0xfffffffd, 0xffff8003, 0},
460      {NoFlag, 0xffffff81, 0x00000020, 0xffffff81, 0},
461      {NoFlag, 0xffff8001, 0xffff8003, 0xffff8001, 0},
462      {NoFlag, 0x00000001, 0x80000001, 0x00000001, 0},
463      {NoFlag, 0xfffffffd, 0x00000002, 0xfffffffd, 0},
464      {NoFlag, 0xffff8003, 0x7ffffffd, 0xffff8003, 0},
465      {NoFlag, 0x0000007e, 0xaaaaaaaa, 0x0000007e, 0},
466      {NoFlag, 0x7ffffffe, 0x7fffffff, 0x7ffffffe, 0},
467      {NoFlag, 0x00007ffd, 0x00007ffe, 0x00007ffd, 0},
468      {NoFlag, 0x00007fff, 0x80000001, 0x00007fff, 0},
469      {NoFlag, 0x00007fff, 0xfffffffe, 0x00007fff, 0},
470      {NoFlag, 0x00000001, 0xffffff80, 0x00000001, 0},
471      {NoFlag, 0x55555555, 0xcccccccc, 0x55555555, 0},
472      {NoFlag, 0x7ffffffd, 0xffffffe0, 0x7ffffffd, 0},
473      {NoFlag, 0xffffff81, 0xfffffffe, 0xffffff81, 0},
474      {NoFlag, 0xffffff82, 0x00007ffe, 0xffffff82, 0},
475      {NoFlag, 0xffffff82, 0x80000001, 0xffffff82, 0},
476      {NoFlag, 0x0000007f, 0xffff8001, 0x0000007f, 0},
477      {NoFlag, 0x7ffffffd, 0xffffff83, 0x7ffffffd, 0},
478      {NoFlag, 0xffffff82, 0xcccccccc, 0xffffff82, 0},
479      {NoFlag, 0x00000020, 0xffffff83, 0x00000020, 0},
480      {NoFlag, 0x00007ffe, 0x80000000, 0x00007ffe, 0},
481      {NoFlag, 0x0000007f, 0xffff8000, 0x0000007f, 0},
482      {NoFlag, 0xffffff82, 0x33333333, 0xffffff82, 0},
483      {NoFlag, 0x7ffffffd, 0x7ffffffd, 0x7ffffffd, 0},
484      {NoFlag, 0xffffff80, 0xffff8001, 0xffffff80, 0},
485      {NoFlag, 0x00000002, 0xaaaaaaaa, 0x00000002, 0},
486      {NoFlag, 0xffffffff, 0x7fffffff, 0xffffffff, 0},
487      {NoFlag, 0xfffffffd, 0xfffffffe, 0xfffffffd, 0},
488      {NoFlag, 0x00000020, 0x00000001, 0x00000020, 0},
489      {NoFlag, 0x55555555, 0x00000001, 0x55555555, 0},
490      {NoFlag, 0x55555555, 0xffffff80, 0x55555555, 0},
491      {NoFlag, 0xffffffff, 0x00007fff, 0xffffffff, 0},
492      {NoFlag, 0x00000020, 0xaaaaaaaa, 0x00000020, 0},
493      {NoFlag, 0x00000002, 0x00007ffe, 0x00000002, 0},
494      {NoFlag, 0x00000001, 0xcccccccc, 0x00000001, 0},
495      {NoFlag, 0xffff8001, 0x00000000, 0xffff8001, 0},
496      {NoFlag, 0x00000001, 0xffff8000, 0x00000001, 0},
497      {NoFlag, 0xffffffe0, 0x00007fff, 0xffffffe0, 0},
498      {NoFlag, 0xfffffffe, 0x00007fff, 0xfffffffe, 0},
499      {NoFlag, 0xffffff83, 0x00000001, 0xffffff83, 0},
500      {NoFlag, 0x00007fff, 0xffff8002, 0x00007fff, 0},
501      {NoFlag, 0x7ffffffd, 0x7ffffffe, 0x7ffffffd, 0},
502      {NoFlag, 0x80000001, 0xaaaaaaaa, 0x80000001, 0},
503      {NoFlag, 0x80000001, 0xcccccccc, 0x80000001, 0},
504      {NoFlag, 0x00007ffe, 0xffffffe0, 0x00007ffe, 0},
505      {NoFlag, 0x00007ffe, 0xfffffffd, 0x00007ffe, 0},
506      {NoFlag, 0x55555555, 0xaaaaaaaa, 0x55555555, 0},
507      {NoFlag, 0xffffffe0, 0x00000001, 0xffffffe0, 0},
508      {NoFlag, 0x0000007e, 0x00007fff, 0x0000007e, 0},
509      {NoFlag, 0xfffffffe, 0xfffffffd, 0xfffffffe, 0},
510      {NoFlag, 0x33333333, 0x0000007d, 0x33333333, 0},
511      {NoFlag, 0xffffff81, 0x7fffffff, 0xffffff81, 0},
512      {NoFlag, 0x0000007e, 0x0000007d, 0x0000007e, 0},
513      {NoFlag, 0x00000001, 0xffffff81, 0x00000001, 0},
514      {NoFlag, 0x80000000, 0x00000002, 0x80000000, 0},
515      {NoFlag, 0x0000007d, 0xffff8003, 0x0000007d, 0},
516      {NoFlag, 0x7ffffffe, 0x00007ffd, 0x7ffffffe, 0},
517      {NoFlag, 0x7ffffffe, 0xaaaaaaaa, 0x7ffffffe, 0},
518      {NoFlag, 0x00000000, 0xffff8000, 0x00000000, 0},
519      {NoFlag, 0x33333333, 0x00000002, 0x33333333, 0},
520      {NoFlag, 0xffffff81, 0xffffff83, 0xffffff81, 0},
521      {NoFlag, 0x7ffffffe, 0x00007ffe, 0x7ffffffe, 0},
522      {NoFlag, 0x80000000, 0x0000007d, 0x80000000, 0},
523      {NoFlag, 0x00000020, 0x00000002, 0x00000020, 0},
524      {NoFlag, 0x33333333, 0x80000001, 0x33333333, 0},
525      {NoFlag, 0xffffff83, 0x00007ffd, 0xffffff83, 0},
526      {NoFlag, 0x00007ffd, 0xffffff83, 0x00007ffd, 0},
527      {NoFlag, 0xffff8001, 0x80000000, 0xffff8001, 0},
528      {NoFlag, 0x00000000, 0x80000000, 0x00000000, 0},
529      {NoFlag, 0xffffffe0, 0xffffffff, 0xffffffe0, 0},
530      {NoFlag, 0x80000000, 0xffffff83, 0x80000000, 0},
531      {NoFlag, 0x00000020, 0xffffff80, 0x00000020, 0},
532      {NoFlag, 0x7ffffffd, 0xffff8001, 0x7ffffffd, 0},
533      {NoFlag, 0x80000001, 0xffff8003, 0x80000001, 0},
534      {NoFlag, 0x00007ffe, 0x7fffffff, 0x00007ffe, 0},
535      {NoFlag, 0x7fffffff, 0x00000002, 0x7fffffff, 0},
536      {NoFlag, 0xffffff83, 0xffff8003, 0xffffff83, 0},
537      {NoFlag, 0xaaaaaaaa, 0xcccccccc, 0xaaaaaaaa, 0},
538      {NoFlag, 0x0000007f, 0xffffff80, 0x0000007f, 0},
539      {NoFlag, 0x80000001, 0x00007ffd, 0x80000001, 0},
540      {NoFlag, 0xffff8000, 0x80000001, 0xffff8000, 0},
541      {NoFlag, 0x00007fff, 0x00007ffd, 0x00007fff, 0},
542      {NoFlag, 0x0000007e, 0x0000007f, 0x0000007e, 0},
543      {NoFlag, 0x00000002, 0x0000007d, 0x00000002, 0},
544      {NoFlag, 0x80000001, 0x7fffffff, 0x80000001, 0},
545      {NoFlag, 0x0000007e, 0xffffff81, 0x0000007e, 0},
546      {NoFlag, 0x7ffffffe, 0xffff8001, 0x7ffffffe, 0},
547      {NoFlag, 0x7fffffff, 0x80000001, 0x7fffffff, 0},
548      {NoFlag, 0x7ffffffd, 0x0000007f, 0x7ffffffd, 0},
549      {NoFlag, 0xffffff81, 0xffffff81, 0xffffff81, 0},
550      {NoFlag, 0x00000001, 0xfffffffd, 0x00000001, 0},
551      {NoFlag, 0x00000001, 0xffffffff, 0x00000001, 0},
552      {NoFlag, 0x7ffffffd, 0x55555555, 0x7ffffffd, 0},
553      {NoFlag, 0x55555555, 0x0000007f, 0x55555555, 0},
554      {NoFlag, 0x55555555, 0xffff8003, 0x55555555, 0},
555      {NoFlag, 0xaaaaaaaa, 0x00007ffd, 0xaaaaaaaa, 0},
556      {NoFlag, 0x0000007e, 0x33333333, 0x0000007e, 0},
557      {NoFlag, 0xfffffffe, 0x80000001, 0xfffffffe, 0},
558      {NoFlag, 0xfffffffe, 0xffff8000, 0xfffffffe, 0},
559      {NoFlag, 0xffffffe0, 0xffffff81, 0xffffffe0, 0},
560      {NoFlag, 0x7fffffff, 0x0000007f, 0x7fffffff, 0},
561      {NoFlag, 0xffff8003, 0x0000007f, 0xffff8003, 0},
562      {NoFlag, 0xffffff82, 0x00007ffd, 0xffffff82, 0},
563      {NoFlag, 0x33333333, 0xffffffff, 0x33333333, 0},
564      {NoFlag, 0xffffffe0, 0xcccccccc, 0xffffffe0, 0},
565      {NoFlag, 0xffffff83, 0x7ffffffd, 0xffffff83, 0},
566      {NoFlag, 0x0000007e, 0xcccccccc, 0x0000007e, 0},
567      {NoFlag, 0x00000002, 0xfffffffd, 0x00000002, 0},
568      {NoFlag, 0x00007fff, 0xcccccccc, 0x00007fff, 0},
569      {NoFlag, 0x7fffffff, 0x00007fff, 0x7fffffff, 0},
570      {NoFlag, 0xffffffe0, 0x33333333, 0xffffffe0, 0},
571      {NoFlag, 0x0000007f, 0x0000007d, 0x0000007f, 0},
572      {NoFlag, 0x0000007f, 0xffffffe0, 0x0000007f, 0},
573      {NoFlag, 0x00007fff, 0xffff8000, 0x00007fff, 0},
574      {NoFlag, 0x7fffffff, 0xffffffff, 0x7fffffff, 0},
575      {NoFlag, 0xffff8000, 0x7ffffffd, 0xffff8000, 0},
576      {NoFlag, 0xcccccccc, 0x0000007e, 0xcccccccc, 0},
577      {NoFlag, 0x33333333, 0xffff8003, 0x33333333, 0},
578      {NoFlag, 0x55555555, 0x00000002, 0x55555555, 0},
579      {NoFlag, 0x00000001, 0x00000001, 0x00000001, 0},
580      {NoFlag, 0xaaaaaaaa, 0x33333333, 0xaaaaaaaa, 0},
581      {NoFlag, 0x7ffffffd, 0x00000001, 0x7ffffffd, 0},
582      {NoFlag, 0xffffff82, 0xffff8000, 0xffffff82, 0},
583      {NoFlag, 0x0000007d, 0x55555555, 0x0000007d, 0},
584      {NoFlag, 0xffff8000, 0x7ffffffe, 0xffff8000, 0},
585      {NoFlag, 0x7fffffff, 0xffffffe0, 0x7fffffff, 0},
586      {NoFlag, 0x7fffffff, 0xffff8003, 0x7fffffff, 0},
587      {NoFlag, 0xffffff82, 0xaaaaaaaa, 0xffffff82, 0},
588      {NoFlag, 0xfffffffd, 0xffffff80, 0xfffffffd, 0},
589      {NoFlag, 0x7ffffffd, 0x80000001, 0x7ffffffd, 0},
590      {NoFlag, 0x00000000, 0x00007ffd, 0x00000000, 0},
591      {NoFlag, 0xffffffff, 0xffffff80, 0xffffffff, 0},
592      {NoFlag, 0xffffff80, 0xcccccccc, 0xffffff80, 0},
593      {NoFlag, 0x00007ffe, 0x55555555, 0x00007ffe, 0},
594      {NoFlag, 0xffff8000, 0xffff8000, 0xffff8000, 0},
595      {NoFlag, 0xffffffff, 0xffff8000, 0xffffffff, 0},
596      {NoFlag, 0x80000001, 0x0000007d, 0x80000001, 0},
597      {NoFlag, 0xffffffe0, 0xffff8002, 0xffffffe0, 0},
598      {NoFlag, 0xfffffffe, 0xffffffe0, 0xfffffffe, 0},
599      {NoFlag, 0x80000000, 0xffff8003, 0x80000000, 0},
600      {NoFlag, 0x80000001, 0xffffff81, 0x80000001, 0},
601      {NoFlag, 0xffffffe0, 0x00007ffe, 0xffffffe0, 0}};
602 
603 static const Inputs kRdIsNotRnIsNotRm[] =
604     {{NoFlag, 0x0000007e, 0x0000007e, 0x0000007d, 0},
605      {NoFlag, 0x55555555, 0x00000002, 0xffff8002, 0},
606      {NoFlag, 0xffffffe0, 0x80000001, 0x00000000, 0},
607      {NoFlag, 0x55555555, 0xffffff83, 0x00000002, 0},
608      {NoFlag, 0xffffffe0, 0xffffffe0, 0x00000002, 0},
609      {NoFlag, 0x00000000, 0x80000001, 0xffffff82, 0},
610      {NoFlag, 0x80000001, 0x00007fff, 0x0000007f, 0},
611      {NoFlag, 0xffffff80, 0x0000007d, 0x7ffffffe, 0},
612      {NoFlag, 0xaaaaaaaa, 0x00000020, 0xffff8002, 0},
613      {NoFlag, 0x33333333, 0x55555555, 0x00000001, 0},
614      {NoFlag, 0x7ffffffe, 0x33333333, 0x00000000, 0},
615      {NoFlag, 0x80000000, 0x7ffffffd, 0x55555555, 0},
616      {NoFlag, 0xcccccccc, 0xffff8001, 0x7ffffffe, 0},
617      {NoFlag, 0x00000020, 0xffffff83, 0xffff8003, 0},
618      {NoFlag, 0x00007fff, 0xffffffe0, 0xffffff81, 0},
619      {NoFlag, 0xffff8000, 0xffff8001, 0x0000007e, 0},
620      {NoFlag, 0x33333333, 0x0000007e, 0x00000020, 0},
621      {NoFlag, 0x0000007f, 0xfffffffd, 0xaaaaaaaa, 0},
622      {NoFlag, 0xffffff83, 0xffffff82, 0x7ffffffd, 0},
623      {NoFlag, 0x0000007e, 0xcccccccc, 0x7fffffff, 0},
624      {NoFlag, 0xffff8001, 0x80000001, 0xffffffff, 0},
625      {NoFlag, 0xffffff81, 0x00000020, 0x7ffffffe, 0},
626      {NoFlag, 0xffffff83, 0xffffff81, 0xffffffe0, 0},
627      {NoFlag, 0xffffffe0, 0xffffff81, 0xfffffffd, 0},
628      {NoFlag, 0x80000001, 0xffffffff, 0xffffffff, 0},
629      {NoFlag, 0x7ffffffe, 0xffff8000, 0xcccccccc, 0},
630      {NoFlag, 0xffffff80, 0x00007ffe, 0xffffff82, 0},
631      {NoFlag, 0x0000007e, 0x0000007d, 0xffff8003, 0},
632      {NoFlag, 0xffff8002, 0xffffff81, 0x0000007e, 0},
633      {NoFlag, 0x00007fff, 0x7ffffffd, 0xfffffffe, 0},
634      {NoFlag, 0x00007ffe, 0x80000001, 0xffffff81, 0},
635      {NoFlag, 0xffffff81, 0x00007ffd, 0xfffffffd, 0},
636      {NoFlag, 0x00000020, 0x7fffffff, 0xffff8003, 0},
637      {NoFlag, 0x0000007e, 0x0000007d, 0x33333333, 0},
638      {NoFlag, 0xcccccccc, 0xffff8000, 0x00007ffe, 0},
639      {NoFlag, 0x00007fff, 0xffff8000, 0x00000020, 0},
640      {NoFlag, 0x00007ffd, 0x00007fff, 0xffffffe0, 0},
641      {NoFlag, 0x7ffffffd, 0x00000000, 0x00007ffe, 0},
642      {NoFlag, 0xffffff82, 0x33333333, 0x00000001, 0},
643      {NoFlag, 0x7ffffffe, 0xffffff80, 0x00000020, 0},
644      {NoFlag, 0x00007fff, 0xffffff83, 0x00007ffd, 0},
645      {NoFlag, 0xffff8001, 0xffffffff, 0x80000001, 0},
646      {NoFlag, 0x00000002, 0xffffff81, 0xcccccccc, 0},
647      {NoFlag, 0x55555555, 0x0000007f, 0xffff8001, 0},
648      {NoFlag, 0x80000000, 0x00000020, 0x80000000, 0},
649      {NoFlag, 0xffffff83, 0x00007fff, 0xffffff80, 0},
650      {NoFlag, 0x33333333, 0x7ffffffe, 0x7ffffffd, 0},
651      {NoFlag, 0xffffff80, 0xffffffff, 0x00000001, 0},
652      {NoFlag, 0x00007ffd, 0x7ffffffd, 0xffffff83, 0},
653      {NoFlag, 0x33333333, 0xffff8001, 0xffffffe0, 0},
654      {NoFlag, 0xffff8001, 0xffffff80, 0x00007ffd, 0},
655      {NoFlag, 0xffffffe0, 0x00007fff, 0x00007ffe, 0},
656      {NoFlag, 0x0000007d, 0x00000000, 0xffff8000, 0},
657      {NoFlag, 0x7ffffffe, 0xaaaaaaaa, 0x7ffffffe, 0},
658      {NoFlag, 0x0000007e, 0x00007ffd, 0xffffffe0, 0},
659      {NoFlag, 0xfffffffd, 0xffffffe0, 0xffffff83, 0},
660      {NoFlag, 0x00000001, 0xffffffe0, 0x7ffffffd, 0},
661      {NoFlag, 0xfffffffd, 0xffff8002, 0x80000000, 0},
662      {NoFlag, 0x00000020, 0xffffffff, 0x80000000, 0},
663      {NoFlag, 0x00000001, 0x80000001, 0xffff8003, 0},
664      {NoFlag, 0xffff8003, 0xaaaaaaaa, 0xffffff81, 0},
665      {NoFlag, 0x0000007f, 0xfffffffd, 0xffffffe0, 0},
666      {NoFlag, 0x00007ffe, 0xffffff80, 0x00007ffe, 0},
667      {NoFlag, 0xffff8002, 0xffff8003, 0xffffffff, 0},
668      {NoFlag, 0x7ffffffe, 0xffffff82, 0xffff8000, 0},
669      {NoFlag, 0xffff8000, 0x00000002, 0x80000000, 0},
670      {NoFlag, 0xffffff80, 0xffffff82, 0xffffff81, 0},
671      {NoFlag, 0x00000000, 0xcccccccc, 0x00007ffd, 0},
672      {NoFlag, 0x55555555, 0x00007ffe, 0x7fffffff, 0},
673      {NoFlag, 0x00000002, 0xffffff81, 0xaaaaaaaa, 0},
674      {NoFlag, 0x00007ffd, 0x0000007e, 0x00000002, 0},
675      {NoFlag, 0xffffff83, 0x0000007e, 0xffffff80, 0},
676      {NoFlag, 0xcccccccc, 0x00007ffe, 0xaaaaaaaa, 0},
677      {NoFlag, 0x7ffffffe, 0x55555555, 0xffff8003, 0},
678      {NoFlag, 0xfffffffd, 0x00000001, 0xffffff80, 0},
679      {NoFlag, 0x00007ffd, 0x55555555, 0x80000001, 0},
680      {NoFlag, 0x0000007f, 0x00000000, 0x0000007e, 0},
681      {NoFlag, 0x7fffffff, 0xaaaaaaaa, 0x00000000, 0},
682      {NoFlag, 0x7ffffffd, 0xffffff81, 0xcccccccc, 0},
683      {NoFlag, 0xffffffe0, 0xcccccccc, 0xfffffffd, 0},
684      {NoFlag, 0x00000002, 0xffff8000, 0x7ffffffd, 0},
685      {NoFlag, 0xffffffe0, 0xffff8000, 0x80000001, 0},
686      {NoFlag, 0x7ffffffd, 0xffff8003, 0xffff8001, 0},
687      {NoFlag, 0x33333333, 0x00007ffd, 0x80000000, 0},
688      {NoFlag, 0x7ffffffd, 0x00007fff, 0xcccccccc, 0},
689      {NoFlag, 0xffffffff, 0xffffff80, 0x00007ffe, 0},
690      {NoFlag, 0xffffff83, 0x7ffffffd, 0xaaaaaaaa, 0},
691      {NoFlag, 0xfffffffd, 0xffff8003, 0x0000007f, 0},
692      {NoFlag, 0xfffffffe, 0xfffffffe, 0xfffffffd, 0},
693      {NoFlag, 0x00007fff, 0xfffffffe, 0x55555555, 0},
694      {NoFlag, 0x7ffffffd, 0xfffffffe, 0xfffffffe, 0},
695      {NoFlag, 0xfffffffe, 0xffffffff, 0x00007fff, 0},
696      {NoFlag, 0x7ffffffd, 0x0000007e, 0x00007ffd, 0},
697      {NoFlag, 0x7ffffffd, 0xffffffe0, 0x00000002, 0},
698      {NoFlag, 0xffffffff, 0x00007ffd, 0xffffff81, 0},
699      {NoFlag, 0xffff8001, 0x00000020, 0xfffffffd, 0},
700      {NoFlag, 0x00007fff, 0x0000007d, 0xffffff83, 0},
701      {NoFlag, 0x00000002, 0x55555555, 0x7ffffffe, 0},
702      {NoFlag, 0x00007fff, 0x00007ffe, 0x00000002, 0},
703      {NoFlag, 0x80000001, 0x7fffffff, 0x00007ffd, 0},
704      {NoFlag, 0x0000007f, 0xffffffff, 0x00000001, 0},
705      {NoFlag, 0xffff8001, 0x33333333, 0xffffff83, 0},
706      {NoFlag, 0x00007fff, 0xcccccccc, 0x33333333, 0},
707      {NoFlag, 0x33333333, 0xffffff80, 0x00000001, 0},
708      {NoFlag, 0x00007fff, 0xcccccccc, 0x00007ffd, 0},
709      {NoFlag, 0xffff8002, 0xfffffffd, 0x7ffffffe, 0},
710      {NoFlag, 0x00007ffe, 0x7ffffffe, 0xffffff83, 0},
711      {NoFlag, 0xffffffe0, 0x0000007f, 0xffff8001, 0},
712      {NoFlag, 0x80000000, 0x00007fff, 0xffffff80, 0},
713      {NoFlag, 0x7fffffff, 0x00007fff, 0x7ffffffe, 0},
714      {NoFlag, 0xffff8002, 0x55555555, 0xffff8001, 0},
715      {NoFlag, 0xffffff80, 0x00000000, 0xffffff80, 0},
716      {NoFlag, 0x00007ffd, 0x00007fff, 0x00000002, 0},
717      {NoFlag, 0x00000000, 0x55555555, 0xffff8003, 0},
718      {NoFlag, 0x0000007f, 0xffff8003, 0x00000020, 0},
719      {NoFlag, 0x00000000, 0xffff8002, 0x7fffffff, 0},
720      {NoFlag, 0x00007fff, 0x55555555, 0x00000000, 0},
721      {NoFlag, 0x7fffffff, 0x00007ffe, 0xffffff81, 0},
722      {NoFlag, 0x0000007e, 0x80000001, 0x00007ffe, 0},
723      {NoFlag, 0x7ffffffd, 0xaaaaaaaa, 0x00000020, 0},
724      {NoFlag, 0xfffffffd, 0xfffffffe, 0x00000002, 0},
725      {NoFlag, 0xffffff80, 0xffff8000, 0xffff8002, 0},
726      {NoFlag, 0x0000007d, 0x00007fff, 0xaaaaaaaa, 0},
727      {NoFlag, 0xfffffffd, 0xffffff80, 0x00007ffd, 0},
728      {NoFlag, 0xffffff82, 0x80000000, 0xffffff80, 0},
729      {NoFlag, 0xffffffe0, 0x55555555, 0xfffffffd, 0},
730      {NoFlag, 0xffffffff, 0xffffffff, 0x00007ffd, 0},
731      {NoFlag, 0x0000007e, 0xfffffffe, 0xffffff80, 0},
732      {NoFlag, 0xffff8000, 0xffffff82, 0xffff8002, 0},
733      {NoFlag, 0xaaaaaaaa, 0x7ffffffe, 0xffff8000, 0},
734      {NoFlag, 0x55555555, 0xffff8003, 0xffffff80, 0},
735      {NoFlag, 0x7ffffffe, 0x00000020, 0xffffffe0, 0},
736      {NoFlag, 0x00000001, 0xffff8001, 0xffffffe0, 0},
737      {NoFlag, 0xcccccccc, 0xffff8000, 0xffff8002, 0},
738      {NoFlag, 0x80000000, 0x00000002, 0x7ffffffe, 0},
739      {NoFlag, 0x00000002, 0x0000007f, 0xffffff81, 0},
740      {NoFlag, 0xffffffff, 0x00000001, 0x7fffffff, 0},
741      {NoFlag, 0xffffff83, 0x00000000, 0x33333333, 0},
742      {NoFlag, 0xffff8000, 0xffffff83, 0xcccccccc, 0},
743      {NoFlag, 0x80000000, 0x00000020, 0x00007ffd, 0},
744      {NoFlag, 0xffffff81, 0xcccccccc, 0x00000000, 0},
745      {NoFlag, 0xffffffff, 0xffff8000, 0x00007fff, 0},
746      {NoFlag, 0xffff8003, 0xcccccccc, 0x00007ffe, 0},
747      {NoFlag, 0xffffffff, 0xfffffffd, 0x7ffffffe, 0},
748      {NoFlag, 0xffff8003, 0xaaaaaaaa, 0x55555555, 0},
749      {NoFlag, 0x00000000, 0xaaaaaaaa, 0xffffff81, 0},
750      {NoFlag, 0x0000007f, 0xfffffffe, 0xffff8000, 0},
751      {NoFlag, 0x00000001, 0xffffffe0, 0xfffffffd, 0},
752      {NoFlag, 0x33333333, 0x33333333, 0xfffffffd, 0},
753      {NoFlag, 0xffffff82, 0xffff8002, 0x80000001, 0},
754      {NoFlag, 0x55555555, 0xffffff83, 0xffffff83, 0},
755      {NoFlag, 0xffffff83, 0xffff8002, 0x00000020, 0},
756      {NoFlag, 0x0000007d, 0x7fffffff, 0x0000007f, 0},
757      {NoFlag, 0x00000000, 0xcccccccc, 0xffff8000, 0},
758      {NoFlag, 0x00000002, 0x7ffffffe, 0x00007fff, 0},
759      {NoFlag, 0xffffff82, 0x7ffffffd, 0x7ffffffd, 0},
760      {NoFlag, 0xaaaaaaaa, 0xfffffffd, 0xffff8002, 0},
761      {NoFlag, 0xfffffffd, 0x00000002, 0x7fffffff, 0},
762      {NoFlag, 0xfffffffe, 0xfffffffe, 0x00000020, 0},
763      {NoFlag, 0x80000001, 0x0000007e, 0x00007ffe, 0},
764      {NoFlag, 0x00007ffd, 0x00007ffd, 0xfffffffd, 0},
765      {NoFlag, 0xffff8000, 0x0000007f, 0x00000002, 0},
766      {NoFlag, 0x7ffffffd, 0x80000000, 0x7ffffffd, 0},
767      {NoFlag, 0x0000007d, 0x00007fff, 0x80000001, 0},
768      {NoFlag, 0xffffffff, 0x80000000, 0xaaaaaaaa, 0},
769      {NoFlag, 0x00000000, 0xaaaaaaaa, 0xffff8001, 0},
770      {NoFlag, 0xaaaaaaaa, 0xffffffe0, 0xffff8003, 0},
771      {NoFlag, 0xffffff82, 0xffffffff, 0x00007ffd, 0},
772      {NoFlag, 0x00000001, 0xffffff81, 0x00000001, 0},
773      {NoFlag, 0x7fffffff, 0xaaaaaaaa, 0x80000001, 0},
774      {NoFlag, 0x7fffffff, 0xffff8000, 0xffff8000, 0},
775      {NoFlag, 0xaaaaaaaa, 0x00007ffd, 0xaaaaaaaa, 0},
776      {NoFlag, 0x0000007f, 0x7ffffffe, 0x80000000, 0},
777      {NoFlag, 0x00007ffd, 0x00007ffe, 0xffffff81, 0},
778      {NoFlag, 0x0000007d, 0x0000007d, 0xffff8002, 0},
779      {NoFlag, 0x80000001, 0x00000002, 0xffffff81, 0},
780      {NoFlag, 0xffff8000, 0xfffffffd, 0x7ffffffd, 0},
781      {NoFlag, 0xfffffffe, 0x00000020, 0xffffff80, 0},
782      {NoFlag, 0x00000020, 0x7fffffff, 0xffffffe0, 0},
783      {NoFlag, 0xffff8002, 0xffff8002, 0x0000007f, 0},
784      {NoFlag, 0xffff8003, 0x7fffffff, 0xffff8002, 0},
785      {NoFlag, 0x00000020, 0xfffffffd, 0x00000020, 0},
786      {NoFlag, 0x7ffffffd, 0xffffffe0, 0x0000007e, 0},
787      {NoFlag, 0x00000020, 0x00000020, 0x7ffffffe, 0},
788      {NoFlag, 0xfffffffe, 0x0000007f, 0xffff8000, 0},
789      {NoFlag, 0x80000001, 0x80000001, 0x0000007d, 0},
790      {NoFlag, 0x55555555, 0x0000007f, 0x00007ffd, 0},
791      {NoFlag, 0x55555555, 0xffffffe0, 0xffffff82, 0},
792      {NoFlag, 0xffff8001, 0x0000007e, 0xffff8002, 0},
793      {NoFlag, 0xffffffe0, 0x55555555, 0x0000007f, 0},
794      {NoFlag, 0xffff8000, 0x7fffffff, 0x7ffffffe, 0},
795      {NoFlag, 0xffffffff, 0xfffffffe, 0xffffff80, 0},
796      {NoFlag, 0xffff8001, 0xffff8002, 0x33333333, 0},
797      {NoFlag, 0x7ffffffd, 0xfffffffd, 0xaaaaaaaa, 0},
798      {NoFlag, 0xaaaaaaaa, 0xfffffffd, 0x00000020, 0},
799      {NoFlag, 0x0000007f, 0x00007ffe, 0x55555555, 0},
800      {NoFlag, 0x00000020, 0x00000020, 0x00000002, 0},
801      {NoFlag, 0x80000001, 0xffff8002, 0xfffffffe, 0},
802      {NoFlag, 0x7fffffff, 0x80000001, 0xffff8002, 0},
803      {NoFlag, 0x00000020, 0x0000007e, 0x33333333, 0}};
804 
805 static const Inputs kShiftTypes[] =
806     {{NoFlag, 0xabababab, 0xabababab, 0x00000000, 0},
807      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 1},
808      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 2},
809      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 3},
810      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 4},
811      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 5},
812      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 6},
813      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 7},
814      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 8},
815      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 9},
816      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 10},
817      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 11},
818      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 12},
819      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 13},
820      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 14},
821      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 15},
822      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 16},
823      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 17},
824      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 18},
825      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 19},
826      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 20},
827      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 21},
828      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 22},
829      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 23},
830      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 24},
831      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 25},
832      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 26},
833      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 27},
834      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 28},
835      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 29},
836      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 30},
837      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 31},
838      {NoFlag, 0xabababab, 0xabababab, 0x00000000, 32},
839      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 0},
840      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 1},
841      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 2},
842      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 3},
843      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 4},
844      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 5},
845      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 6},
846      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 7},
847      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 8},
848      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 9},
849      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 10},
850      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 11},
851      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 12},
852      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 13},
853      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 14},
854      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 15},
855      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 16},
856      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 17},
857      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 18},
858      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 19},
859      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 20},
860      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 21},
861      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 22},
862      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 23},
863      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 24},
864      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 25},
865      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 26},
866      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 27},
867      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 28},
868      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 29},
869      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 30},
870      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 31},
871      {NoFlag, 0xabababab, 0xabababab, 0x00000001, 32},
872      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 0},
873      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 1},
874      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 2},
875      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 3},
876      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 4},
877      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 5},
878      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 6},
879      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 7},
880      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 8},
881      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 9},
882      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 10},
883      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 11},
884      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 12},
885      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 13},
886      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 14},
887      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 15},
888      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 16},
889      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 17},
890      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 18},
891      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 19},
892      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 20},
893      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 21},
894      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 22},
895      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 23},
896      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 24},
897      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 25},
898      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 26},
899      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 27},
900      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 28},
901      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 29},
902      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 30},
903      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 31},
904      {NoFlag, 0xabababab, 0xabababab, 0x00000002, 32},
905      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 0},
906      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 1},
907      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 2},
908      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 3},
909      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 4},
910      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 5},
911      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 6},
912      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 7},
913      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 8},
914      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 9},
915      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 10},
916      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 11},
917      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 12},
918      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 13},
919      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 14},
920      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 15},
921      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 16},
922      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 17},
923      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 18},
924      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 19},
925      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 20},
926      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 21},
927      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 22},
928      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 23},
929      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 24},
930      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 25},
931      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 26},
932      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 27},
933      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 28},
934      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 29},
935      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 30},
936      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 31},
937      {NoFlag, 0xabababab, 0xabababab, 0x00000020, 32},
938      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 0},
939      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 1},
940      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 2},
941      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 3},
942      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 4},
943      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 5},
944      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 6},
945      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 7},
946      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 8},
947      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 9},
948      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 10},
949      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 11},
950      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 12},
951      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 13},
952      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 14},
953      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 15},
954      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 16},
955      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 17},
956      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 18},
957      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 19},
958      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 20},
959      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 21},
960      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 22},
961      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 23},
962      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 24},
963      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 25},
964      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 26},
965      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 27},
966      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 28},
967      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 29},
968      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 30},
969      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 31},
970      {NoFlag, 0xabababab, 0xabababab, 0x0000007d, 32},
971      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 0},
972      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 1},
973      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 2},
974      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 3},
975      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 4},
976      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 5},
977      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 6},
978      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 7},
979      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 8},
980      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 9},
981      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 10},
982      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 11},
983      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 12},
984      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 13},
985      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 14},
986      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 15},
987      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 16},
988      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 17},
989      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 18},
990      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 19},
991      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 20},
992      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 21},
993      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 22},
994      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 23},
995      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 24},
996      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 25},
997      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 26},
998      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 27},
999      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 28},
1000      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 29},
1001      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 30},
1002      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 31},
1003      {NoFlag, 0xabababab, 0xabababab, 0x0000007e, 32},
1004      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 0},
1005      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 1},
1006      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 2},
1007      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 3},
1008      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 4},
1009      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 5},
1010      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 6},
1011      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 7},
1012      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 8},
1013      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 9},
1014      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 10},
1015      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 11},
1016      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 12},
1017      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 13},
1018      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 14},
1019      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 15},
1020      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 16},
1021      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 17},
1022      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 18},
1023      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 19},
1024      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 20},
1025      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 21},
1026      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 22},
1027      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 23},
1028      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 24},
1029      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 25},
1030      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 26},
1031      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 27},
1032      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 28},
1033      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 29},
1034      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 30},
1035      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 31},
1036      {NoFlag, 0xabababab, 0xabababab, 0x0000007f, 32},
1037      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 0},
1038      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 1},
1039      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 2},
1040      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 3},
1041      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 4},
1042      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 5},
1043      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 6},
1044      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 7},
1045      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 8},
1046      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 9},
1047      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 10},
1048      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 11},
1049      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 12},
1050      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 13},
1051      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 14},
1052      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 15},
1053      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 16},
1054      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 17},
1055      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 18},
1056      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 19},
1057      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 20},
1058      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 21},
1059      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 22},
1060      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 23},
1061      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 24},
1062      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 25},
1063      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 26},
1064      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 27},
1065      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 28},
1066      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 29},
1067      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 30},
1068      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 31},
1069      {NoFlag, 0xabababab, 0xabababab, 0x00007ffd, 32},
1070      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 0},
1071      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 1},
1072      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 2},
1073      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 3},
1074      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 4},
1075      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 5},
1076      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 6},
1077      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 7},
1078      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 8},
1079      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 9},
1080      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 10},
1081      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 11},
1082      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 12},
1083      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 13},
1084      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 14},
1085      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 15},
1086      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 16},
1087      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 17},
1088      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 18},
1089      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 19},
1090      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 20},
1091      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 21},
1092      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 22},
1093      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 23},
1094      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 24},
1095      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 25},
1096      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 26},
1097      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 27},
1098      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 28},
1099      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 29},
1100      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 30},
1101      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 31},
1102      {NoFlag, 0xabababab, 0xabababab, 0x00007ffe, 32},
1103      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 0},
1104      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 1},
1105      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 2},
1106      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 3},
1107      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 4},
1108      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 5},
1109      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 6},
1110      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 7},
1111      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 8},
1112      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 9},
1113      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 10},
1114      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 11},
1115      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 12},
1116      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 13},
1117      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 14},
1118      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 15},
1119      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 16},
1120      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 17},
1121      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 18},
1122      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 19},
1123      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 20},
1124      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 21},
1125      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 22},
1126      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 23},
1127      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 24},
1128      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 25},
1129      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 26},
1130      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 27},
1131      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 28},
1132      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 29},
1133      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 30},
1134      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 31},
1135      {NoFlag, 0xabababab, 0xabababab, 0x00007fff, 32},
1136      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 0},
1137      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 1},
1138      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 2},
1139      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 3},
1140      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 4},
1141      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 5},
1142      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 6},
1143      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 7},
1144      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 8},
1145      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 9},
1146      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 10},
1147      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 11},
1148      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 12},
1149      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 13},
1150      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 14},
1151      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 15},
1152      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 16},
1153      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 17},
1154      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 18},
1155      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 19},
1156      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 20},
1157      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 21},
1158      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 22},
1159      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 23},
1160      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 24},
1161      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 25},
1162      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 26},
1163      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 27},
1164      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 28},
1165      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 29},
1166      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 30},
1167      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 31},
1168      {NoFlag, 0xabababab, 0xabababab, 0x33333333, 32},
1169      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 0},
1170      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 1},
1171      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 2},
1172      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 3},
1173      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 4},
1174      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 5},
1175      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 6},
1176      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 7},
1177      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 8},
1178      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 9},
1179      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 10},
1180      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 11},
1181      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 12},
1182      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 13},
1183      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 14},
1184      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 15},
1185      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 16},
1186      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 17},
1187      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 18},
1188      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 19},
1189      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 20},
1190      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 21},
1191      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 22},
1192      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 23},
1193      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 24},
1194      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 25},
1195      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 26},
1196      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 27},
1197      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 28},
1198      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 29},
1199      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 30},
1200      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 31},
1201      {NoFlag, 0xabababab, 0xabababab, 0x55555555, 32},
1202      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 0},
1203      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 1},
1204      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 2},
1205      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 3},
1206      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 4},
1207      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 5},
1208      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 6},
1209      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 7},
1210      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 8},
1211      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 9},
1212      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 10},
1213      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 11},
1214      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 12},
1215      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 13},
1216      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 14},
1217      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 15},
1218      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 16},
1219      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 17},
1220      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 18},
1221      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 19},
1222      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 20},
1223      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 21},
1224      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 22},
1225      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 23},
1226      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 24},
1227      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 25},
1228      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 26},
1229      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 27},
1230      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 28},
1231      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 29},
1232      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 30},
1233      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 31},
1234      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffd, 32},
1235      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 0},
1236      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 1},
1237      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 2},
1238      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 3},
1239      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 4},
1240      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 5},
1241      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 6},
1242      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 7},
1243      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 8},
1244      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 9},
1245      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 10},
1246      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 11},
1247      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 12},
1248      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 13},
1249      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 14},
1250      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 15},
1251      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 16},
1252      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 17},
1253      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 18},
1254      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 19},
1255      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 20},
1256      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 21},
1257      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 22},
1258      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 23},
1259      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 24},
1260      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 25},
1261      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 26},
1262      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 27},
1263      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 28},
1264      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 29},
1265      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 30},
1266      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 31},
1267      {NoFlag, 0xabababab, 0xabababab, 0x7ffffffe, 32},
1268      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 0},
1269      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 1},
1270      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 2},
1271      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 3},
1272      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 4},
1273      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 5},
1274      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 6},
1275      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 7},
1276      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 8},
1277      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 9},
1278      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 10},
1279      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 11},
1280      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 12},
1281      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 13},
1282      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 14},
1283      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 15},
1284      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 16},
1285      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 17},
1286      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 18},
1287      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 19},
1288      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 20},
1289      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 21},
1290      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 22},
1291      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 23},
1292      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 24},
1293      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 25},
1294      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 26},
1295      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 27},
1296      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 28},
1297      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 29},
1298      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 30},
1299      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 31},
1300      {NoFlag, 0xabababab, 0xabababab, 0x7fffffff, 32},
1301      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 0},
1302      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 1},
1303      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 2},
1304      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 3},
1305      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 4},
1306      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 5},
1307      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 6},
1308      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 7},
1309      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 8},
1310      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 9},
1311      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 10},
1312      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 11},
1313      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 12},
1314      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 13},
1315      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 14},
1316      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 15},
1317      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 16},
1318      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 17},
1319      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 18},
1320      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 19},
1321      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 20},
1322      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 21},
1323      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 22},
1324      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 23},
1325      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 24},
1326      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 25},
1327      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 26},
1328      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 27},
1329      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 28},
1330      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 29},
1331      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 30},
1332      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 31},
1333      {NoFlag, 0xabababab, 0xabababab, 0x80000000, 32},
1334      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 0},
1335      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 1},
1336      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 2},
1337      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 3},
1338      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 4},
1339      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 5},
1340      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 6},
1341      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 7},
1342      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 8},
1343      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 9},
1344      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 10},
1345      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 11},
1346      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 12},
1347      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 13},
1348      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 14},
1349      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 15},
1350      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 16},
1351      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 17},
1352      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 18},
1353      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 19},
1354      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 20},
1355      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 21},
1356      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 22},
1357      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 23},
1358      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 24},
1359      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 25},
1360      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 26},
1361      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 27},
1362      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 28},
1363      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 29},
1364      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 30},
1365      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 31},
1366      {NoFlag, 0xabababab, 0xabababab, 0x80000001, 32},
1367      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 0},
1368      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 1},
1369      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 2},
1370      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 3},
1371      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 4},
1372      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 5},
1373      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 6},
1374      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 7},
1375      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 8},
1376      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 9},
1377      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 10},
1378      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 11},
1379      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 12},
1380      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 13},
1381      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 14},
1382      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 15},
1383      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 16},
1384      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 17},
1385      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 18},
1386      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 19},
1387      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 20},
1388      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 21},
1389      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 22},
1390      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 23},
1391      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 24},
1392      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 25},
1393      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 26},
1394      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 27},
1395      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 28},
1396      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 29},
1397      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 30},
1398      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 31},
1399      {NoFlag, 0xabababab, 0xabababab, 0xaaaaaaaa, 32},
1400      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 0},
1401      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 1},
1402      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 2},
1403      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 3},
1404      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 4},
1405      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 5},
1406      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 6},
1407      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 7},
1408      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 8},
1409      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 9},
1410      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 10},
1411      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 11},
1412      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 12},
1413      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 13},
1414      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 14},
1415      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 15},
1416      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 16},
1417      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 17},
1418      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 18},
1419      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 19},
1420      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 20},
1421      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 21},
1422      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 22},
1423      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 23},
1424      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 24},
1425      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 25},
1426      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 26},
1427      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 27},
1428      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 28},
1429      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 29},
1430      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 30},
1431      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 31},
1432      {NoFlag, 0xabababab, 0xabababab, 0xcccccccc, 32},
1433      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 0},
1434      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 1},
1435      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 2},
1436      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 3},
1437      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 4},
1438      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 5},
1439      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 6},
1440      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 7},
1441      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 8},
1442      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 9},
1443      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 10},
1444      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 11},
1445      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 12},
1446      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 13},
1447      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 14},
1448      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 15},
1449      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 16},
1450      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 17},
1451      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 18},
1452      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 19},
1453      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 20},
1454      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 21},
1455      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 22},
1456      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 23},
1457      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 24},
1458      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 25},
1459      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 26},
1460      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 27},
1461      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 28},
1462      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 29},
1463      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 30},
1464      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 31},
1465      {NoFlag, 0xabababab, 0xabababab, 0xffff8000, 32},
1466      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 0},
1467      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 1},
1468      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 2},
1469      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 3},
1470      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 4},
1471      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 5},
1472      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 6},
1473      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 7},
1474      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 8},
1475      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 9},
1476      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 10},
1477      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 11},
1478      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 12},
1479      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 13},
1480      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 14},
1481      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 15},
1482      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 16},
1483      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 17},
1484      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 18},
1485      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 19},
1486      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 20},
1487      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 21},
1488      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 22},
1489      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 23},
1490      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 24},
1491      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 25},
1492      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 26},
1493      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 27},
1494      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 28},
1495      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 29},
1496      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 30},
1497      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 31},
1498      {NoFlag, 0xabababab, 0xabababab, 0xffff8001, 32},
1499      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 0},
1500      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 1},
1501      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 2},
1502      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 3},
1503      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 4},
1504      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 5},
1505      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 6},
1506      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 7},
1507      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 8},
1508      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 9},
1509      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 10},
1510      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 11},
1511      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 12},
1512      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 13},
1513      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 14},
1514      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 15},
1515      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 16},
1516      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 17},
1517      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 18},
1518      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 19},
1519      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 20},
1520      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 21},
1521      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 22},
1522      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 23},
1523      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 24},
1524      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 25},
1525      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 26},
1526      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 27},
1527      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 28},
1528      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 29},
1529      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 30},
1530      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 31},
1531      {NoFlag, 0xabababab, 0xabababab, 0xffff8002, 32},
1532      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 0},
1533      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 1},
1534      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 2},
1535      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 3},
1536      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 4},
1537      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 5},
1538      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 6},
1539      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 7},
1540      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 8},
1541      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 9},
1542      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 10},
1543      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 11},
1544      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 12},
1545      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 13},
1546      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 14},
1547      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 15},
1548      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 16},
1549      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 17},
1550      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 18},
1551      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 19},
1552      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 20},
1553      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 21},
1554      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 22},
1555      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 23},
1556      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 24},
1557      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 25},
1558      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 26},
1559      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 27},
1560      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 28},
1561      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 29},
1562      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 30},
1563      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 31},
1564      {NoFlag, 0xabababab, 0xabababab, 0xffff8003, 32},
1565      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 0},
1566      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 1},
1567      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 2},
1568      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 3},
1569      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 4},
1570      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 5},
1571      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 6},
1572      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 7},
1573      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 8},
1574      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 9},
1575      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 10},
1576      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 11},
1577      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 12},
1578      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 13},
1579      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 14},
1580      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 15},
1581      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 16},
1582      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 17},
1583      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 18},
1584      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 19},
1585      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 20},
1586      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 21},
1587      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 22},
1588      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 23},
1589      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 24},
1590      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 25},
1591      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 26},
1592      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 27},
1593      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 28},
1594      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 29},
1595      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 30},
1596      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 31},
1597      {NoFlag, 0xabababab, 0xabababab, 0xffffff80, 32},
1598      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 0},
1599      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 1},
1600      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 2},
1601      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 3},
1602      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 4},
1603      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 5},
1604      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 6},
1605      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 7},
1606      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 8},
1607      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 9},
1608      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 10},
1609      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 11},
1610      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 12},
1611      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 13},
1612      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 14},
1613      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 15},
1614      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 16},
1615      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 17},
1616      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 18},
1617      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 19},
1618      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 20},
1619      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 21},
1620      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 22},
1621      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 23},
1622      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 24},
1623      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 25},
1624      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 26},
1625      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 27},
1626      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 28},
1627      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 29},
1628      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 30},
1629      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 31},
1630      {NoFlag, 0xabababab, 0xabababab, 0xffffff81, 32},
1631      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 0},
1632      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 1},
1633      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 2},
1634      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 3},
1635      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 4},
1636      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 5},
1637      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 6},
1638      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 7},
1639      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 8},
1640      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 9},
1641      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 10},
1642      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 11},
1643      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 12},
1644      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 13},
1645      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 14},
1646      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 15},
1647      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 16},
1648      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 17},
1649      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 18},
1650      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 19},
1651      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 20},
1652      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 21},
1653      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 22},
1654      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 23},
1655      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 24},
1656      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 25},
1657      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 26},
1658      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 27},
1659      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 28},
1660      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 29},
1661      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 30},
1662      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 31},
1663      {NoFlag, 0xabababab, 0xabababab, 0xffffff82, 32},
1664      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 0},
1665      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 1},
1666      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 2},
1667      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 3},
1668      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 4},
1669      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 5},
1670      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 6},
1671      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 7},
1672      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 8},
1673      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 9},
1674      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 10},
1675      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 11},
1676      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 12},
1677      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 13},
1678      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 14},
1679      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 15},
1680      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 16},
1681      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 17},
1682      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 18},
1683      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 19},
1684      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 20},
1685      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 21},
1686      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 22},
1687      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 23},
1688      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 24},
1689      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 25},
1690      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 26},
1691      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 27},
1692      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 28},
1693      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 29},
1694      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 30},
1695      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 31},
1696      {NoFlag, 0xabababab, 0xabababab, 0xffffff83, 32},
1697      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 0},
1698      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 1},
1699      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 2},
1700      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 3},
1701      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 4},
1702      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 5},
1703      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 6},
1704      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 7},
1705      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 8},
1706      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 9},
1707      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 10},
1708      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 11},
1709      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 12},
1710      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 13},
1711      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 14},
1712      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 15},
1713      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 16},
1714      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 17},
1715      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 18},
1716      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 19},
1717      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 20},
1718      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 21},
1719      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 22},
1720      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 23},
1721      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 24},
1722      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 25},
1723      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 26},
1724      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 27},
1725      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 28},
1726      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 29},
1727      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 30},
1728      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 31},
1729      {NoFlag, 0xabababab, 0xabababab, 0xffffffe0, 32},
1730      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 0},
1731      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 1},
1732      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 2},
1733      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 3},
1734      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 4},
1735      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 5},
1736      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 6},
1737      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 7},
1738      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 8},
1739      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 9},
1740      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 10},
1741      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 11},
1742      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 12},
1743      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 13},
1744      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 14},
1745      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 15},
1746      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 16},
1747      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 17},
1748      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 18},
1749      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 19},
1750      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 20},
1751      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 21},
1752      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 22},
1753      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 23},
1754      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 24},
1755      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 25},
1756      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 26},
1757      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 27},
1758      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 28},
1759      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 29},
1760      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 30},
1761      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 31},
1762      {NoFlag, 0xabababab, 0xabababab, 0xfffffffd, 32},
1763      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 0},
1764      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 1},
1765      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 2},
1766      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 3},
1767      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 4},
1768      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 5},
1769      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 6},
1770      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 7},
1771      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 8},
1772      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 9},
1773      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 10},
1774      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 11},
1775      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 12},
1776      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 13},
1777      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 14},
1778      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 15},
1779      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 16},
1780      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 17},
1781      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 18},
1782      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 19},
1783      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 20},
1784      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 21},
1785      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 22},
1786      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 23},
1787      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 24},
1788      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 25},
1789      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 26},
1790      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 27},
1791      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 28},
1792      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 29},
1793      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 30},
1794      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 31},
1795      {NoFlag, 0xabababab, 0xabababab, 0xfffffffe, 32},
1796      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 0},
1797      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 1},
1798      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 2},
1799      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 3},
1800      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 4},
1801      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 5},
1802      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 6},
1803      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 7},
1804      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 8},
1805      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 9},
1806      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 10},
1807      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 11},
1808      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 12},
1809      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 13},
1810      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 14},
1811      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 15},
1812      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 16},
1813      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 17},
1814      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 18},
1815      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 19},
1816      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 20},
1817      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 21},
1818      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 22},
1819      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 23},
1820      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 24},
1821      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 25},
1822      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 26},
1823      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 27},
1824      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 28},
1825      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 29},
1826      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 30},
1827      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 31},
1828      {NoFlag, 0xabababab, 0xabababab, 0xffffffff, 32}};
1829 
1830 
1831 // A loop will be generated for each element of this array.
1832 const TestLoopData kTests[] = {{{eq, r0, r0, r0, LSL, r0},
1833                                 "eq r0 r0 r0 LSL r0",
1834                                 "Condition_eq_r0_r0_r0_LSL_r0",
1835                                 ARRAY_SIZE(kCondition),
1836                                 kCondition},
1837                                {{ne, r0, r0, r0, LSL, r0},
1838                                 "ne r0 r0 r0 LSL r0",
1839                                 "Condition_ne_r0_r0_r0_LSL_r0",
1840                                 ARRAY_SIZE(kCondition),
1841                                 kCondition},
1842                                {{cs, r0, r0, r0, LSL, r0},
1843                                 "cs r0 r0 r0 LSL r0",
1844                                 "Condition_cs_r0_r0_r0_LSL_r0",
1845                                 ARRAY_SIZE(kCondition),
1846                                 kCondition},
1847                                {{cc, r0, r0, r0, LSL, r0},
1848                                 "cc r0 r0 r0 LSL r0",
1849                                 "Condition_cc_r0_r0_r0_LSL_r0",
1850                                 ARRAY_SIZE(kCondition),
1851                                 kCondition},
1852                                {{mi, r0, r0, r0, LSL, r0},
1853                                 "mi r0 r0 r0 LSL r0",
1854                                 "Condition_mi_r0_r0_r0_LSL_r0",
1855                                 ARRAY_SIZE(kCondition),
1856                                 kCondition},
1857                                {{pl, r0, r0, r0, LSL, r0},
1858                                 "pl r0 r0 r0 LSL r0",
1859                                 "Condition_pl_r0_r0_r0_LSL_r0",
1860                                 ARRAY_SIZE(kCondition),
1861                                 kCondition},
1862                                {{vs, r0, r0, r0, LSL, r0},
1863                                 "vs r0 r0 r0 LSL r0",
1864                                 "Condition_vs_r0_r0_r0_LSL_r0",
1865                                 ARRAY_SIZE(kCondition),
1866                                 kCondition},
1867                                {{vc, r0, r0, r0, LSL, r0},
1868                                 "vc r0 r0 r0 LSL r0",
1869                                 "Condition_vc_r0_r0_r0_LSL_r0",
1870                                 ARRAY_SIZE(kCondition),
1871                                 kCondition},
1872                                {{hi, r0, r0, r0, LSL, r0},
1873                                 "hi r0 r0 r0 LSL r0",
1874                                 "Condition_hi_r0_r0_r0_LSL_r0",
1875                                 ARRAY_SIZE(kCondition),
1876                                 kCondition},
1877                                {{ls, r0, r0, r0, LSL, r0},
1878                                 "ls r0 r0 r0 LSL r0",
1879                                 "Condition_ls_r0_r0_r0_LSL_r0",
1880                                 ARRAY_SIZE(kCondition),
1881                                 kCondition},
1882                                {{ge, r0, r0, r0, LSL, r0},
1883                                 "ge r0 r0 r0 LSL r0",
1884                                 "Condition_ge_r0_r0_r0_LSL_r0",
1885                                 ARRAY_SIZE(kCondition),
1886                                 kCondition},
1887                                {{lt, r0, r0, r0, LSL, r0},
1888                                 "lt r0 r0 r0 LSL r0",
1889                                 "Condition_lt_r0_r0_r0_LSL_r0",
1890                                 ARRAY_SIZE(kCondition),
1891                                 kCondition},
1892                                {{gt, r0, r0, r0, LSL, r0},
1893                                 "gt r0 r0 r0 LSL r0",
1894                                 "Condition_gt_r0_r0_r0_LSL_r0",
1895                                 ARRAY_SIZE(kCondition),
1896                                 kCondition},
1897                                {{le, r0, r0, r0, LSL, r0},
1898                                 "le r0 r0 r0 LSL r0",
1899                                 "Condition_le_r0_r0_r0_LSL_r0",
1900                                 ARRAY_SIZE(kCondition),
1901                                 kCondition},
1902                                {{al, r0, r0, r0, LSL, r0},
1903                                 "al r0 r0 r0 LSL r0",
1904                                 "Condition_al_r0_r0_r0_LSL_r0",
1905                                 ARRAY_SIZE(kCondition),
1906                                 kCondition},
1907                                {{al, r3, r3, r4, LSL, r0},
1908                                 "al r3 r3 r4 LSL r0",
1909                                 "RdIsRn_al_r3_r3_r4_LSL_r0",
1910                                 ARRAY_SIZE(kRdIsRn),
1911                                 kRdIsRn},
1912                                {{al, r2, r2, r12, LSL, r0},
1913                                 "al r2 r2 r12 LSL r0",
1914                                 "RdIsRn_al_r2_r2_r12_LSL_r0",
1915                                 ARRAY_SIZE(kRdIsRn),
1916                                 kRdIsRn},
1917                                {{al, r8, r8, r5, LSL, r0},
1918                                 "al r8 r8 r5 LSL r0",
1919                                 "RdIsRn_al_r8_r8_r5_LSL_r0",
1920                                 ARRAY_SIZE(kRdIsRn),
1921                                 kRdIsRn},
1922                                {{al, r14, r14, r0, LSL, r0},
1923                                 "al r14 r14 r0 LSL r0",
1924                                 "RdIsRn_al_r14_r14_r0_LSL_r0",
1925                                 ARRAY_SIZE(kRdIsRn),
1926                                 kRdIsRn},
1927                                {{al, r11, r11, r10, LSL, r0},
1928                                 "al r11 r11 r10 LSL r0",
1929                                 "RdIsRn_al_r11_r11_r10_LSL_r0",
1930                                 ARRAY_SIZE(kRdIsRn),
1931                                 kRdIsRn},
1932                                {{al, r12, r12, r10, LSL, r0},
1933                                 "al r12 r12 r10 LSL r0",
1934                                 "RdIsRn_al_r12_r12_r10_LSL_r0",
1935                                 ARRAY_SIZE(kRdIsRn),
1936                                 kRdIsRn},
1937                                {{al, r4, r4, r8, LSL, r0},
1938                                 "al r4 r4 r8 LSL r0",
1939                                 "RdIsRn_al_r4_r4_r8_LSL_r0",
1940                                 ARRAY_SIZE(kRdIsRn),
1941                                 kRdIsRn},
1942                                {{al, r5, r5, r14, LSL, r0},
1943                                 "al r5 r5 r14 LSL r0",
1944                                 "RdIsRn_al_r5_r5_r14_LSL_r0",
1945                                 ARRAY_SIZE(kRdIsRn),
1946                                 kRdIsRn},
1947                                {{al, r0, r0, r6, LSL, r0},
1948                                 "al r0 r0 r6 LSL r0",
1949                                 "RdIsRn_al_r0_r0_r6_LSL_r0",
1950                                 ARRAY_SIZE(kRdIsRn),
1951                                 kRdIsRn},
1952                                {{al, r12, r12, r1, LSL, r0},
1953                                 "al r12 r12 r1 LSL r0",
1954                                 "RdIsRn_al_r12_r12_r1_LSL_r0",
1955                                 ARRAY_SIZE(kRdIsRn),
1956                                 kRdIsRn},
1957                                {{al, r6, r11, r6, LSL, r0},
1958                                 "al r6 r11 r6 LSL r0",
1959                                 "RdIsRm_al_r6_r11_r6_LSL_r0",
1960                                 ARRAY_SIZE(kRdIsRm),
1961                                 kRdIsRm},
1962                                {{al, r11, r9, r11, LSL, r0},
1963                                 "al r11 r9 r11 LSL r0",
1964                                 "RdIsRm_al_r11_r9_r11_LSL_r0",
1965                                 ARRAY_SIZE(kRdIsRm),
1966                                 kRdIsRm},
1967                                {{al, r0, r8, r0, LSL, r0},
1968                                 "al r0 r8 r0 LSL r0",
1969                                 "RdIsRm_al_r0_r8_r0_LSL_r0",
1970                                 ARRAY_SIZE(kRdIsRm),
1971                                 kRdIsRm},
1972                                {{al, r2, r11, r2, LSL, r0},
1973                                 "al r2 r11 r2 LSL r0",
1974                                 "RdIsRm_al_r2_r11_r2_LSL_r0",
1975                                 ARRAY_SIZE(kRdIsRm),
1976                                 kRdIsRm},
1977                                {{al, r9, r4, r9, LSL, r0},
1978                                 "al r9 r4 r9 LSL r0",
1979                                 "RdIsRm_al_r9_r4_r9_LSL_r0",
1980                                 ARRAY_SIZE(kRdIsRm),
1981                                 kRdIsRm},
1982                                {{al, r14, r10, r14, LSL, r0},
1983                                 "al r14 r10 r14 LSL r0",
1984                                 "RdIsRm_al_r14_r10_r14_LSL_r0",
1985                                 ARRAY_SIZE(kRdIsRm),
1986                                 kRdIsRm},
1987                                {{al, r7, r0, r7, LSL, r0},
1988                                 "al r7 r0 r7 LSL r0",
1989                                 "RdIsRm_al_r7_r0_r7_LSL_r0",
1990                                 ARRAY_SIZE(kRdIsRm),
1991                                 kRdIsRm},
1992                                {{al, r4, r9, r4, LSL, r0},
1993                                 "al r4 r9 r4 LSL r0",
1994                                 "RdIsRm_al_r4_r9_r4_LSL_r0",
1995                                 ARRAY_SIZE(kRdIsRm),
1996                                 kRdIsRm},
1997                                {{al, r6, r10, r6, LSL, r0},
1998                                 "al r6 r10 r6 LSL r0",
1999                                 "RdIsRm_al_r6_r10_r6_LSL_r0",
2000                                 ARRAY_SIZE(kRdIsRm),
2001                                 kRdIsRm},
2002                                {{al, r7, r6, r7, LSL, r0},
2003                                 "al r7 r6 r7 LSL r0",
2004                                 "RdIsRm_al_r7_r6_r7_LSL_r0",
2005                                 ARRAY_SIZE(kRdIsRm),
2006                                 kRdIsRm},
2007                                {{al, r3, r9, r10, LSL, r0},
2008                                 "al r3 r9 r10 LSL r0",
2009                                 "RdIsNotRnIsNotRm_al_r3_r9_r10_LSL_r0",
2010                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2011                                 kRdIsNotRnIsNotRm},
2012                                {{al, r7, r12, r5, LSL, r0},
2013                                 "al r7 r12 r5 LSL r0",
2014                                 "RdIsNotRnIsNotRm_al_r7_r12_r5_LSL_r0",
2015                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2016                                 kRdIsNotRnIsNotRm},
2017                                {{al, r8, r5, r6, LSL, r0},
2018                                 "al r8 r5 r6 LSL r0",
2019                                 "RdIsNotRnIsNotRm_al_r8_r5_r6_LSL_r0",
2020                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2021                                 kRdIsNotRnIsNotRm},
2022                                {{al, r0, r6, r0, LSL, r0},
2023                                 "al r0 r6 r0 LSL r0",
2024                                 "RdIsNotRnIsNotRm_al_r0_r6_r0_LSL_r0",
2025                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2026                                 kRdIsNotRnIsNotRm},
2027                                {{al, r11, r7, r8, LSL, r0},
2028                                 "al r11 r7 r8 LSL r0",
2029                                 "RdIsNotRnIsNotRm_al_r11_r7_r8_LSL_r0",
2030                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2031                                 kRdIsNotRnIsNotRm},
2032                                {{al, r12, r2, r3, LSL, r0},
2033                                 "al r12 r2 r3 LSL r0",
2034                                 "RdIsNotRnIsNotRm_al_r12_r2_r3_LSL_r0",
2035                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2036                                 kRdIsNotRnIsNotRm},
2037                                {{al, r7, r4, r10, LSL, r0},
2038                                 "al r7 r4 r10 LSL r0",
2039                                 "RdIsNotRnIsNotRm_al_r7_r4_r10_LSL_r0",
2040                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2041                                 kRdIsNotRnIsNotRm},
2042                                {{al, r9, r6, r1, LSL, r0},
2043                                 "al r9 r6 r1 LSL r0",
2044                                 "RdIsNotRnIsNotRm_al_r9_r6_r1_LSL_r0",
2045                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2046                                 kRdIsNotRnIsNotRm},
2047                                {{al, r10, r14, r3, LSL, r0},
2048                                 "al r10 r14 r3 LSL r0",
2049                                 "RdIsNotRnIsNotRm_al_r10_r14_r3_LSL_r0",
2050                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2051                                 kRdIsNotRnIsNotRm},
2052                                {{al, r14, r3, r6, LSL, r0},
2053                                 "al r14 r3 r6 LSL r0",
2054                                 "RdIsNotRnIsNotRm_al_r14_r3_r6_LSL_r0",
2055                                 ARRAY_SIZE(kRdIsNotRnIsNotRm),
2056                                 kRdIsNotRnIsNotRm},
2057                                {{al, r0, r0, r1, LSL, r2},
2058                                 "al r0 r0 r1 LSL r2",
2059                                 "ShiftTypes_al_r0_r0_r1_LSL_r2",
2060                                 ARRAY_SIZE(kShiftTypes),
2061                                 kShiftTypes},
2062                                {{al, r0, r0, r1, LSR, r2},
2063                                 "al r0 r0 r1 LSR r2",
2064                                 "ShiftTypes_al_r0_r0_r1_LSR_r2",
2065                                 ARRAY_SIZE(kShiftTypes),
2066                                 kShiftTypes},
2067                                {{al, r0, r0, r1, ASR, r2},
2068                                 "al r0 r0 r1 ASR r2",
2069                                 "ShiftTypes_al_r0_r0_r1_ASR_r2",
2070                                 ARRAY_SIZE(kShiftTypes),
2071                                 kShiftTypes},
2072                                {{al, r0, r0, r1, ROR, r2},
2073                                 "al r0 r0 r1 ROR r2",
2074                                 "ShiftTypes_al_r0_r0_r1_ROR_r2",
2075                                 ARRAY_SIZE(kShiftTypes),
2076                                 kShiftTypes}};
2077 
2078 // We record all inputs to the instructions as outputs. This way, we also check
2079 // that what shouldn't change didn't change.
2080 struct TestResult {
2081   size_t output_size;
2082   const Inputs* outputs;
2083 };
2084 
2085 // These headers each contain an array of `TestResult` with the reference output
2086 // values. The reference arrays are names `kReference{mnemonic}`.
2087 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-adc-a32.h"
2088 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-adcs-a32.h"
2089 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-add-a32.h"
2090 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-adds-a32.h"
2091 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-and-a32.h"
2092 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-ands-a32.h"
2093 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-bic-a32.h"
2094 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-bics-a32.h"
2095 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-eor-a32.h"
2096 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-eors-a32.h"
2097 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-orr-a32.h"
2098 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-orrs-a32.h"
2099 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-rsb-a32.h"
2100 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-rsbs-a32.h"
2101 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-rsc-a32.h"
2102 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-rscs-a32.h"
2103 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-sbc-a32.h"
2104 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-sbcs-a32.h"
2105 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-sub-a32.h"
2106 #include "aarch32/traces/simulator-cond-rd-rn-operand-rm-shift-rs-subs-a32.h"
2107 
2108 
2109 // The maximum number of errors to report in detail for each test.
2110 const unsigned kErrorReportLimit = 8;
2111 
2112 typedef void (MacroAssembler::*Fn)(Condition cond,
2113                                    Register rd,
2114                                    Register rn,
2115                                    const Operand& op);
2116 
TestHelper(Fn instruction,const char * mnemonic,const TestResult reference[])2117 void TestHelper(Fn instruction,
2118                 const char* mnemonic,
2119                 const TestResult reference[]) {
2120   SETUP();
2121   masm.UseA32();
2122   START();
2123 
2124   // Data to compare to `reference`.
2125   TestResult* results[ARRAY_SIZE(kTests)];
2126 
2127   // Test cases for memory bound instructions may allocate a buffer and save its
2128   // address in this array.
2129   byte* scratch_memory_buffers[ARRAY_SIZE(kTests)];
2130 
2131   // Generate a loop for each element in `kTests`. Each loop tests one specific
2132   // instruction.
2133   for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
2134     // Allocate results on the heap for this test.
2135     results[i] = new TestResult;
2136     results[i]->outputs = new Inputs[kTests[i].input_size];
2137     results[i]->output_size = kTests[i].input_size;
2138 
2139     size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size;
2140     VIXL_ASSERT(IsUint32(input_stride));
2141 
2142     scratch_memory_buffers[i] = NULL;
2143 
2144     Label loop;
2145     UseScratchRegisterScope scratch_registers(&masm);
2146     // Include all registers from r0 ro r12.
2147     scratch_registers.Include(RegisterList(0x1fff));
2148 
2149     // Values to pass to the macro-assembler.
2150     Condition cond = kTests[i].operands.cond;
2151     Register rd = kTests[i].operands.rd;
2152     Register rn = kTests[i].operands.rn;
2153     Register rm = kTests[i].operands.rm;
2154     ShiftType shift = kTests[i].operands.shift;
2155     Register rs = kTests[i].operands.rs;
2156     Operand op(rm, shift, rs);
2157     scratch_registers.Exclude(rd);
2158     scratch_registers.Exclude(rn);
2159     scratch_registers.Exclude(rm);
2160     scratch_registers.Exclude(rs);
2161 
2162     // Allocate reserved registers for our own use.
2163     Register input_ptr = scratch_registers.Acquire();
2164     Register input_end = scratch_registers.Acquire();
2165     Register result_ptr = scratch_registers.Acquire();
2166 
2167     // Initialize `input_ptr` to the first element and `input_end` the address
2168     // after the array.
2169     __ Mov(input_ptr, Operand::From(kTests[i].inputs));
2170     __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride));
2171     __ Mov(result_ptr, Operand::From(results[i]->outputs));
2172     __ Bind(&loop);
2173 
2174     {
2175       UseScratchRegisterScope temp_registers(&masm);
2176       Register nzcv_bits = temp_registers.Acquire();
2177       Register saved_q_bit = temp_registers.Acquire();
2178       // Save the `Q` bit flag.
2179       __ Mrs(saved_q_bit, APSR);
2180       __ And(saved_q_bit, saved_q_bit, QFlag);
2181       // Set the `NZCV` and `Q` flags together.
2182       __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr)));
2183       __ Orr(nzcv_bits, nzcv_bits, saved_q_bit);
2184       __ Msr(APSR_nzcvq, nzcv_bits);
2185     }
2186     __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd)));
2187     __ Ldr(rn, MemOperand(input_ptr, offsetof(Inputs, rn)));
2188     __ Ldr(rm, MemOperand(input_ptr, offsetof(Inputs, rm)));
2189     __ Ldr(rs, MemOperand(input_ptr, offsetof(Inputs, rs)));
2190 
2191     (masm.*instruction)(cond, rd, rn, op);
2192 
2193     {
2194       UseScratchRegisterScope temp_registers(&masm);
2195       Register nzcv_bits = temp_registers.Acquire();
2196       __ Mrs(nzcv_bits, APSR);
2197       // Only record the NZCV bits.
2198       __ And(nzcv_bits, nzcv_bits, NZCVFlag);
2199       __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr)));
2200     }
2201     __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd)));
2202     __ Str(rn, MemOperand(result_ptr, offsetof(Inputs, rn)));
2203     __ Str(rm, MemOperand(result_ptr, offsetof(Inputs, rm)));
2204     __ Str(rs, MemOperand(result_ptr, offsetof(Inputs, rs)));
2205 
2206     // Advance the result pointer.
2207     __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
2208     // Loop back until `input_ptr` is lower than `input_base`.
2209     __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
2210     __ Cmp(input_ptr, input_end);
2211     __ B(ne, &loop);
2212   }
2213 
2214   END();
2215 
2216   RUN();
2217 
2218   if (Test::generate_test_trace()) {
2219     // Print the results.
2220     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
2221       printf("const Inputs kOutputs_%s_%s[] = {\n",
2222              mnemonic,
2223              kTests[i].identifier);
2224       for (size_t j = 0; j < results[i]->output_size; j++) {
2225         printf("  { ");
2226         printf("0x%08" PRIx32, results[i]->outputs[j].apsr);
2227         printf(", ");
2228         printf("0x%08" PRIx32, results[i]->outputs[j].rd);
2229         printf(", ");
2230         printf("0x%08" PRIx32, results[i]->outputs[j].rn);
2231         printf(", ");
2232         printf("0x%08" PRIx32, results[i]->outputs[j].rm);
2233         printf(", ");
2234         printf("0x%08" PRIx32, results[i]->outputs[j].rs);
2235         printf(" },\n");
2236       }
2237       printf("};\n");
2238     }
2239     printf("const TestResult kReference%s[] = {\n", mnemonic);
2240     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
2241       printf("  {\n");
2242       printf("    ARRAY_SIZE(kOutputs_%s_%s),\n",
2243              mnemonic,
2244              kTests[i].identifier);
2245       printf("    kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier);
2246       printf("  },\n");
2247     }
2248     printf("};\n");
2249   } else if (kCheckSimulatorTestResults) {
2250     // Check the results.
2251     unsigned total_error_count = 0;
2252     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
2253       bool instruction_has_errors = false;
2254       for (size_t j = 0; j < kTests[i].input_size; j++) {
2255         uint32_t apsr = results[i]->outputs[j].apsr;
2256         uint32_t rd = results[i]->outputs[j].rd;
2257         uint32_t rn = results[i]->outputs[j].rn;
2258         uint32_t rm = results[i]->outputs[j].rm;
2259         uint32_t rs = results[i]->outputs[j].rs;
2260         uint32_t apsr_input = kTests[i].inputs[j].apsr;
2261         uint32_t rd_input = kTests[i].inputs[j].rd;
2262         uint32_t rn_input = kTests[i].inputs[j].rn;
2263         uint32_t rm_input = kTests[i].inputs[j].rm;
2264         uint32_t rs_input = kTests[i].inputs[j].rs;
2265         uint32_t apsr_ref = reference[i].outputs[j].apsr;
2266         uint32_t rd_ref = reference[i].outputs[j].rd;
2267         uint32_t rn_ref = reference[i].outputs[j].rn;
2268         uint32_t rm_ref = reference[i].outputs[j].rm;
2269         uint32_t rs_ref = reference[i].outputs[j].rs;
2270 
2271         if (((apsr != apsr_ref) || (rd != rd_ref) || (rn != rn_ref) ||
2272              (rm != rm_ref) || (rs != rs_ref)) &&
2273             (++total_error_count <= kErrorReportLimit)) {
2274           // Print the instruction once even if it triggered multiple failures.
2275           if (!instruction_has_errors) {
2276             printf("Error(s) when testing \"%s %s\":\n",
2277                    mnemonic,
2278                    kTests[i].operands_description);
2279             instruction_has_errors = true;
2280           }
2281           // Print subsequent errors.
2282           printf("  Input:    ");
2283           printf("0x%08" PRIx32, apsr_input);
2284           printf(", ");
2285           printf("0x%08" PRIx32, rd_input);
2286           printf(", ");
2287           printf("0x%08" PRIx32, rn_input);
2288           printf(", ");
2289           printf("0x%08" PRIx32, rm_input);
2290           printf(", ");
2291           printf("0x%08" PRIx32, rs_input);
2292           printf("\n");
2293           printf("  Expected: ");
2294           printf("0x%08" PRIx32, apsr_ref);
2295           printf(", ");
2296           printf("0x%08" PRIx32, rd_ref);
2297           printf(", ");
2298           printf("0x%08" PRIx32, rn_ref);
2299           printf(", ");
2300           printf("0x%08" PRIx32, rm_ref);
2301           printf(", ");
2302           printf("0x%08" PRIx32, rs_ref);
2303           printf("\n");
2304           printf("  Found:    ");
2305           printf("0x%08" PRIx32, apsr);
2306           printf(", ");
2307           printf("0x%08" PRIx32, rd);
2308           printf(", ");
2309           printf("0x%08" PRIx32, rn);
2310           printf(", ");
2311           printf("0x%08" PRIx32, rm);
2312           printf(", ");
2313           printf("0x%08" PRIx32, rs);
2314           printf("\n\n");
2315         }
2316       }
2317     }
2318 
2319     if (total_error_count > kErrorReportLimit) {
2320       printf("%u other errors follow.\n",
2321              total_error_count - kErrorReportLimit);
2322     }
2323     VIXL_CHECK(total_error_count == 0);
2324   } else {
2325     VIXL_WARNING("Assembled the code, but did not run anything.\n");
2326   }
2327 
2328   for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
2329     delete[] results[i]->outputs;
2330     delete results[i];
2331     delete[] scratch_memory_buffers[i];
2332   }
2333 }
2334 
2335 // Instantiate tests for each instruction in the list.
2336 // TODO: Remove this limitation by having a sandboxing mechanism.
2337 #if defined(VIXL_HOST_POINTER_32)
2338 #define TEST(mnemonic)                                                      \
2339   void Test_##mnemonic() {                                                  \
2340     TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \
2341   }                                                                         \
2342   Test test_##mnemonic(                                                     \
2343       "AARCH32_SIMULATOR_COND_RD_RN_OPERAND_RM_SHIFT_RS_" #mnemonic "_A32", \
2344       &Test_##mnemonic);
2345 #else
2346 #define TEST(mnemonic)                                                      \
2347   void Test_##mnemonic() {                                                  \
2348     VIXL_WARNING("This test can only run on a 32-bit host.\n");             \
2349     USE(TestHelper);                                                        \
2350   }                                                                         \
2351   Test test_##mnemonic(                                                     \
2352       "AARCH32_SIMULATOR_COND_RD_RN_OPERAND_RM_SHIFT_RS_" #mnemonic "_A32", \
2353       &Test_##mnemonic);
2354 #endif
2355 
2356 FOREACH_INSTRUCTION(TEST)
2357 #undef TEST
2358 
2359 }  // namespace
2360 #endif
2361 
2362 }  // namespace aarch32
2363 }  // namespace vixl
2364