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/macro-assembler-aarch32.h"
44#include "aarch32/disasm-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#define TEARDOWN()
64
65#else  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32.
66
67#define SETUP()                                   \
68  MacroAssembler masm(BUF_SIZE);                  \
69  UseScratchRegisterScope harness_scratch(&masm); \
70  harness_scratch.ExcludeAll();
71
72#define START()              \
73  masm.GetBuffer()->Reset(); \
74  __ Push(r4);               \
75  __ Push(r5);               \
76  __ Push(r6);               \
77  __ Push(r7);               \
78  __ Push(r8);               \
79  __ Push(r9);               \
80  __ Push(r10);              \
81  __ Push(r11);              \
82  __ Push(lr);               \
83  harness_scratch.Include(ip);
84
85#define END()                  \
86  harness_scratch.Exclude(ip); \
87  __ Pop(lr);                  \
88  __ Pop(r11);                 \
89  __ Pop(r10);                 \
90  __ Pop(r9);                  \
91  __ Pop(r8);                  \
92  __ Pop(r7);                  \
93  __ Pop(r6);                  \
94  __ Pop(r5);                  \
95  __ Pop(r4);                  \
96  __ Bx(lr);                   \
97  __ FinalizeCode();
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#define TEARDOWN() harness_scratch.Close();
110
111#endif  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
112
113namespace vixl {
114namespace aarch32 {
115
116// List of instruction encodings:
117#define FOREACH_INSTRUCTION(M) \
118  M(Adc)                       \
119  M(Adcs)                      \
120  M(Add)                       \
121  M(Adds)                      \
122  M(And)                       \
123  M(Ands)                      \
124  M(Bic)                       \
125  M(Bics)                      \
126  M(Eor)                       \
127  M(Eors)                      \
128  M(Orr)                       \
129  M(Orrs)                      \
130  M(Rsb)                       \
131  M(Rsbs)                      \
132  M(Rsc)                       \
133  M(Rscs)                      \
134  M(Sbc)                       \
135  M(Sbcs)                      \
136  M(Sub)                       \
137  M(Subs)
138
139
140// The following definitions are defined again in each generated test, therefore
141// we need to place them in an anomymous namespace. It expresses that they are
142// local to this file only, and the compiler is not allowed to share these types
143// across test files during template instantiation. Specifically, `Operands` and
144// `Inputs` have various layouts across generated tests so they absolutely
145// cannot be shared.
146
147#ifdef VIXL_INCLUDE_TARGET_A32
148namespace {
149
150// Values to be passed to the assembler to produce the instruction under test.
151struct Operands {
152  Condition cond;
153  Register rd;
154  Register rn;
155  uint32_t immediate;
156};
157
158// Input data to feed to the instruction.
159struct Inputs {
160  uint32_t apsr;
161  uint32_t rd;
162  uint32_t rn;
163};
164
165// This structure contains all input data needed to test one specific encoding.
166// It used to generate a loop over an instruction.
167struct TestLoopData {
168  // The `operands` fields represents the values to pass to the assembler to
169  // produce the instruction.
170  Operands operands;
171  // Description of the operands, used for error reporting.
172  const char* operands_description;
173  // Unique identifier, used for generating traces.
174  const char* identifier;
175  // Array of values to be fed to the instruction.
176  size_t input_size;
177  const Inputs* inputs;
178};
179
180static const Inputs kCondition[] = {{NFlag, 0xabababab, 0xabababab},
181                                    {ZFlag, 0xabababab, 0xabababab},
182                                    {CFlag, 0xabababab, 0xabababab},
183                                    {VFlag, 0xabababab, 0xabababab},
184                                    {NZFlag, 0xabababab, 0xabababab},
185                                    {NCFlag, 0xabababab, 0xabababab},
186                                    {NVFlag, 0xabababab, 0xabababab},
187                                    {ZCFlag, 0xabababab, 0xabababab},
188                                    {ZVFlag, 0xabababab, 0xabababab},
189                                    {CVFlag, 0xabababab, 0xabababab},
190                                    {NZCFlag, 0xabababab, 0xabababab},
191                                    {NZVFlag, 0xabababab, 0xabababab},
192                                    {NCVFlag, 0xabababab, 0xabababab},
193                                    {ZCVFlag, 0xabababab, 0xabababab},
194                                    {NZCVFlag, 0xabababab, 0xabababab}};
195
196static const Inputs kRdIsRn[] = {{NoFlag, 0x00000000, 0x00000000},
197                                 {NoFlag, 0x00000001, 0x00000001},
198                                 {NoFlag, 0x00000002, 0x00000002},
199                                 {NoFlag, 0x00000020, 0x00000020},
200                                 {NoFlag, 0x0000007d, 0x0000007d},
201                                 {NoFlag, 0x0000007e, 0x0000007e},
202                                 {NoFlag, 0x0000007f, 0x0000007f},
203                                 {NoFlag, 0x00007ffd, 0x00007ffd},
204                                 {NoFlag, 0x00007ffe, 0x00007ffe},
205                                 {NoFlag, 0x00007fff, 0x00007fff},
206                                 {NoFlag, 0x33333333, 0x33333333},
207                                 {NoFlag, 0x55555555, 0x55555555},
208                                 {NoFlag, 0x7ffffffd, 0x7ffffffd},
209                                 {NoFlag, 0x7ffffffe, 0x7ffffffe},
210                                 {NoFlag, 0x7fffffff, 0x7fffffff},
211                                 {NoFlag, 0x80000000, 0x80000000},
212                                 {NoFlag, 0x80000001, 0x80000001},
213                                 {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa},
214                                 {NoFlag, 0xcccccccc, 0xcccccccc},
215                                 {NoFlag, 0xffff8000, 0xffff8000},
216                                 {NoFlag, 0xffff8001, 0xffff8001},
217                                 {NoFlag, 0xffff8002, 0xffff8002},
218                                 {NoFlag, 0xffff8003, 0xffff8003},
219                                 {NoFlag, 0xffffff80, 0xffffff80},
220                                 {NoFlag, 0xffffff81, 0xffffff81},
221                                 {NoFlag, 0xffffff82, 0xffffff82},
222                                 {NoFlag, 0xffffff83, 0xffffff83},
223                                 {NoFlag, 0xffffffe0, 0xffffffe0},
224                                 {NoFlag, 0xfffffffd, 0xfffffffd},
225                                 {NoFlag, 0xfffffffe, 0xfffffffe},
226                                 {NoFlag, 0xffffffff, 0xffffffff}};
227
228static const Inputs kRdIsNotRn[] = {{NoFlag, 0x00000000, 0x00000000},
229                                    {NoFlag, 0x00000000, 0x00000001},
230                                    {NoFlag, 0x00000000, 0x00000002},
231                                    {NoFlag, 0x00000000, 0x00000020},
232                                    {NoFlag, 0x00000000, 0x0000007d},
233                                    {NoFlag, 0x00000000, 0x0000007e},
234                                    {NoFlag, 0x00000000, 0x0000007f},
235                                    {NoFlag, 0x00000000, 0x00007ffd},
236                                    {NoFlag, 0x00000000, 0x00007ffe},
237                                    {NoFlag, 0x00000000, 0x00007fff},
238                                    {NoFlag, 0x00000000, 0x33333333},
239                                    {NoFlag, 0x00000000, 0x55555555},
240                                    {NoFlag, 0x00000000, 0x7ffffffd},
241                                    {NoFlag, 0x00000000, 0x7ffffffe},
242                                    {NoFlag, 0x00000000, 0x7fffffff},
243                                    {NoFlag, 0x00000000, 0x80000000},
244                                    {NoFlag, 0x00000000, 0x80000001},
245                                    {NoFlag, 0x00000000, 0xaaaaaaaa},
246                                    {NoFlag, 0x00000000, 0xcccccccc},
247                                    {NoFlag, 0x00000000, 0xffff8000},
248                                    {NoFlag, 0x00000000, 0xffff8001},
249                                    {NoFlag, 0x00000000, 0xffff8002},
250                                    {NoFlag, 0x00000000, 0xffff8003},
251                                    {NoFlag, 0x00000000, 0xffffff80},
252                                    {NoFlag, 0x00000000, 0xffffff81},
253                                    {NoFlag, 0x00000000, 0xffffff82},
254                                    {NoFlag, 0x00000000, 0xffffff83},
255                                    {NoFlag, 0x00000000, 0xffffffe0},
256                                    {NoFlag, 0x00000000, 0xfffffffd},
257                                    {NoFlag, 0x00000000, 0xfffffffe},
258                                    {NoFlag, 0x00000000, 0xffffffff},
259                                    {NoFlag, 0x00000001, 0x00000000},
260                                    {NoFlag, 0x00000001, 0x00000001},
261                                    {NoFlag, 0x00000001, 0x00000002},
262                                    {NoFlag, 0x00000001, 0x00000020},
263                                    {NoFlag, 0x00000001, 0x0000007d},
264                                    {NoFlag, 0x00000001, 0x0000007e},
265                                    {NoFlag, 0x00000001, 0x0000007f},
266                                    {NoFlag, 0x00000001, 0x00007ffd},
267                                    {NoFlag, 0x00000001, 0x00007ffe},
268                                    {NoFlag, 0x00000001, 0x00007fff},
269                                    {NoFlag, 0x00000001, 0x33333333},
270                                    {NoFlag, 0x00000001, 0x55555555},
271                                    {NoFlag, 0x00000001, 0x7ffffffd},
272                                    {NoFlag, 0x00000001, 0x7ffffffe},
273                                    {NoFlag, 0x00000001, 0x7fffffff},
274                                    {NoFlag, 0x00000001, 0x80000000},
275                                    {NoFlag, 0x00000001, 0x80000001},
276                                    {NoFlag, 0x00000001, 0xaaaaaaaa},
277                                    {NoFlag, 0x00000001, 0xcccccccc},
278                                    {NoFlag, 0x00000001, 0xffff8000},
279                                    {NoFlag, 0x00000001, 0xffff8001},
280                                    {NoFlag, 0x00000001, 0xffff8002},
281                                    {NoFlag, 0x00000001, 0xffff8003},
282                                    {NoFlag, 0x00000001, 0xffffff80},
283                                    {NoFlag, 0x00000001, 0xffffff81},
284                                    {NoFlag, 0x00000001, 0xffffff82},
285                                    {NoFlag, 0x00000001, 0xffffff83},
286                                    {NoFlag, 0x00000001, 0xffffffe0},
287                                    {NoFlag, 0x00000001, 0xfffffffd},
288                                    {NoFlag, 0x00000001, 0xfffffffe},
289                                    {NoFlag, 0x00000001, 0xffffffff},
290                                    {NoFlag, 0x00000002, 0x00000000},
291                                    {NoFlag, 0x00000002, 0x00000001},
292                                    {NoFlag, 0x00000002, 0x00000002},
293                                    {NoFlag, 0x00000002, 0x00000020},
294                                    {NoFlag, 0x00000002, 0x0000007d},
295                                    {NoFlag, 0x00000002, 0x0000007e},
296                                    {NoFlag, 0x00000002, 0x0000007f},
297                                    {NoFlag, 0x00000002, 0x00007ffd},
298                                    {NoFlag, 0x00000002, 0x00007ffe},
299                                    {NoFlag, 0x00000002, 0x00007fff},
300                                    {NoFlag, 0x00000002, 0x33333333},
301                                    {NoFlag, 0x00000002, 0x55555555},
302                                    {NoFlag, 0x00000002, 0x7ffffffd},
303                                    {NoFlag, 0x00000002, 0x7ffffffe},
304                                    {NoFlag, 0x00000002, 0x7fffffff},
305                                    {NoFlag, 0x00000002, 0x80000000},
306                                    {NoFlag, 0x00000002, 0x80000001},
307                                    {NoFlag, 0x00000002, 0xaaaaaaaa},
308                                    {NoFlag, 0x00000002, 0xcccccccc},
309                                    {NoFlag, 0x00000002, 0xffff8000},
310                                    {NoFlag, 0x00000002, 0xffff8001},
311                                    {NoFlag, 0x00000002, 0xffff8002},
312                                    {NoFlag, 0x00000002, 0xffff8003},
313                                    {NoFlag, 0x00000002, 0xffffff80},
314                                    {NoFlag, 0x00000002, 0xffffff81},
315                                    {NoFlag, 0x00000002, 0xffffff82},
316                                    {NoFlag, 0x00000002, 0xffffff83},
317                                    {NoFlag, 0x00000002, 0xffffffe0},
318                                    {NoFlag, 0x00000002, 0xfffffffd},
319                                    {NoFlag, 0x00000002, 0xfffffffe},
320                                    {NoFlag, 0x00000002, 0xffffffff},
321                                    {NoFlag, 0x00000020, 0x00000000},
322                                    {NoFlag, 0x00000020, 0x00000001},
323                                    {NoFlag, 0x00000020, 0x00000002},
324                                    {NoFlag, 0x00000020, 0x00000020},
325                                    {NoFlag, 0x00000020, 0x0000007d},
326                                    {NoFlag, 0x00000020, 0x0000007e},
327                                    {NoFlag, 0x00000020, 0x0000007f},
328                                    {NoFlag, 0x00000020, 0x00007ffd},
329                                    {NoFlag, 0x00000020, 0x00007ffe},
330                                    {NoFlag, 0x00000020, 0x00007fff},
331                                    {NoFlag, 0x00000020, 0x33333333},
332                                    {NoFlag, 0x00000020, 0x55555555},
333                                    {NoFlag, 0x00000020, 0x7ffffffd},
334                                    {NoFlag, 0x00000020, 0x7ffffffe},
335                                    {NoFlag, 0x00000020, 0x7fffffff},
336                                    {NoFlag, 0x00000020, 0x80000000},
337                                    {NoFlag, 0x00000020, 0x80000001},
338                                    {NoFlag, 0x00000020, 0xaaaaaaaa},
339                                    {NoFlag, 0x00000020, 0xcccccccc},
340                                    {NoFlag, 0x00000020, 0xffff8000},
341                                    {NoFlag, 0x00000020, 0xffff8001},
342                                    {NoFlag, 0x00000020, 0xffff8002},
343                                    {NoFlag, 0x00000020, 0xffff8003},
344                                    {NoFlag, 0x00000020, 0xffffff80},
345                                    {NoFlag, 0x00000020, 0xffffff81},
346                                    {NoFlag, 0x00000020, 0xffffff82},
347                                    {NoFlag, 0x00000020, 0xffffff83},
348                                    {NoFlag, 0x00000020, 0xffffffe0},
349                                    {NoFlag, 0x00000020, 0xfffffffd},
350                                    {NoFlag, 0x00000020, 0xfffffffe},
351                                    {NoFlag, 0x00000020, 0xffffffff},
352                                    {NoFlag, 0x0000007d, 0x00000000},
353                                    {NoFlag, 0x0000007d, 0x00000001},
354                                    {NoFlag, 0x0000007d, 0x00000002},
355                                    {NoFlag, 0x0000007d, 0x00000020},
356                                    {NoFlag, 0x0000007d, 0x0000007d},
357                                    {NoFlag, 0x0000007d, 0x0000007e},
358                                    {NoFlag, 0x0000007d, 0x0000007f},
359                                    {NoFlag, 0x0000007d, 0x00007ffd},
360                                    {NoFlag, 0x0000007d, 0x00007ffe},
361                                    {NoFlag, 0x0000007d, 0x00007fff},
362                                    {NoFlag, 0x0000007d, 0x33333333},
363                                    {NoFlag, 0x0000007d, 0x55555555},
364                                    {NoFlag, 0x0000007d, 0x7ffffffd},
365                                    {NoFlag, 0x0000007d, 0x7ffffffe},
366                                    {NoFlag, 0x0000007d, 0x7fffffff},
367                                    {NoFlag, 0x0000007d, 0x80000000},
368                                    {NoFlag, 0x0000007d, 0x80000001},
369                                    {NoFlag, 0x0000007d, 0xaaaaaaaa},
370                                    {NoFlag, 0x0000007d, 0xcccccccc},
371                                    {NoFlag, 0x0000007d, 0xffff8000},
372                                    {NoFlag, 0x0000007d, 0xffff8001},
373                                    {NoFlag, 0x0000007d, 0xffff8002},
374                                    {NoFlag, 0x0000007d, 0xffff8003},
375                                    {NoFlag, 0x0000007d, 0xffffff80},
376                                    {NoFlag, 0x0000007d, 0xffffff81},
377                                    {NoFlag, 0x0000007d, 0xffffff82},
378                                    {NoFlag, 0x0000007d, 0xffffff83},
379                                    {NoFlag, 0x0000007d, 0xffffffe0},
380                                    {NoFlag, 0x0000007d, 0xfffffffd},
381                                    {NoFlag, 0x0000007d, 0xfffffffe},
382                                    {NoFlag, 0x0000007d, 0xffffffff},
383                                    {NoFlag, 0x0000007e, 0x00000000},
384                                    {NoFlag, 0x0000007e, 0x00000001},
385                                    {NoFlag, 0x0000007e, 0x00000002},
386                                    {NoFlag, 0x0000007e, 0x00000020},
387                                    {NoFlag, 0x0000007e, 0x0000007d},
388                                    {NoFlag, 0x0000007e, 0x0000007e},
389                                    {NoFlag, 0x0000007e, 0x0000007f},
390                                    {NoFlag, 0x0000007e, 0x00007ffd},
391                                    {NoFlag, 0x0000007e, 0x00007ffe},
392                                    {NoFlag, 0x0000007e, 0x00007fff},
393                                    {NoFlag, 0x0000007e, 0x33333333},
394                                    {NoFlag, 0x0000007e, 0x55555555},
395                                    {NoFlag, 0x0000007e, 0x7ffffffd},
396                                    {NoFlag, 0x0000007e, 0x7ffffffe},
397                                    {NoFlag, 0x0000007e, 0x7fffffff},
398                                    {NoFlag, 0x0000007e, 0x80000000},
399                                    {NoFlag, 0x0000007e, 0x80000001},
400                                    {NoFlag, 0x0000007e, 0xaaaaaaaa},
401                                    {NoFlag, 0x0000007e, 0xcccccccc},
402                                    {NoFlag, 0x0000007e, 0xffff8000},
403                                    {NoFlag, 0x0000007e, 0xffff8001},
404                                    {NoFlag, 0x0000007e, 0xffff8002},
405                                    {NoFlag, 0x0000007e, 0xffff8003},
406                                    {NoFlag, 0x0000007e, 0xffffff80},
407                                    {NoFlag, 0x0000007e, 0xffffff81},
408                                    {NoFlag, 0x0000007e, 0xffffff82},
409                                    {NoFlag, 0x0000007e, 0xffffff83},
410                                    {NoFlag, 0x0000007e, 0xffffffe0},
411                                    {NoFlag, 0x0000007e, 0xfffffffd},
412                                    {NoFlag, 0x0000007e, 0xfffffffe},
413                                    {NoFlag, 0x0000007e, 0xffffffff},
414                                    {NoFlag, 0x0000007f, 0x00000000},
415                                    {NoFlag, 0x0000007f, 0x00000001},
416                                    {NoFlag, 0x0000007f, 0x00000002},
417                                    {NoFlag, 0x0000007f, 0x00000020},
418                                    {NoFlag, 0x0000007f, 0x0000007d},
419                                    {NoFlag, 0x0000007f, 0x0000007e},
420                                    {NoFlag, 0x0000007f, 0x0000007f},
421                                    {NoFlag, 0x0000007f, 0x00007ffd},
422                                    {NoFlag, 0x0000007f, 0x00007ffe},
423                                    {NoFlag, 0x0000007f, 0x00007fff},
424                                    {NoFlag, 0x0000007f, 0x33333333},
425                                    {NoFlag, 0x0000007f, 0x55555555},
426                                    {NoFlag, 0x0000007f, 0x7ffffffd},
427                                    {NoFlag, 0x0000007f, 0x7ffffffe},
428                                    {NoFlag, 0x0000007f, 0x7fffffff},
429                                    {NoFlag, 0x0000007f, 0x80000000},
430                                    {NoFlag, 0x0000007f, 0x80000001},
431                                    {NoFlag, 0x0000007f, 0xaaaaaaaa},
432                                    {NoFlag, 0x0000007f, 0xcccccccc},
433                                    {NoFlag, 0x0000007f, 0xffff8000},
434                                    {NoFlag, 0x0000007f, 0xffff8001},
435                                    {NoFlag, 0x0000007f, 0xffff8002},
436                                    {NoFlag, 0x0000007f, 0xffff8003},
437                                    {NoFlag, 0x0000007f, 0xffffff80},
438                                    {NoFlag, 0x0000007f, 0xffffff81},
439                                    {NoFlag, 0x0000007f, 0xffffff82},
440                                    {NoFlag, 0x0000007f, 0xffffff83},
441                                    {NoFlag, 0x0000007f, 0xffffffe0},
442                                    {NoFlag, 0x0000007f, 0xfffffffd},
443                                    {NoFlag, 0x0000007f, 0xfffffffe},
444                                    {NoFlag, 0x0000007f, 0xffffffff},
445                                    {NoFlag, 0x00007ffd, 0x00000000},
446                                    {NoFlag, 0x00007ffd, 0x00000001},
447                                    {NoFlag, 0x00007ffd, 0x00000002},
448                                    {NoFlag, 0x00007ffd, 0x00000020},
449                                    {NoFlag, 0x00007ffd, 0x0000007d},
450                                    {NoFlag, 0x00007ffd, 0x0000007e},
451                                    {NoFlag, 0x00007ffd, 0x0000007f},
452                                    {NoFlag, 0x00007ffd, 0x00007ffd},
453                                    {NoFlag, 0x00007ffd, 0x00007ffe},
454                                    {NoFlag, 0x00007ffd, 0x00007fff},
455                                    {NoFlag, 0x00007ffd, 0x33333333},
456                                    {NoFlag, 0x00007ffd, 0x55555555},
457                                    {NoFlag, 0x00007ffd, 0x7ffffffd},
458                                    {NoFlag, 0x00007ffd, 0x7ffffffe},
459                                    {NoFlag, 0x00007ffd, 0x7fffffff},
460                                    {NoFlag, 0x00007ffd, 0x80000000},
461                                    {NoFlag, 0x00007ffd, 0x80000001},
462                                    {NoFlag, 0x00007ffd, 0xaaaaaaaa},
463                                    {NoFlag, 0x00007ffd, 0xcccccccc},
464                                    {NoFlag, 0x00007ffd, 0xffff8000},
465                                    {NoFlag, 0x00007ffd, 0xffff8001},
466                                    {NoFlag, 0x00007ffd, 0xffff8002},
467                                    {NoFlag, 0x00007ffd, 0xffff8003},
468                                    {NoFlag, 0x00007ffd, 0xffffff80},
469                                    {NoFlag, 0x00007ffd, 0xffffff81},
470                                    {NoFlag, 0x00007ffd, 0xffffff82},
471                                    {NoFlag, 0x00007ffd, 0xffffff83},
472                                    {NoFlag, 0x00007ffd, 0xffffffe0},
473                                    {NoFlag, 0x00007ffd, 0xfffffffd},
474                                    {NoFlag, 0x00007ffd, 0xfffffffe},
475                                    {NoFlag, 0x00007ffd, 0xffffffff},
476                                    {NoFlag, 0x00007ffe, 0x00000000},
477                                    {NoFlag, 0x00007ffe, 0x00000001},
478                                    {NoFlag, 0x00007ffe, 0x00000002},
479                                    {NoFlag, 0x00007ffe, 0x00000020},
480                                    {NoFlag, 0x00007ffe, 0x0000007d},
481                                    {NoFlag, 0x00007ffe, 0x0000007e},
482                                    {NoFlag, 0x00007ffe, 0x0000007f},
483                                    {NoFlag, 0x00007ffe, 0x00007ffd},
484                                    {NoFlag, 0x00007ffe, 0x00007ffe},
485                                    {NoFlag, 0x00007ffe, 0x00007fff},
486                                    {NoFlag, 0x00007ffe, 0x33333333},
487                                    {NoFlag, 0x00007ffe, 0x55555555},
488                                    {NoFlag, 0x00007ffe, 0x7ffffffd},
489                                    {NoFlag, 0x00007ffe, 0x7ffffffe},
490                                    {NoFlag, 0x00007ffe, 0x7fffffff},
491                                    {NoFlag, 0x00007ffe, 0x80000000},
492                                    {NoFlag, 0x00007ffe, 0x80000001},
493                                    {NoFlag, 0x00007ffe, 0xaaaaaaaa},
494                                    {NoFlag, 0x00007ffe, 0xcccccccc},
495                                    {NoFlag, 0x00007ffe, 0xffff8000},
496                                    {NoFlag, 0x00007ffe, 0xffff8001},
497                                    {NoFlag, 0x00007ffe, 0xffff8002},
498                                    {NoFlag, 0x00007ffe, 0xffff8003},
499                                    {NoFlag, 0x00007ffe, 0xffffff80},
500                                    {NoFlag, 0x00007ffe, 0xffffff81},
501                                    {NoFlag, 0x00007ffe, 0xffffff82},
502                                    {NoFlag, 0x00007ffe, 0xffffff83},
503                                    {NoFlag, 0x00007ffe, 0xffffffe0},
504                                    {NoFlag, 0x00007ffe, 0xfffffffd},
505                                    {NoFlag, 0x00007ffe, 0xfffffffe},
506                                    {NoFlag, 0x00007ffe, 0xffffffff},
507                                    {NoFlag, 0x00007fff, 0x00000000},
508                                    {NoFlag, 0x00007fff, 0x00000001},
509                                    {NoFlag, 0x00007fff, 0x00000002},
510                                    {NoFlag, 0x00007fff, 0x00000020},
511                                    {NoFlag, 0x00007fff, 0x0000007d},
512                                    {NoFlag, 0x00007fff, 0x0000007e},
513                                    {NoFlag, 0x00007fff, 0x0000007f},
514                                    {NoFlag, 0x00007fff, 0x00007ffd},
515                                    {NoFlag, 0x00007fff, 0x00007ffe},
516                                    {NoFlag, 0x00007fff, 0x00007fff},
517                                    {NoFlag, 0x00007fff, 0x33333333},
518                                    {NoFlag, 0x00007fff, 0x55555555},
519                                    {NoFlag, 0x00007fff, 0x7ffffffd},
520                                    {NoFlag, 0x00007fff, 0x7ffffffe},
521                                    {NoFlag, 0x00007fff, 0x7fffffff},
522                                    {NoFlag, 0x00007fff, 0x80000000},
523                                    {NoFlag, 0x00007fff, 0x80000001},
524                                    {NoFlag, 0x00007fff, 0xaaaaaaaa},
525                                    {NoFlag, 0x00007fff, 0xcccccccc},
526                                    {NoFlag, 0x00007fff, 0xffff8000},
527                                    {NoFlag, 0x00007fff, 0xffff8001},
528                                    {NoFlag, 0x00007fff, 0xffff8002},
529                                    {NoFlag, 0x00007fff, 0xffff8003},
530                                    {NoFlag, 0x00007fff, 0xffffff80},
531                                    {NoFlag, 0x00007fff, 0xffffff81},
532                                    {NoFlag, 0x00007fff, 0xffffff82},
533                                    {NoFlag, 0x00007fff, 0xffffff83},
534                                    {NoFlag, 0x00007fff, 0xffffffe0},
535                                    {NoFlag, 0x00007fff, 0xfffffffd},
536                                    {NoFlag, 0x00007fff, 0xfffffffe},
537                                    {NoFlag, 0x00007fff, 0xffffffff},
538                                    {NoFlag, 0x33333333, 0x00000000},
539                                    {NoFlag, 0x33333333, 0x00000001},
540                                    {NoFlag, 0x33333333, 0x00000002},
541                                    {NoFlag, 0x33333333, 0x00000020},
542                                    {NoFlag, 0x33333333, 0x0000007d},
543                                    {NoFlag, 0x33333333, 0x0000007e},
544                                    {NoFlag, 0x33333333, 0x0000007f},
545                                    {NoFlag, 0x33333333, 0x00007ffd},
546                                    {NoFlag, 0x33333333, 0x00007ffe},
547                                    {NoFlag, 0x33333333, 0x00007fff},
548                                    {NoFlag, 0x33333333, 0x33333333},
549                                    {NoFlag, 0x33333333, 0x55555555},
550                                    {NoFlag, 0x33333333, 0x7ffffffd},
551                                    {NoFlag, 0x33333333, 0x7ffffffe},
552                                    {NoFlag, 0x33333333, 0x7fffffff},
553                                    {NoFlag, 0x33333333, 0x80000000},
554                                    {NoFlag, 0x33333333, 0x80000001},
555                                    {NoFlag, 0x33333333, 0xaaaaaaaa},
556                                    {NoFlag, 0x33333333, 0xcccccccc},
557                                    {NoFlag, 0x33333333, 0xffff8000},
558                                    {NoFlag, 0x33333333, 0xffff8001},
559                                    {NoFlag, 0x33333333, 0xffff8002},
560                                    {NoFlag, 0x33333333, 0xffff8003},
561                                    {NoFlag, 0x33333333, 0xffffff80},
562                                    {NoFlag, 0x33333333, 0xffffff81},
563                                    {NoFlag, 0x33333333, 0xffffff82},
564                                    {NoFlag, 0x33333333, 0xffffff83},
565                                    {NoFlag, 0x33333333, 0xffffffe0},
566                                    {NoFlag, 0x33333333, 0xfffffffd},
567                                    {NoFlag, 0x33333333, 0xfffffffe},
568                                    {NoFlag, 0x33333333, 0xffffffff},
569                                    {NoFlag, 0x55555555, 0x00000000},
570                                    {NoFlag, 0x55555555, 0x00000001},
571                                    {NoFlag, 0x55555555, 0x00000002},
572                                    {NoFlag, 0x55555555, 0x00000020},
573                                    {NoFlag, 0x55555555, 0x0000007d},
574                                    {NoFlag, 0x55555555, 0x0000007e},
575                                    {NoFlag, 0x55555555, 0x0000007f},
576                                    {NoFlag, 0x55555555, 0x00007ffd},
577                                    {NoFlag, 0x55555555, 0x00007ffe},
578                                    {NoFlag, 0x55555555, 0x00007fff},
579                                    {NoFlag, 0x55555555, 0x33333333},
580                                    {NoFlag, 0x55555555, 0x55555555},
581                                    {NoFlag, 0x55555555, 0x7ffffffd},
582                                    {NoFlag, 0x55555555, 0x7ffffffe},
583                                    {NoFlag, 0x55555555, 0x7fffffff},
584                                    {NoFlag, 0x55555555, 0x80000000},
585                                    {NoFlag, 0x55555555, 0x80000001},
586                                    {NoFlag, 0x55555555, 0xaaaaaaaa},
587                                    {NoFlag, 0x55555555, 0xcccccccc},
588                                    {NoFlag, 0x55555555, 0xffff8000},
589                                    {NoFlag, 0x55555555, 0xffff8001},
590                                    {NoFlag, 0x55555555, 0xffff8002},
591                                    {NoFlag, 0x55555555, 0xffff8003},
592                                    {NoFlag, 0x55555555, 0xffffff80},
593                                    {NoFlag, 0x55555555, 0xffffff81},
594                                    {NoFlag, 0x55555555, 0xffffff82},
595                                    {NoFlag, 0x55555555, 0xffffff83},
596                                    {NoFlag, 0x55555555, 0xffffffe0},
597                                    {NoFlag, 0x55555555, 0xfffffffd},
598                                    {NoFlag, 0x55555555, 0xfffffffe},
599                                    {NoFlag, 0x55555555, 0xffffffff},
600                                    {NoFlag, 0x7ffffffd, 0x00000000},
601                                    {NoFlag, 0x7ffffffd, 0x00000001},
602                                    {NoFlag, 0x7ffffffd, 0x00000002},
603                                    {NoFlag, 0x7ffffffd, 0x00000020},
604                                    {NoFlag, 0x7ffffffd, 0x0000007d},
605                                    {NoFlag, 0x7ffffffd, 0x0000007e},
606                                    {NoFlag, 0x7ffffffd, 0x0000007f},
607                                    {NoFlag, 0x7ffffffd, 0x00007ffd},
608                                    {NoFlag, 0x7ffffffd, 0x00007ffe},
609                                    {NoFlag, 0x7ffffffd, 0x00007fff},
610                                    {NoFlag, 0x7ffffffd, 0x33333333},
611                                    {NoFlag, 0x7ffffffd, 0x55555555},
612                                    {NoFlag, 0x7ffffffd, 0x7ffffffd},
613                                    {NoFlag, 0x7ffffffd, 0x7ffffffe},
614                                    {NoFlag, 0x7ffffffd, 0x7fffffff},
615                                    {NoFlag, 0x7ffffffd, 0x80000000},
616                                    {NoFlag, 0x7ffffffd, 0x80000001},
617                                    {NoFlag, 0x7ffffffd, 0xaaaaaaaa},
618                                    {NoFlag, 0x7ffffffd, 0xcccccccc},
619                                    {NoFlag, 0x7ffffffd, 0xffff8000},
620                                    {NoFlag, 0x7ffffffd, 0xffff8001},
621                                    {NoFlag, 0x7ffffffd, 0xffff8002},
622                                    {NoFlag, 0x7ffffffd, 0xffff8003},
623                                    {NoFlag, 0x7ffffffd, 0xffffff80},
624                                    {NoFlag, 0x7ffffffd, 0xffffff81},
625                                    {NoFlag, 0x7ffffffd, 0xffffff82},
626                                    {NoFlag, 0x7ffffffd, 0xffffff83},
627                                    {NoFlag, 0x7ffffffd, 0xffffffe0},
628                                    {NoFlag, 0x7ffffffd, 0xfffffffd},
629                                    {NoFlag, 0x7ffffffd, 0xfffffffe},
630                                    {NoFlag, 0x7ffffffd, 0xffffffff},
631                                    {NoFlag, 0x7ffffffe, 0x00000000},
632                                    {NoFlag, 0x7ffffffe, 0x00000001},
633                                    {NoFlag, 0x7ffffffe, 0x00000002},
634                                    {NoFlag, 0x7ffffffe, 0x00000020},
635                                    {NoFlag, 0x7ffffffe, 0x0000007d},
636                                    {NoFlag, 0x7ffffffe, 0x0000007e},
637                                    {NoFlag, 0x7ffffffe, 0x0000007f},
638                                    {NoFlag, 0x7ffffffe, 0x00007ffd},
639                                    {NoFlag, 0x7ffffffe, 0x00007ffe},
640                                    {NoFlag, 0x7ffffffe, 0x00007fff},
641                                    {NoFlag, 0x7ffffffe, 0x33333333},
642                                    {NoFlag, 0x7ffffffe, 0x55555555},
643                                    {NoFlag, 0x7ffffffe, 0x7ffffffd},
644                                    {NoFlag, 0x7ffffffe, 0x7ffffffe},
645                                    {NoFlag, 0x7ffffffe, 0x7fffffff},
646                                    {NoFlag, 0x7ffffffe, 0x80000000},
647                                    {NoFlag, 0x7ffffffe, 0x80000001},
648                                    {NoFlag, 0x7ffffffe, 0xaaaaaaaa},
649                                    {NoFlag, 0x7ffffffe, 0xcccccccc},
650                                    {NoFlag, 0x7ffffffe, 0xffff8000},
651                                    {NoFlag, 0x7ffffffe, 0xffff8001},
652                                    {NoFlag, 0x7ffffffe, 0xffff8002},
653                                    {NoFlag, 0x7ffffffe, 0xffff8003},
654                                    {NoFlag, 0x7ffffffe, 0xffffff80},
655                                    {NoFlag, 0x7ffffffe, 0xffffff81},
656                                    {NoFlag, 0x7ffffffe, 0xffffff82},
657                                    {NoFlag, 0x7ffffffe, 0xffffff83},
658                                    {NoFlag, 0x7ffffffe, 0xffffffe0},
659                                    {NoFlag, 0x7ffffffe, 0xfffffffd},
660                                    {NoFlag, 0x7ffffffe, 0xfffffffe},
661                                    {NoFlag, 0x7ffffffe, 0xffffffff},
662                                    {NoFlag, 0x7fffffff, 0x00000000},
663                                    {NoFlag, 0x7fffffff, 0x00000001},
664                                    {NoFlag, 0x7fffffff, 0x00000002},
665                                    {NoFlag, 0x7fffffff, 0x00000020},
666                                    {NoFlag, 0x7fffffff, 0x0000007d},
667                                    {NoFlag, 0x7fffffff, 0x0000007e},
668                                    {NoFlag, 0x7fffffff, 0x0000007f},
669                                    {NoFlag, 0x7fffffff, 0x00007ffd},
670                                    {NoFlag, 0x7fffffff, 0x00007ffe},
671                                    {NoFlag, 0x7fffffff, 0x00007fff},
672                                    {NoFlag, 0x7fffffff, 0x33333333},
673                                    {NoFlag, 0x7fffffff, 0x55555555},
674                                    {NoFlag, 0x7fffffff, 0x7ffffffd},
675                                    {NoFlag, 0x7fffffff, 0x7ffffffe},
676                                    {NoFlag, 0x7fffffff, 0x7fffffff},
677                                    {NoFlag, 0x7fffffff, 0x80000000},
678                                    {NoFlag, 0x7fffffff, 0x80000001},
679                                    {NoFlag, 0x7fffffff, 0xaaaaaaaa},
680                                    {NoFlag, 0x7fffffff, 0xcccccccc},
681                                    {NoFlag, 0x7fffffff, 0xffff8000},
682                                    {NoFlag, 0x7fffffff, 0xffff8001},
683                                    {NoFlag, 0x7fffffff, 0xffff8002},
684                                    {NoFlag, 0x7fffffff, 0xffff8003},
685                                    {NoFlag, 0x7fffffff, 0xffffff80},
686                                    {NoFlag, 0x7fffffff, 0xffffff81},
687                                    {NoFlag, 0x7fffffff, 0xffffff82},
688                                    {NoFlag, 0x7fffffff, 0xffffff83},
689                                    {NoFlag, 0x7fffffff, 0xffffffe0},
690                                    {NoFlag, 0x7fffffff, 0xfffffffd},
691                                    {NoFlag, 0x7fffffff, 0xfffffffe},
692                                    {NoFlag, 0x7fffffff, 0xffffffff},
693                                    {NoFlag, 0x80000000, 0x00000000},
694                                    {NoFlag, 0x80000000, 0x00000001},
695                                    {NoFlag, 0x80000000, 0x00000002},
696                                    {NoFlag, 0x80000000, 0x00000020},
697                                    {NoFlag, 0x80000000, 0x0000007d},
698                                    {NoFlag, 0x80000000, 0x0000007e},
699                                    {NoFlag, 0x80000000, 0x0000007f},
700                                    {NoFlag, 0x80000000, 0x00007ffd},
701                                    {NoFlag, 0x80000000, 0x00007ffe},
702                                    {NoFlag, 0x80000000, 0x00007fff},
703                                    {NoFlag, 0x80000000, 0x33333333},
704                                    {NoFlag, 0x80000000, 0x55555555},
705                                    {NoFlag, 0x80000000, 0x7ffffffd},
706                                    {NoFlag, 0x80000000, 0x7ffffffe},
707                                    {NoFlag, 0x80000000, 0x7fffffff},
708                                    {NoFlag, 0x80000000, 0x80000000},
709                                    {NoFlag, 0x80000000, 0x80000001},
710                                    {NoFlag, 0x80000000, 0xaaaaaaaa},
711                                    {NoFlag, 0x80000000, 0xcccccccc},
712                                    {NoFlag, 0x80000000, 0xffff8000},
713                                    {NoFlag, 0x80000000, 0xffff8001},
714                                    {NoFlag, 0x80000000, 0xffff8002},
715                                    {NoFlag, 0x80000000, 0xffff8003},
716                                    {NoFlag, 0x80000000, 0xffffff80},
717                                    {NoFlag, 0x80000000, 0xffffff81},
718                                    {NoFlag, 0x80000000, 0xffffff82},
719                                    {NoFlag, 0x80000000, 0xffffff83},
720                                    {NoFlag, 0x80000000, 0xffffffe0},
721                                    {NoFlag, 0x80000000, 0xfffffffd},
722                                    {NoFlag, 0x80000000, 0xfffffffe},
723                                    {NoFlag, 0x80000000, 0xffffffff},
724                                    {NoFlag, 0x80000001, 0x00000000},
725                                    {NoFlag, 0x80000001, 0x00000001},
726                                    {NoFlag, 0x80000001, 0x00000002},
727                                    {NoFlag, 0x80000001, 0x00000020},
728                                    {NoFlag, 0x80000001, 0x0000007d},
729                                    {NoFlag, 0x80000001, 0x0000007e},
730                                    {NoFlag, 0x80000001, 0x0000007f},
731                                    {NoFlag, 0x80000001, 0x00007ffd},
732                                    {NoFlag, 0x80000001, 0x00007ffe},
733                                    {NoFlag, 0x80000001, 0x00007fff},
734                                    {NoFlag, 0x80000001, 0x33333333},
735                                    {NoFlag, 0x80000001, 0x55555555},
736                                    {NoFlag, 0x80000001, 0x7ffffffd},
737                                    {NoFlag, 0x80000001, 0x7ffffffe},
738                                    {NoFlag, 0x80000001, 0x7fffffff},
739                                    {NoFlag, 0x80000001, 0x80000000},
740                                    {NoFlag, 0x80000001, 0x80000001},
741                                    {NoFlag, 0x80000001, 0xaaaaaaaa},
742                                    {NoFlag, 0x80000001, 0xcccccccc},
743                                    {NoFlag, 0x80000001, 0xffff8000},
744                                    {NoFlag, 0x80000001, 0xffff8001},
745                                    {NoFlag, 0x80000001, 0xffff8002},
746                                    {NoFlag, 0x80000001, 0xffff8003},
747                                    {NoFlag, 0x80000001, 0xffffff80},
748                                    {NoFlag, 0x80000001, 0xffffff81},
749                                    {NoFlag, 0x80000001, 0xffffff82},
750                                    {NoFlag, 0x80000001, 0xffffff83},
751                                    {NoFlag, 0x80000001, 0xffffffe0},
752                                    {NoFlag, 0x80000001, 0xfffffffd},
753                                    {NoFlag, 0x80000001, 0xfffffffe},
754                                    {NoFlag, 0x80000001, 0xffffffff},
755                                    {NoFlag, 0xaaaaaaaa, 0x00000000},
756                                    {NoFlag, 0xaaaaaaaa, 0x00000001},
757                                    {NoFlag, 0xaaaaaaaa, 0x00000002},
758                                    {NoFlag, 0xaaaaaaaa, 0x00000020},
759                                    {NoFlag, 0xaaaaaaaa, 0x0000007d},
760                                    {NoFlag, 0xaaaaaaaa, 0x0000007e},
761                                    {NoFlag, 0xaaaaaaaa, 0x0000007f},
762                                    {NoFlag, 0xaaaaaaaa, 0x00007ffd},
763                                    {NoFlag, 0xaaaaaaaa, 0x00007ffe},
764                                    {NoFlag, 0xaaaaaaaa, 0x00007fff},
765                                    {NoFlag, 0xaaaaaaaa, 0x33333333},
766                                    {NoFlag, 0xaaaaaaaa, 0x55555555},
767                                    {NoFlag, 0xaaaaaaaa, 0x7ffffffd},
768                                    {NoFlag, 0xaaaaaaaa, 0x7ffffffe},
769                                    {NoFlag, 0xaaaaaaaa, 0x7fffffff},
770                                    {NoFlag, 0xaaaaaaaa, 0x80000000},
771                                    {NoFlag, 0xaaaaaaaa, 0x80000001},
772                                    {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa},
773                                    {NoFlag, 0xaaaaaaaa, 0xcccccccc},
774                                    {NoFlag, 0xaaaaaaaa, 0xffff8000},
775                                    {NoFlag, 0xaaaaaaaa, 0xffff8001},
776                                    {NoFlag, 0xaaaaaaaa, 0xffff8002},
777                                    {NoFlag, 0xaaaaaaaa, 0xffff8003},
778                                    {NoFlag, 0xaaaaaaaa, 0xffffff80},
779                                    {NoFlag, 0xaaaaaaaa, 0xffffff81},
780                                    {NoFlag, 0xaaaaaaaa, 0xffffff82},
781                                    {NoFlag, 0xaaaaaaaa, 0xffffff83},
782                                    {NoFlag, 0xaaaaaaaa, 0xffffffe0},
783                                    {NoFlag, 0xaaaaaaaa, 0xfffffffd},
784                                    {NoFlag, 0xaaaaaaaa, 0xfffffffe},
785                                    {NoFlag, 0xaaaaaaaa, 0xffffffff},
786                                    {NoFlag, 0xcccccccc, 0x00000000},
787                                    {NoFlag, 0xcccccccc, 0x00000001},
788                                    {NoFlag, 0xcccccccc, 0x00000002},
789                                    {NoFlag, 0xcccccccc, 0x00000020},
790                                    {NoFlag, 0xcccccccc, 0x0000007d},
791                                    {NoFlag, 0xcccccccc, 0x0000007e},
792                                    {NoFlag, 0xcccccccc, 0x0000007f},
793                                    {NoFlag, 0xcccccccc, 0x00007ffd},
794                                    {NoFlag, 0xcccccccc, 0x00007ffe},
795                                    {NoFlag, 0xcccccccc, 0x00007fff},
796                                    {NoFlag, 0xcccccccc, 0x33333333},
797                                    {NoFlag, 0xcccccccc, 0x55555555},
798                                    {NoFlag, 0xcccccccc, 0x7ffffffd},
799                                    {NoFlag, 0xcccccccc, 0x7ffffffe},
800                                    {NoFlag, 0xcccccccc, 0x7fffffff},
801                                    {NoFlag, 0xcccccccc, 0x80000000},
802                                    {NoFlag, 0xcccccccc, 0x80000001},
803                                    {NoFlag, 0xcccccccc, 0xaaaaaaaa},
804                                    {NoFlag, 0xcccccccc, 0xcccccccc},
805                                    {NoFlag, 0xcccccccc, 0xffff8000},
806                                    {NoFlag, 0xcccccccc, 0xffff8001},
807                                    {NoFlag, 0xcccccccc, 0xffff8002},
808                                    {NoFlag, 0xcccccccc, 0xffff8003},
809                                    {NoFlag, 0xcccccccc, 0xffffff80},
810                                    {NoFlag, 0xcccccccc, 0xffffff81},
811                                    {NoFlag, 0xcccccccc, 0xffffff82},
812                                    {NoFlag, 0xcccccccc, 0xffffff83},
813                                    {NoFlag, 0xcccccccc, 0xffffffe0},
814                                    {NoFlag, 0xcccccccc, 0xfffffffd},
815                                    {NoFlag, 0xcccccccc, 0xfffffffe},
816                                    {NoFlag, 0xcccccccc, 0xffffffff},
817                                    {NoFlag, 0xffff8000, 0x00000000},
818                                    {NoFlag, 0xffff8000, 0x00000001},
819                                    {NoFlag, 0xffff8000, 0x00000002},
820                                    {NoFlag, 0xffff8000, 0x00000020},
821                                    {NoFlag, 0xffff8000, 0x0000007d},
822                                    {NoFlag, 0xffff8000, 0x0000007e},
823                                    {NoFlag, 0xffff8000, 0x0000007f},
824                                    {NoFlag, 0xffff8000, 0x00007ffd},
825                                    {NoFlag, 0xffff8000, 0x00007ffe},
826                                    {NoFlag, 0xffff8000, 0x00007fff},
827                                    {NoFlag, 0xffff8000, 0x33333333},
828                                    {NoFlag, 0xffff8000, 0x55555555},
829                                    {NoFlag, 0xffff8000, 0x7ffffffd},
830                                    {NoFlag, 0xffff8000, 0x7ffffffe},
831                                    {NoFlag, 0xffff8000, 0x7fffffff},
832                                    {NoFlag, 0xffff8000, 0x80000000},
833                                    {NoFlag, 0xffff8000, 0x80000001},
834                                    {NoFlag, 0xffff8000, 0xaaaaaaaa},
835                                    {NoFlag, 0xffff8000, 0xcccccccc},
836                                    {NoFlag, 0xffff8000, 0xffff8000},
837                                    {NoFlag, 0xffff8000, 0xffff8001},
838                                    {NoFlag, 0xffff8000, 0xffff8002},
839                                    {NoFlag, 0xffff8000, 0xffff8003},
840                                    {NoFlag, 0xffff8000, 0xffffff80},
841                                    {NoFlag, 0xffff8000, 0xffffff81},
842                                    {NoFlag, 0xffff8000, 0xffffff82},
843                                    {NoFlag, 0xffff8000, 0xffffff83},
844                                    {NoFlag, 0xffff8000, 0xffffffe0},
845                                    {NoFlag, 0xffff8000, 0xfffffffd},
846                                    {NoFlag, 0xffff8000, 0xfffffffe},
847                                    {NoFlag, 0xffff8000, 0xffffffff},
848                                    {NoFlag, 0xffff8001, 0x00000000},
849                                    {NoFlag, 0xffff8001, 0x00000001},
850                                    {NoFlag, 0xffff8001, 0x00000002},
851                                    {NoFlag, 0xffff8001, 0x00000020},
852                                    {NoFlag, 0xffff8001, 0x0000007d},
853                                    {NoFlag, 0xffff8001, 0x0000007e},
854                                    {NoFlag, 0xffff8001, 0x0000007f},
855                                    {NoFlag, 0xffff8001, 0x00007ffd},
856                                    {NoFlag, 0xffff8001, 0x00007ffe},
857                                    {NoFlag, 0xffff8001, 0x00007fff},
858                                    {NoFlag, 0xffff8001, 0x33333333},
859                                    {NoFlag, 0xffff8001, 0x55555555},
860                                    {NoFlag, 0xffff8001, 0x7ffffffd},
861                                    {NoFlag, 0xffff8001, 0x7ffffffe},
862                                    {NoFlag, 0xffff8001, 0x7fffffff},
863                                    {NoFlag, 0xffff8001, 0x80000000},
864                                    {NoFlag, 0xffff8001, 0x80000001},
865                                    {NoFlag, 0xffff8001, 0xaaaaaaaa},
866                                    {NoFlag, 0xffff8001, 0xcccccccc},
867                                    {NoFlag, 0xffff8001, 0xffff8000},
868                                    {NoFlag, 0xffff8001, 0xffff8001},
869                                    {NoFlag, 0xffff8001, 0xffff8002},
870                                    {NoFlag, 0xffff8001, 0xffff8003},
871                                    {NoFlag, 0xffff8001, 0xffffff80},
872                                    {NoFlag, 0xffff8001, 0xffffff81},
873                                    {NoFlag, 0xffff8001, 0xffffff82},
874                                    {NoFlag, 0xffff8001, 0xffffff83},
875                                    {NoFlag, 0xffff8001, 0xffffffe0},
876                                    {NoFlag, 0xffff8001, 0xfffffffd},
877                                    {NoFlag, 0xffff8001, 0xfffffffe},
878                                    {NoFlag, 0xffff8001, 0xffffffff},
879                                    {NoFlag, 0xffff8002, 0x00000000},
880                                    {NoFlag, 0xffff8002, 0x00000001},
881                                    {NoFlag, 0xffff8002, 0x00000002},
882                                    {NoFlag, 0xffff8002, 0x00000020},
883                                    {NoFlag, 0xffff8002, 0x0000007d},
884                                    {NoFlag, 0xffff8002, 0x0000007e},
885                                    {NoFlag, 0xffff8002, 0x0000007f},
886                                    {NoFlag, 0xffff8002, 0x00007ffd},
887                                    {NoFlag, 0xffff8002, 0x00007ffe},
888                                    {NoFlag, 0xffff8002, 0x00007fff},
889                                    {NoFlag, 0xffff8002, 0x33333333},
890                                    {NoFlag, 0xffff8002, 0x55555555},
891                                    {NoFlag, 0xffff8002, 0x7ffffffd},
892                                    {NoFlag, 0xffff8002, 0x7ffffffe},
893                                    {NoFlag, 0xffff8002, 0x7fffffff},
894                                    {NoFlag, 0xffff8002, 0x80000000},
895                                    {NoFlag, 0xffff8002, 0x80000001},
896                                    {NoFlag, 0xffff8002, 0xaaaaaaaa},
897                                    {NoFlag, 0xffff8002, 0xcccccccc},
898                                    {NoFlag, 0xffff8002, 0xffff8000},
899                                    {NoFlag, 0xffff8002, 0xffff8001},
900                                    {NoFlag, 0xffff8002, 0xffff8002},
901                                    {NoFlag, 0xffff8002, 0xffff8003},
902                                    {NoFlag, 0xffff8002, 0xffffff80},
903                                    {NoFlag, 0xffff8002, 0xffffff81},
904                                    {NoFlag, 0xffff8002, 0xffffff82},
905                                    {NoFlag, 0xffff8002, 0xffffff83},
906                                    {NoFlag, 0xffff8002, 0xffffffe0},
907                                    {NoFlag, 0xffff8002, 0xfffffffd},
908                                    {NoFlag, 0xffff8002, 0xfffffffe},
909                                    {NoFlag, 0xffff8002, 0xffffffff},
910                                    {NoFlag, 0xffff8003, 0x00000000},
911                                    {NoFlag, 0xffff8003, 0x00000001},
912                                    {NoFlag, 0xffff8003, 0x00000002},
913                                    {NoFlag, 0xffff8003, 0x00000020},
914                                    {NoFlag, 0xffff8003, 0x0000007d},
915                                    {NoFlag, 0xffff8003, 0x0000007e},
916                                    {NoFlag, 0xffff8003, 0x0000007f},
917                                    {NoFlag, 0xffff8003, 0x00007ffd},
918                                    {NoFlag, 0xffff8003, 0x00007ffe},
919                                    {NoFlag, 0xffff8003, 0x00007fff},
920                                    {NoFlag, 0xffff8003, 0x33333333},
921                                    {NoFlag, 0xffff8003, 0x55555555},
922                                    {NoFlag, 0xffff8003, 0x7ffffffd},
923                                    {NoFlag, 0xffff8003, 0x7ffffffe},
924                                    {NoFlag, 0xffff8003, 0x7fffffff},
925                                    {NoFlag, 0xffff8003, 0x80000000},
926                                    {NoFlag, 0xffff8003, 0x80000001},
927                                    {NoFlag, 0xffff8003, 0xaaaaaaaa},
928                                    {NoFlag, 0xffff8003, 0xcccccccc},
929                                    {NoFlag, 0xffff8003, 0xffff8000},
930                                    {NoFlag, 0xffff8003, 0xffff8001},
931                                    {NoFlag, 0xffff8003, 0xffff8002},
932                                    {NoFlag, 0xffff8003, 0xffff8003},
933                                    {NoFlag, 0xffff8003, 0xffffff80},
934                                    {NoFlag, 0xffff8003, 0xffffff81},
935                                    {NoFlag, 0xffff8003, 0xffffff82},
936                                    {NoFlag, 0xffff8003, 0xffffff83},
937                                    {NoFlag, 0xffff8003, 0xffffffe0},
938                                    {NoFlag, 0xffff8003, 0xfffffffd},
939                                    {NoFlag, 0xffff8003, 0xfffffffe},
940                                    {NoFlag, 0xffff8003, 0xffffffff},
941                                    {NoFlag, 0xffffff80, 0x00000000},
942                                    {NoFlag, 0xffffff80, 0x00000001},
943                                    {NoFlag, 0xffffff80, 0x00000002},
944                                    {NoFlag, 0xffffff80, 0x00000020},
945                                    {NoFlag, 0xffffff80, 0x0000007d},
946                                    {NoFlag, 0xffffff80, 0x0000007e},
947                                    {NoFlag, 0xffffff80, 0x0000007f},
948                                    {NoFlag, 0xffffff80, 0x00007ffd},
949                                    {NoFlag, 0xffffff80, 0x00007ffe},
950                                    {NoFlag, 0xffffff80, 0x00007fff},
951                                    {NoFlag, 0xffffff80, 0x33333333},
952                                    {NoFlag, 0xffffff80, 0x55555555},
953                                    {NoFlag, 0xffffff80, 0x7ffffffd},
954                                    {NoFlag, 0xffffff80, 0x7ffffffe},
955                                    {NoFlag, 0xffffff80, 0x7fffffff},
956                                    {NoFlag, 0xffffff80, 0x80000000},
957                                    {NoFlag, 0xffffff80, 0x80000001},
958                                    {NoFlag, 0xffffff80, 0xaaaaaaaa},
959                                    {NoFlag, 0xffffff80, 0xcccccccc},
960                                    {NoFlag, 0xffffff80, 0xffff8000},
961                                    {NoFlag, 0xffffff80, 0xffff8001},
962                                    {NoFlag, 0xffffff80, 0xffff8002},
963                                    {NoFlag, 0xffffff80, 0xffff8003},
964                                    {NoFlag, 0xffffff80, 0xffffff80},
965                                    {NoFlag, 0xffffff80, 0xffffff81},
966                                    {NoFlag, 0xffffff80, 0xffffff82},
967                                    {NoFlag, 0xffffff80, 0xffffff83},
968                                    {NoFlag, 0xffffff80, 0xffffffe0},
969                                    {NoFlag, 0xffffff80, 0xfffffffd},
970                                    {NoFlag, 0xffffff80, 0xfffffffe},
971                                    {NoFlag, 0xffffff80, 0xffffffff},
972                                    {NoFlag, 0xffffff81, 0x00000000},
973                                    {NoFlag, 0xffffff81, 0x00000001},
974                                    {NoFlag, 0xffffff81, 0x00000002},
975                                    {NoFlag, 0xffffff81, 0x00000020},
976                                    {NoFlag, 0xffffff81, 0x0000007d},
977                                    {NoFlag, 0xffffff81, 0x0000007e},
978                                    {NoFlag, 0xffffff81, 0x0000007f},
979                                    {NoFlag, 0xffffff81, 0x00007ffd},
980                                    {NoFlag, 0xffffff81, 0x00007ffe},
981                                    {NoFlag, 0xffffff81, 0x00007fff},
982                                    {NoFlag, 0xffffff81, 0x33333333},
983                                    {NoFlag, 0xffffff81, 0x55555555},
984                                    {NoFlag, 0xffffff81, 0x7ffffffd},
985                                    {NoFlag, 0xffffff81, 0x7ffffffe},
986                                    {NoFlag, 0xffffff81, 0x7fffffff},
987                                    {NoFlag, 0xffffff81, 0x80000000},
988                                    {NoFlag, 0xffffff81, 0x80000001},
989                                    {NoFlag, 0xffffff81, 0xaaaaaaaa},
990                                    {NoFlag, 0xffffff81, 0xcccccccc},
991                                    {NoFlag, 0xffffff81, 0xffff8000},
992                                    {NoFlag, 0xffffff81, 0xffff8001},
993                                    {NoFlag, 0xffffff81, 0xffff8002},
994                                    {NoFlag, 0xffffff81, 0xffff8003},
995                                    {NoFlag, 0xffffff81, 0xffffff80},
996                                    {NoFlag, 0xffffff81, 0xffffff81},
997                                    {NoFlag, 0xffffff81, 0xffffff82},
998                                    {NoFlag, 0xffffff81, 0xffffff83},
999                                    {NoFlag, 0xffffff81, 0xffffffe0},
1000                                    {NoFlag, 0xffffff81, 0xfffffffd},
1001                                    {NoFlag, 0xffffff81, 0xfffffffe},
1002                                    {NoFlag, 0xffffff81, 0xffffffff},
1003                                    {NoFlag, 0xffffff82, 0x00000000},
1004                                    {NoFlag, 0xffffff82, 0x00000001},
1005                                    {NoFlag, 0xffffff82, 0x00000002},
1006                                    {NoFlag, 0xffffff82, 0x00000020},
1007                                    {NoFlag, 0xffffff82, 0x0000007d},
1008                                    {NoFlag, 0xffffff82, 0x0000007e},
1009                                    {NoFlag, 0xffffff82, 0x0000007f},
1010                                    {NoFlag, 0xffffff82, 0x00007ffd},
1011                                    {NoFlag, 0xffffff82, 0x00007ffe},
1012                                    {NoFlag, 0xffffff82, 0x00007fff},
1013                                    {NoFlag, 0xffffff82, 0x33333333},
1014                                    {NoFlag, 0xffffff82, 0x55555555},
1015                                    {NoFlag, 0xffffff82, 0x7ffffffd},
1016                                    {NoFlag, 0xffffff82, 0x7ffffffe},
1017                                    {NoFlag, 0xffffff82, 0x7fffffff},
1018                                    {NoFlag, 0xffffff82, 0x80000000},
1019                                    {NoFlag, 0xffffff82, 0x80000001},
1020                                    {NoFlag, 0xffffff82, 0xaaaaaaaa},
1021                                    {NoFlag, 0xffffff82, 0xcccccccc},
1022                                    {NoFlag, 0xffffff82, 0xffff8000},
1023                                    {NoFlag, 0xffffff82, 0xffff8001},
1024                                    {NoFlag, 0xffffff82, 0xffff8002},
1025                                    {NoFlag, 0xffffff82, 0xffff8003},
1026                                    {NoFlag, 0xffffff82, 0xffffff80},
1027                                    {NoFlag, 0xffffff82, 0xffffff81},
1028                                    {NoFlag, 0xffffff82, 0xffffff82},
1029                                    {NoFlag, 0xffffff82, 0xffffff83},
1030                                    {NoFlag, 0xffffff82, 0xffffffe0},
1031                                    {NoFlag, 0xffffff82, 0xfffffffd},
1032                                    {NoFlag, 0xffffff82, 0xfffffffe},
1033                                    {NoFlag, 0xffffff82, 0xffffffff},
1034                                    {NoFlag, 0xffffff83, 0x00000000},
1035                                    {NoFlag, 0xffffff83, 0x00000001},
1036                                    {NoFlag, 0xffffff83, 0x00000002},
1037                                    {NoFlag, 0xffffff83, 0x00000020},
1038                                    {NoFlag, 0xffffff83, 0x0000007d},
1039                                    {NoFlag, 0xffffff83, 0x0000007e},
1040                                    {NoFlag, 0xffffff83, 0x0000007f},
1041                                    {NoFlag, 0xffffff83, 0x00007ffd},
1042                                    {NoFlag, 0xffffff83, 0x00007ffe},
1043                                    {NoFlag, 0xffffff83, 0x00007fff},
1044                                    {NoFlag, 0xffffff83, 0x33333333},
1045                                    {NoFlag, 0xffffff83, 0x55555555},
1046                                    {NoFlag, 0xffffff83, 0x7ffffffd},
1047                                    {NoFlag, 0xffffff83, 0x7ffffffe},
1048                                    {NoFlag, 0xffffff83, 0x7fffffff},
1049                                    {NoFlag, 0xffffff83, 0x80000000},
1050                                    {NoFlag, 0xffffff83, 0x80000001},
1051                                    {NoFlag, 0xffffff83, 0xaaaaaaaa},
1052                                    {NoFlag, 0xffffff83, 0xcccccccc},
1053                                    {NoFlag, 0xffffff83, 0xffff8000},
1054                                    {NoFlag, 0xffffff83, 0xffff8001},
1055                                    {NoFlag, 0xffffff83, 0xffff8002},
1056                                    {NoFlag, 0xffffff83, 0xffff8003},
1057                                    {NoFlag, 0xffffff83, 0xffffff80},
1058                                    {NoFlag, 0xffffff83, 0xffffff81},
1059                                    {NoFlag, 0xffffff83, 0xffffff82},
1060                                    {NoFlag, 0xffffff83, 0xffffff83},
1061                                    {NoFlag, 0xffffff83, 0xffffffe0},
1062                                    {NoFlag, 0xffffff83, 0xfffffffd},
1063                                    {NoFlag, 0xffffff83, 0xfffffffe},
1064                                    {NoFlag, 0xffffff83, 0xffffffff},
1065                                    {NoFlag, 0xffffffe0, 0x00000000},
1066                                    {NoFlag, 0xffffffe0, 0x00000001},
1067                                    {NoFlag, 0xffffffe0, 0x00000002},
1068                                    {NoFlag, 0xffffffe0, 0x00000020},
1069                                    {NoFlag, 0xffffffe0, 0x0000007d},
1070                                    {NoFlag, 0xffffffe0, 0x0000007e},
1071                                    {NoFlag, 0xffffffe0, 0x0000007f},
1072                                    {NoFlag, 0xffffffe0, 0x00007ffd},
1073                                    {NoFlag, 0xffffffe0, 0x00007ffe},
1074                                    {NoFlag, 0xffffffe0, 0x00007fff},
1075                                    {NoFlag, 0xffffffe0, 0x33333333},
1076                                    {NoFlag, 0xffffffe0, 0x55555555},
1077                                    {NoFlag, 0xffffffe0, 0x7ffffffd},
1078                                    {NoFlag, 0xffffffe0, 0x7ffffffe},
1079                                    {NoFlag, 0xffffffe0, 0x7fffffff},
1080                                    {NoFlag, 0xffffffe0, 0x80000000},
1081                                    {NoFlag, 0xffffffe0, 0x80000001},
1082                                    {NoFlag, 0xffffffe0, 0xaaaaaaaa},
1083                                    {NoFlag, 0xffffffe0, 0xcccccccc},
1084                                    {NoFlag, 0xffffffe0, 0xffff8000},
1085                                    {NoFlag, 0xffffffe0, 0xffff8001},
1086                                    {NoFlag, 0xffffffe0, 0xffff8002},
1087                                    {NoFlag, 0xffffffe0, 0xffff8003},
1088                                    {NoFlag, 0xffffffe0, 0xffffff80},
1089                                    {NoFlag, 0xffffffe0, 0xffffff81},
1090                                    {NoFlag, 0xffffffe0, 0xffffff82},
1091                                    {NoFlag, 0xffffffe0, 0xffffff83},
1092                                    {NoFlag, 0xffffffe0, 0xffffffe0},
1093                                    {NoFlag, 0xffffffe0, 0xfffffffd},
1094                                    {NoFlag, 0xffffffe0, 0xfffffffe},
1095                                    {NoFlag, 0xffffffe0, 0xffffffff},
1096                                    {NoFlag, 0xfffffffd, 0x00000000},
1097                                    {NoFlag, 0xfffffffd, 0x00000001},
1098                                    {NoFlag, 0xfffffffd, 0x00000002},
1099                                    {NoFlag, 0xfffffffd, 0x00000020},
1100                                    {NoFlag, 0xfffffffd, 0x0000007d},
1101                                    {NoFlag, 0xfffffffd, 0x0000007e},
1102                                    {NoFlag, 0xfffffffd, 0x0000007f},
1103                                    {NoFlag, 0xfffffffd, 0x00007ffd},
1104                                    {NoFlag, 0xfffffffd, 0x00007ffe},
1105                                    {NoFlag, 0xfffffffd, 0x00007fff},
1106                                    {NoFlag, 0xfffffffd, 0x33333333},
1107                                    {NoFlag, 0xfffffffd, 0x55555555},
1108                                    {NoFlag, 0xfffffffd, 0x7ffffffd},
1109                                    {NoFlag, 0xfffffffd, 0x7ffffffe},
1110                                    {NoFlag, 0xfffffffd, 0x7fffffff},
1111                                    {NoFlag, 0xfffffffd, 0x80000000},
1112                                    {NoFlag, 0xfffffffd, 0x80000001},
1113                                    {NoFlag, 0xfffffffd, 0xaaaaaaaa},
1114                                    {NoFlag, 0xfffffffd, 0xcccccccc},
1115                                    {NoFlag, 0xfffffffd, 0xffff8000},
1116                                    {NoFlag, 0xfffffffd, 0xffff8001},
1117                                    {NoFlag, 0xfffffffd, 0xffff8002},
1118                                    {NoFlag, 0xfffffffd, 0xffff8003},
1119                                    {NoFlag, 0xfffffffd, 0xffffff80},
1120                                    {NoFlag, 0xfffffffd, 0xffffff81},
1121                                    {NoFlag, 0xfffffffd, 0xffffff82},
1122                                    {NoFlag, 0xfffffffd, 0xffffff83},
1123                                    {NoFlag, 0xfffffffd, 0xffffffe0},
1124                                    {NoFlag, 0xfffffffd, 0xfffffffd},
1125                                    {NoFlag, 0xfffffffd, 0xfffffffe},
1126                                    {NoFlag, 0xfffffffd, 0xffffffff},
1127                                    {NoFlag, 0xfffffffe, 0x00000000},
1128                                    {NoFlag, 0xfffffffe, 0x00000001},
1129                                    {NoFlag, 0xfffffffe, 0x00000002},
1130                                    {NoFlag, 0xfffffffe, 0x00000020},
1131                                    {NoFlag, 0xfffffffe, 0x0000007d},
1132                                    {NoFlag, 0xfffffffe, 0x0000007e},
1133                                    {NoFlag, 0xfffffffe, 0x0000007f},
1134                                    {NoFlag, 0xfffffffe, 0x00007ffd},
1135                                    {NoFlag, 0xfffffffe, 0x00007ffe},
1136                                    {NoFlag, 0xfffffffe, 0x00007fff},
1137                                    {NoFlag, 0xfffffffe, 0x33333333},
1138                                    {NoFlag, 0xfffffffe, 0x55555555},
1139                                    {NoFlag, 0xfffffffe, 0x7ffffffd},
1140                                    {NoFlag, 0xfffffffe, 0x7ffffffe},
1141                                    {NoFlag, 0xfffffffe, 0x7fffffff},
1142                                    {NoFlag, 0xfffffffe, 0x80000000},
1143                                    {NoFlag, 0xfffffffe, 0x80000001},
1144                                    {NoFlag, 0xfffffffe, 0xaaaaaaaa},
1145                                    {NoFlag, 0xfffffffe, 0xcccccccc},
1146                                    {NoFlag, 0xfffffffe, 0xffff8000},
1147                                    {NoFlag, 0xfffffffe, 0xffff8001},
1148                                    {NoFlag, 0xfffffffe, 0xffff8002},
1149                                    {NoFlag, 0xfffffffe, 0xffff8003},
1150                                    {NoFlag, 0xfffffffe, 0xffffff80},
1151                                    {NoFlag, 0xfffffffe, 0xffffff81},
1152                                    {NoFlag, 0xfffffffe, 0xffffff82},
1153                                    {NoFlag, 0xfffffffe, 0xffffff83},
1154                                    {NoFlag, 0xfffffffe, 0xffffffe0},
1155                                    {NoFlag, 0xfffffffe, 0xfffffffd},
1156                                    {NoFlag, 0xfffffffe, 0xfffffffe},
1157                                    {NoFlag, 0xfffffffe, 0xffffffff},
1158                                    {NoFlag, 0xffffffff, 0x00000000},
1159                                    {NoFlag, 0xffffffff, 0x00000001},
1160                                    {NoFlag, 0xffffffff, 0x00000002},
1161                                    {NoFlag, 0xffffffff, 0x00000020},
1162                                    {NoFlag, 0xffffffff, 0x0000007d},
1163                                    {NoFlag, 0xffffffff, 0x0000007e},
1164                                    {NoFlag, 0xffffffff, 0x0000007f},
1165                                    {NoFlag, 0xffffffff, 0x00007ffd},
1166                                    {NoFlag, 0xffffffff, 0x00007ffe},
1167                                    {NoFlag, 0xffffffff, 0x00007fff},
1168                                    {NoFlag, 0xffffffff, 0x33333333},
1169                                    {NoFlag, 0xffffffff, 0x55555555},
1170                                    {NoFlag, 0xffffffff, 0x7ffffffd},
1171                                    {NoFlag, 0xffffffff, 0x7ffffffe},
1172                                    {NoFlag, 0xffffffff, 0x7fffffff},
1173                                    {NoFlag, 0xffffffff, 0x80000000},
1174                                    {NoFlag, 0xffffffff, 0x80000001},
1175                                    {NoFlag, 0xffffffff, 0xaaaaaaaa},
1176                                    {NoFlag, 0xffffffff, 0xcccccccc},
1177                                    {NoFlag, 0xffffffff, 0xffff8000},
1178                                    {NoFlag, 0xffffffff, 0xffff8001},
1179                                    {NoFlag, 0xffffffff, 0xffff8002},
1180                                    {NoFlag, 0xffffffff, 0xffff8003},
1181                                    {NoFlag, 0xffffffff, 0xffffff80},
1182                                    {NoFlag, 0xffffffff, 0xffffff81},
1183                                    {NoFlag, 0xffffffff, 0xffffff82},
1184                                    {NoFlag, 0xffffffff, 0xffffff83},
1185                                    {NoFlag, 0xffffffff, 0xffffffe0},
1186                                    {NoFlag, 0xffffffff, 0xfffffffd},
1187                                    {NoFlag, 0xffffffff, 0xfffffffe},
1188                                    {NoFlag, 0xffffffff, 0xffffffff}};
1189
1190static const Inputs kModifiedImmediate[] = {{NoFlag, 0xabababab, 0x00000000},
1191                                            {NoFlag, 0xabababab, 0x00000001},
1192                                            {NoFlag, 0xabababab, 0x00000002},
1193                                            {NoFlag, 0xabababab, 0x00000020},
1194                                            {NoFlag, 0xabababab, 0x0000007d},
1195                                            {NoFlag, 0xabababab, 0x0000007e},
1196                                            {NoFlag, 0xabababab, 0x0000007f},
1197                                            {NoFlag, 0xabababab, 0x00007ffd},
1198                                            {NoFlag, 0xabababab, 0x00007ffe},
1199                                            {NoFlag, 0xabababab, 0x00007fff},
1200                                            {NoFlag, 0xabababab, 0x33333333},
1201                                            {NoFlag, 0xabababab, 0x55555555},
1202                                            {NoFlag, 0xabababab, 0x7ffffffd},
1203                                            {NoFlag, 0xabababab, 0x7ffffffe},
1204                                            {NoFlag, 0xabababab, 0x7fffffff},
1205                                            {NoFlag, 0xabababab, 0x80000000},
1206                                            {NoFlag, 0xabababab, 0x80000001},
1207                                            {NoFlag, 0xabababab, 0xaaaaaaaa},
1208                                            {NoFlag, 0xabababab, 0xcccccccc},
1209                                            {NoFlag, 0xabababab, 0xffff8000},
1210                                            {NoFlag, 0xabababab, 0xffff8001},
1211                                            {NoFlag, 0xabababab, 0xffff8002},
1212                                            {NoFlag, 0xabababab, 0xffff8003},
1213                                            {NoFlag, 0xabababab, 0xffffff80},
1214                                            {NoFlag, 0xabababab, 0xffffff81},
1215                                            {NoFlag, 0xabababab, 0xffffff82},
1216                                            {NoFlag, 0xabababab, 0xffffff83},
1217                                            {NoFlag, 0xabababab, 0xffffffe0},
1218                                            {NoFlag, 0xabababab, 0xfffffffd},
1219                                            {NoFlag, 0xabababab, 0xfffffffe},
1220                                            {NoFlag, 0xabababab, 0xffffffff}};
1221
1222
1223// A loop will be generated for each element of this array.
1224const TestLoopData kTests[] = {{{eq, r0, r0, 0x000000ab},
1225                                "eq r0 r0 0x000000ab",
1226                                "Condition_eq_r0_r0_0x000000ab",
1227                                ARRAY_SIZE(kCondition),
1228                                kCondition},
1229                               {{ne, r0, r0, 0x000000ab},
1230                                "ne r0 r0 0x000000ab",
1231                                "Condition_ne_r0_r0_0x000000ab",
1232                                ARRAY_SIZE(kCondition),
1233                                kCondition},
1234                               {{cs, r0, r0, 0x000000ab},
1235                                "cs r0 r0 0x000000ab",
1236                                "Condition_cs_r0_r0_0x000000ab",
1237                                ARRAY_SIZE(kCondition),
1238                                kCondition},
1239                               {{cc, r0, r0, 0x000000ab},
1240                                "cc r0 r0 0x000000ab",
1241                                "Condition_cc_r0_r0_0x000000ab",
1242                                ARRAY_SIZE(kCondition),
1243                                kCondition},
1244                               {{mi, r0, r0, 0x000000ab},
1245                                "mi r0 r0 0x000000ab",
1246                                "Condition_mi_r0_r0_0x000000ab",
1247                                ARRAY_SIZE(kCondition),
1248                                kCondition},
1249                               {{pl, r0, r0, 0x000000ab},
1250                                "pl r0 r0 0x000000ab",
1251                                "Condition_pl_r0_r0_0x000000ab",
1252                                ARRAY_SIZE(kCondition),
1253                                kCondition},
1254                               {{vs, r0, r0, 0x000000ab},
1255                                "vs r0 r0 0x000000ab",
1256                                "Condition_vs_r0_r0_0x000000ab",
1257                                ARRAY_SIZE(kCondition),
1258                                kCondition},
1259                               {{vc, r0, r0, 0x000000ab},
1260                                "vc r0 r0 0x000000ab",
1261                                "Condition_vc_r0_r0_0x000000ab",
1262                                ARRAY_SIZE(kCondition),
1263                                kCondition},
1264                               {{hi, r0, r0, 0x000000ab},
1265                                "hi r0 r0 0x000000ab",
1266                                "Condition_hi_r0_r0_0x000000ab",
1267                                ARRAY_SIZE(kCondition),
1268                                kCondition},
1269                               {{ls, r0, r0, 0x000000ab},
1270                                "ls r0 r0 0x000000ab",
1271                                "Condition_ls_r0_r0_0x000000ab",
1272                                ARRAY_SIZE(kCondition),
1273                                kCondition},
1274                               {{ge, r0, r0, 0x000000ab},
1275                                "ge r0 r0 0x000000ab",
1276                                "Condition_ge_r0_r0_0x000000ab",
1277                                ARRAY_SIZE(kCondition),
1278                                kCondition},
1279                               {{lt, r0, r0, 0x000000ab},
1280                                "lt r0 r0 0x000000ab",
1281                                "Condition_lt_r0_r0_0x000000ab",
1282                                ARRAY_SIZE(kCondition),
1283                                kCondition},
1284                               {{gt, r0, r0, 0x000000ab},
1285                                "gt r0 r0 0x000000ab",
1286                                "Condition_gt_r0_r0_0x000000ab",
1287                                ARRAY_SIZE(kCondition),
1288                                kCondition},
1289                               {{le, r0, r0, 0x000000ab},
1290                                "le r0 r0 0x000000ab",
1291                                "Condition_le_r0_r0_0x000000ab",
1292                                ARRAY_SIZE(kCondition),
1293                                kCondition},
1294                               {{al, r0, r0, 0x000000ab},
1295                                "al r0 r0 0x000000ab",
1296                                "Condition_al_r0_r0_0x000000ab",
1297                                ARRAY_SIZE(kCondition),
1298                                kCondition},
1299                               {{al, r4, r4, 0x02ac0000},
1300                                "al r4 r4 0x02ac0000",
1301                                "RdIsRn_al_r4_r4_0x02ac0000",
1302                                ARRAY_SIZE(kRdIsRn),
1303                                kRdIsRn},
1304                               {{al, r0, r0, 0xf000000f},
1305                                "al r0 r0 0xf000000f",
1306                                "RdIsRn_al_r0_r0_0xf000000f",
1307                                ARRAY_SIZE(kRdIsRn),
1308                                kRdIsRn},
1309                               {{al, r1, r1, 0x00000ff0},
1310                                "al r1 r1 0x00000ff0",
1311                                "RdIsRn_al_r1_r1_0x00000ff0",
1312                                ARRAY_SIZE(kRdIsRn),
1313                                kRdIsRn},
1314                               {{al, r9, r9, 0x0ff00000},
1315                                "al r9 r9 0x0ff00000",
1316                                "RdIsRn_al_r9_r9_0x0ff00000",
1317                                ARRAY_SIZE(kRdIsRn),
1318                                kRdIsRn},
1319                               {{al, r14, r14, 0xf000000f},
1320                                "al r14 r14 0xf000000f",
1321                                "RdIsRn_al_r14_r14_0xf000000f",
1322                                ARRAY_SIZE(kRdIsRn),
1323                                kRdIsRn},
1324                               {{al, r1, r1, 0x00ab0000},
1325                                "al r1 r1 0x00ab0000",
1326                                "RdIsRn_al_r1_r1_0x00ab0000",
1327                                ARRAY_SIZE(kRdIsRn),
1328                                kRdIsRn},
1329                               {{al, r10, r10, 0x00002ac0},
1330                                "al r10 r10 0x00002ac0",
1331                                "RdIsRn_al_r10_r10_0x00002ac0",
1332                                ARRAY_SIZE(kRdIsRn),
1333                                kRdIsRn},
1334                               {{al, r6, r6, 0x0002ac00},
1335                                "al r6 r6 0x0002ac00",
1336                                "RdIsRn_al_r6_r6_0x0002ac00",
1337                                ARRAY_SIZE(kRdIsRn),
1338                                kRdIsRn},
1339                               {{al, r3, r3, 0xac000002},
1340                                "al r3 r3 0xac000002",
1341                                "RdIsRn_al_r3_r3_0xac000002",
1342                                ARRAY_SIZE(kRdIsRn),
1343                                kRdIsRn},
1344                               {{al, r6, r6, 0x00000ab0},
1345                                "al r6 r6 0x00000ab0",
1346                                "RdIsRn_al_r6_r6_0x00000ab0",
1347                                ARRAY_SIZE(kRdIsRn),
1348                                kRdIsRn},
1349                               {{al, r4, r10, 0xac000002},
1350                                "al r4 r10 0xac000002",
1351                                "RdIsNotRn_al_r4_r10_0xac000002",
1352                                ARRAY_SIZE(kRdIsNotRn),
1353                                kRdIsNotRn},
1354                               {{al, r0, r4, 0xc000003f},
1355                                "al r0 r4 0xc000003f",
1356                                "RdIsNotRn_al_r0_r4_0xc000003f",
1357                                ARRAY_SIZE(kRdIsNotRn),
1358                                kRdIsNotRn},
1359                               {{al, r8, r0, 0xc000003f},
1360                                "al r8 r0 0xc000003f",
1361                                "RdIsNotRn_al_r8_r0_0xc000003f",
1362                                ARRAY_SIZE(kRdIsNotRn),
1363                                kRdIsNotRn},
1364                               {{al, r5, r0, 0x00ab0000},
1365                                "al r5 r0 0x00ab0000",
1366                                "RdIsNotRn_al_r5_r0_0x00ab0000",
1367                                ARRAY_SIZE(kRdIsNotRn),
1368                                kRdIsNotRn},
1369                               {{al, r8, r14, 0x002ac000},
1370                                "al r8 r14 0x002ac000",
1371                                "RdIsNotRn_al_r8_r14_0x002ac000",
1372                                ARRAY_SIZE(kRdIsNotRn),
1373                                kRdIsNotRn},
1374                               {{al, r2, r11, 0x0002ac00},
1375                                "al r2 r11 0x0002ac00",
1376                                "RdIsNotRn_al_r2_r11_0x0002ac00",
1377                                ARRAY_SIZE(kRdIsNotRn),
1378                                kRdIsNotRn},
1379                               {{al, r1, r0, 0x0000ff00},
1380                                "al r1 r0 0x0000ff00",
1381                                "RdIsNotRn_al_r1_r0_0x0000ff00",
1382                                ARRAY_SIZE(kRdIsNotRn),
1383                                kRdIsNotRn},
1384                               {{al, r1, r7, 0x003fc000},
1385                                "al r1 r7 0x003fc000",
1386                                "RdIsNotRn_al_r1_r7_0x003fc000",
1387                                ARRAY_SIZE(kRdIsNotRn),
1388                                kRdIsNotRn},
1389                               {{al, r11, r8, 0x0ab00000},
1390                                "al r11 r8 0x0ab00000",
1391                                "RdIsNotRn_al_r11_r8_0x0ab00000",
1392                                ARRAY_SIZE(kRdIsNotRn),
1393                                kRdIsNotRn},
1394                               {{al, r14, r12, 0x3fc00000},
1395                                "al r14 r12 0x3fc00000",
1396                                "RdIsNotRn_al_r14_r12_0x3fc00000",
1397                                ARRAY_SIZE(kRdIsNotRn),
1398                                kRdIsNotRn},
1399                               {{al, r0, r0, 0x00000000},
1400                                "al r0 r0 0x00000000",
1401                                "ModifiedImmediate_al_r0_r0_0x00000000",
1402                                ARRAY_SIZE(kModifiedImmediate),
1403                                kModifiedImmediate},
1404                               {{al, r0, r0, 0x000000ff},
1405                                "al r0 r0 0x000000ff",
1406                                "ModifiedImmediate_al_r0_r0_0x000000ff",
1407                                ARRAY_SIZE(kModifiedImmediate),
1408                                kModifiedImmediate},
1409                               {{al, r0, r0, 0xc000003f},
1410                                "al r0 r0 0xc000003f",
1411                                "ModifiedImmediate_al_r0_r0_0xc000003f",
1412                                ARRAY_SIZE(kModifiedImmediate),
1413                                kModifiedImmediate},
1414                               {{al, r0, r0, 0xf000000f},
1415                                "al r0 r0 0xf000000f",
1416                                "ModifiedImmediate_al_r0_r0_0xf000000f",
1417                                ARRAY_SIZE(kModifiedImmediate),
1418                                kModifiedImmediate},
1419                               {{al, r0, r0, 0xfc000003},
1420                                "al r0 r0 0xfc000003",
1421                                "ModifiedImmediate_al_r0_r0_0xfc000003",
1422                                ARRAY_SIZE(kModifiedImmediate),
1423                                kModifiedImmediate},
1424                               {{al, r0, r0, 0xff000000},
1425                                "al r0 r0 0xff000000",
1426                                "ModifiedImmediate_al_r0_r0_0xff000000",
1427                                ARRAY_SIZE(kModifiedImmediate),
1428                                kModifiedImmediate},
1429                               {{al, r0, r0, 0x3fc00000},
1430                                "al r0 r0 0x3fc00000",
1431                                "ModifiedImmediate_al_r0_r0_0x3fc00000",
1432                                ARRAY_SIZE(kModifiedImmediate),
1433                                kModifiedImmediate},
1434                               {{al, r0, r0, 0x0ff00000},
1435                                "al r0 r0 0x0ff00000",
1436                                "ModifiedImmediate_al_r0_r0_0x0ff00000",
1437                                ARRAY_SIZE(kModifiedImmediate),
1438                                kModifiedImmediate},
1439                               {{al, r0, r0, 0x03fc0000},
1440                                "al r0 r0 0x03fc0000",
1441                                "ModifiedImmediate_al_r0_r0_0x03fc0000",
1442                                ARRAY_SIZE(kModifiedImmediate),
1443                                kModifiedImmediate},
1444                               {{al, r0, r0, 0x00ff0000},
1445                                "al r0 r0 0x00ff0000",
1446                                "ModifiedImmediate_al_r0_r0_0x00ff0000",
1447                                ARRAY_SIZE(kModifiedImmediate),
1448                                kModifiedImmediate},
1449                               {{al, r0, r0, 0x003fc000},
1450                                "al r0 r0 0x003fc000",
1451                                "ModifiedImmediate_al_r0_r0_0x003fc000",
1452                                ARRAY_SIZE(kModifiedImmediate),
1453                                kModifiedImmediate},
1454                               {{al, r0, r0, 0x000ff000},
1455                                "al r0 r0 0x000ff000",
1456                                "ModifiedImmediate_al_r0_r0_0x000ff000",
1457                                ARRAY_SIZE(kModifiedImmediate),
1458                                kModifiedImmediate},
1459                               {{al, r0, r0, 0x0003fc00},
1460                                "al r0 r0 0x0003fc00",
1461                                "ModifiedImmediate_al_r0_r0_0x0003fc00",
1462                                ARRAY_SIZE(kModifiedImmediate),
1463                                kModifiedImmediate},
1464                               {{al, r0, r0, 0x0000ff00},
1465                                "al r0 r0 0x0000ff00",
1466                                "ModifiedImmediate_al_r0_r0_0x0000ff00",
1467                                ARRAY_SIZE(kModifiedImmediate),
1468                                kModifiedImmediate},
1469                               {{al, r0, r0, 0x00003fc0},
1470                                "al r0 r0 0x00003fc0",
1471                                "ModifiedImmediate_al_r0_r0_0x00003fc0",
1472                                ARRAY_SIZE(kModifiedImmediate),
1473                                kModifiedImmediate},
1474                               {{al, r0, r0, 0x00000ff0},
1475                                "al r0 r0 0x00000ff0",
1476                                "ModifiedImmediate_al_r0_r0_0x00000ff0",
1477                                ARRAY_SIZE(kModifiedImmediate),
1478                                kModifiedImmediate},
1479                               {{al, r0, r0, 0x000003fc},
1480                                "al r0 r0 0x000003fc",
1481                                "ModifiedImmediate_al_r0_r0_0x000003fc",
1482                                ARRAY_SIZE(kModifiedImmediate),
1483                                kModifiedImmediate},
1484                               {{al, r0, r0, 0x000000ab},
1485                                "al r0 r0 0x000000ab",
1486                                "ModifiedImmediate_al_r0_r0_0x000000ab",
1487                                ARRAY_SIZE(kModifiedImmediate),
1488                                kModifiedImmediate},
1489                               {{al, r0, r0, 0xc000002a},
1490                                "al r0 r0 0xc000002a",
1491                                "ModifiedImmediate_al_r0_r0_0xc000002a",
1492                                ARRAY_SIZE(kModifiedImmediate),
1493                                kModifiedImmediate},
1494                               {{al, r0, r0, 0xb000000a},
1495                                "al r0 r0 0xb000000a",
1496                                "ModifiedImmediate_al_r0_r0_0xb000000a",
1497                                ARRAY_SIZE(kModifiedImmediate),
1498                                kModifiedImmediate},
1499                               {{al, r0, r0, 0xac000002},
1500                                "al r0 r0 0xac000002",
1501                                "ModifiedImmediate_al_r0_r0_0xac000002",
1502                                ARRAY_SIZE(kModifiedImmediate),
1503                                kModifiedImmediate},
1504                               {{al, r0, r0, 0xab000000},
1505                                "al r0 r0 0xab000000",
1506                                "ModifiedImmediate_al_r0_r0_0xab000000",
1507                                ARRAY_SIZE(kModifiedImmediate),
1508                                kModifiedImmediate},
1509                               {{al, r0, r0, 0x2ac00000},
1510                                "al r0 r0 0x2ac00000",
1511                                "ModifiedImmediate_al_r0_r0_0x2ac00000",
1512                                ARRAY_SIZE(kModifiedImmediate),
1513                                kModifiedImmediate},
1514                               {{al, r0, r0, 0x0ab00000},
1515                                "al r0 r0 0x0ab00000",
1516                                "ModifiedImmediate_al_r0_r0_0x0ab00000",
1517                                ARRAY_SIZE(kModifiedImmediate),
1518                                kModifiedImmediate},
1519                               {{al, r0, r0, 0x02ac0000},
1520                                "al r0 r0 0x02ac0000",
1521                                "ModifiedImmediate_al_r0_r0_0x02ac0000",
1522                                ARRAY_SIZE(kModifiedImmediate),
1523                                kModifiedImmediate},
1524                               {{al, r0, r0, 0x00ab0000},
1525                                "al r0 r0 0x00ab0000",
1526                                "ModifiedImmediate_al_r0_r0_0x00ab0000",
1527                                ARRAY_SIZE(kModifiedImmediate),
1528                                kModifiedImmediate},
1529                               {{al, r0, r0, 0x002ac000},
1530                                "al r0 r0 0x002ac000",
1531                                "ModifiedImmediate_al_r0_r0_0x002ac000",
1532                                ARRAY_SIZE(kModifiedImmediate),
1533                                kModifiedImmediate},
1534                               {{al, r0, r0, 0x000ab000},
1535                                "al r0 r0 0x000ab000",
1536                                "ModifiedImmediate_al_r0_r0_0x000ab000",
1537                                ARRAY_SIZE(kModifiedImmediate),
1538                                kModifiedImmediate},
1539                               {{al, r0, r0, 0x0002ac00},
1540                                "al r0 r0 0x0002ac00",
1541                                "ModifiedImmediate_al_r0_r0_0x0002ac00",
1542                                ARRAY_SIZE(kModifiedImmediate),
1543                                kModifiedImmediate},
1544                               {{al, r0, r0, 0x0000ab00},
1545                                "al r0 r0 0x0000ab00",
1546                                "ModifiedImmediate_al_r0_r0_0x0000ab00",
1547                                ARRAY_SIZE(kModifiedImmediate),
1548                                kModifiedImmediate},
1549                               {{al, r0, r0, 0x00002ac0},
1550                                "al r0 r0 0x00002ac0",
1551                                "ModifiedImmediate_al_r0_r0_0x00002ac0",
1552                                ARRAY_SIZE(kModifiedImmediate),
1553                                kModifiedImmediate},
1554                               {{al, r0, r0, 0x00000ab0},
1555                                "al r0 r0 0x00000ab0",
1556                                "ModifiedImmediate_al_r0_r0_0x00000ab0",
1557                                ARRAY_SIZE(kModifiedImmediate),
1558                                kModifiedImmediate},
1559                               {{al, r0, r0, 0x000002ac},
1560                                "al r0 r0 0x000002ac",
1561                                "ModifiedImmediate_al_r0_r0_0x000002ac",
1562                                ARRAY_SIZE(kModifiedImmediate),
1563                                kModifiedImmediate}};
1564
1565// We record all inputs to the instructions as outputs. This way, we also check
1566// that what shouldn't change didn't change.
1567struct TestResult {
1568  size_t output_size;
1569  const Inputs* outputs;
1570};
1571
1572// These headers each contain an array of `TestResult` with the reference output
1573// values. The reference arrays are names `kReference{mnemonic}`.
1574#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-adc.h"
1575#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-adcs.h"
1576#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-add.h"
1577#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-adds.h"
1578#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-and.h"
1579#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-ands.h"
1580#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-bic.h"
1581#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-bics.h"
1582#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-eor.h"
1583#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-eors.h"
1584#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-orr.h"
1585#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-orrs.h"
1586#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rsb.h"
1587#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rsbs.h"
1588#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rsc.h"
1589#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rscs.h"
1590#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-sbc.h"
1591#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-sbcs.h"
1592#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-sub.h"
1593#include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-subs.h"
1594
1595
1596// The maximum number of errors to report in detail for each test.
1597const unsigned kErrorReportLimit = 8;
1598
1599typedef void (MacroAssembler::*Fn)(Condition cond,
1600                                   Register rd,
1601                                   Register rn,
1602                                   const Operand& op);
1603
1604void TestHelper(Fn instruction,
1605                const char* mnemonic,
1606                const TestResult reference[]) {
1607  SETUP();
1608  masm.UseA32();
1609  START();
1610
1611  // Data to compare to `reference`.
1612  TestResult* results[ARRAY_SIZE(kTests)];
1613
1614  // Test cases for memory bound instructions may allocate a buffer and save its
1615  // address in this array.
1616  byte* scratch_memory_buffers[ARRAY_SIZE(kTests)];
1617
1618  // Generate a loop for each element in `kTests`. Each loop tests one specific
1619  // instruction.
1620  for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
1621    // Allocate results on the heap for this test.
1622    results[i] = new TestResult;
1623    results[i]->outputs = new Inputs[kTests[i].input_size];
1624    results[i]->output_size = kTests[i].input_size;
1625
1626    size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size;
1627    VIXL_ASSERT(IsUint32(input_stride));
1628
1629    scratch_memory_buffers[i] = NULL;
1630
1631    Label loop;
1632    UseScratchRegisterScope scratch_registers(&masm);
1633    // Include all registers from r0 ro r12.
1634    scratch_registers.Include(RegisterList(0x1fff));
1635
1636    // Values to pass to the macro-assembler.
1637    Condition cond = kTests[i].operands.cond;
1638    Register rd = kTests[i].operands.rd;
1639    Register rn = kTests[i].operands.rn;
1640    uint32_t immediate = kTests[i].operands.immediate;
1641    Operand op(immediate);
1642    scratch_registers.Exclude(rd);
1643    scratch_registers.Exclude(rn);
1644
1645    // Allocate reserved registers for our own use.
1646    Register input_ptr = scratch_registers.Acquire();
1647    Register input_end = scratch_registers.Acquire();
1648    Register result_ptr = scratch_registers.Acquire();
1649
1650    // Initialize `input_ptr` to the first element and `input_end` the address
1651    // after the array.
1652    __ Mov(input_ptr, Operand::From(kTests[i].inputs));
1653    __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride));
1654    __ Mov(result_ptr, Operand::From(results[i]->outputs));
1655    __ Bind(&loop);
1656
1657    {
1658      UseScratchRegisterScope temp_registers(&masm);
1659      Register nzcv_bits = temp_registers.Acquire();
1660      Register saved_q_bit = temp_registers.Acquire();
1661      // Save the `Q` bit flag.
1662      __ Mrs(saved_q_bit, APSR);
1663      __ And(saved_q_bit, saved_q_bit, QFlag);
1664      // Set the `NZCV` and `Q` flags together.
1665      __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr)));
1666      __ Orr(nzcv_bits, nzcv_bits, saved_q_bit);
1667      __ Msr(APSR_nzcvq, nzcv_bits);
1668    }
1669    __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd)));
1670    __ Ldr(rn, MemOperand(input_ptr, offsetof(Inputs, rn)));
1671
1672    (masm.*instruction)(cond, rd, rn, op);
1673
1674    {
1675      UseScratchRegisterScope temp_registers(&masm);
1676      Register nzcv_bits = temp_registers.Acquire();
1677      __ Mrs(nzcv_bits, APSR);
1678      // Only record the NZCV bits.
1679      __ And(nzcv_bits, nzcv_bits, NZCVFlag);
1680      __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr)));
1681    }
1682    __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd)));
1683    __ Str(rn, MemOperand(result_ptr, offsetof(Inputs, rn)));
1684
1685    // Advance the result pointer.
1686    __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
1687    // Loop back until `input_ptr` is lower than `input_base`.
1688    __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
1689    __ Cmp(input_ptr, input_end);
1690    __ B(ne, &loop);
1691  }
1692
1693  END();
1694
1695  RUN();
1696
1697  if (Test::generate_test_trace()) {
1698    // Print the results.
1699    for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1700      printf("const Inputs kOutputs_%s_%s[] = {\n",
1701             mnemonic,
1702             kTests[i].identifier);
1703      for (size_t j = 0; j < results[i]->output_size; j++) {
1704        printf("  { ");
1705        printf("0x%08" PRIx32, results[i]->outputs[j].apsr);
1706        printf(", ");
1707        printf("0x%08" PRIx32, results[i]->outputs[j].rd);
1708        printf(", ");
1709        printf("0x%08" PRIx32, results[i]->outputs[j].rn);
1710        printf(" },\n");
1711      }
1712      printf("};\n");
1713    }
1714    printf("const TestResult kReference%s[] = {\n", mnemonic);
1715    for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1716      printf("  {\n");
1717      printf("    ARRAY_SIZE(kOutputs_%s_%s),\n",
1718             mnemonic,
1719             kTests[i].identifier);
1720      printf("    kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier);
1721      printf("  },\n");
1722    }
1723    printf("};\n");
1724  } else if (kCheckSimulatorTestResults) {
1725    // Check the results.
1726    unsigned total_error_count = 0;
1727    for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1728      bool instruction_has_errors = false;
1729      for (size_t j = 0; j < kTests[i].input_size; j++) {
1730        uint32_t apsr = results[i]->outputs[j].apsr;
1731        uint32_t rd = results[i]->outputs[j].rd;
1732        uint32_t rn = results[i]->outputs[j].rn;
1733        uint32_t apsr_input = kTests[i].inputs[j].apsr;
1734        uint32_t rd_input = kTests[i].inputs[j].rd;
1735        uint32_t rn_input = kTests[i].inputs[j].rn;
1736        uint32_t apsr_ref = reference[i].outputs[j].apsr;
1737        uint32_t rd_ref = reference[i].outputs[j].rd;
1738        uint32_t rn_ref = reference[i].outputs[j].rn;
1739
1740        if (((apsr != apsr_ref) || (rd != rd_ref) || (rn != rn_ref)) &&
1741            (++total_error_count <= kErrorReportLimit)) {
1742          // Print the instruction once even if it triggered multiple failures.
1743          if (!instruction_has_errors) {
1744            printf("Error(s) when testing \"%s %s\":\n",
1745                   mnemonic,
1746                   kTests[i].operands_description);
1747            instruction_has_errors = true;
1748          }
1749          // Print subsequent errors.
1750          printf("  Input:    ");
1751          printf("0x%08" PRIx32, apsr_input);
1752          printf(", ");
1753          printf("0x%08" PRIx32, rd_input);
1754          printf(", ");
1755          printf("0x%08" PRIx32, rn_input);
1756          printf("\n");
1757          printf("  Expected: ");
1758          printf("0x%08" PRIx32, apsr_ref);
1759          printf(", ");
1760          printf("0x%08" PRIx32, rd_ref);
1761          printf(", ");
1762          printf("0x%08" PRIx32, rn_ref);
1763          printf("\n");
1764          printf("  Found:    ");
1765          printf("0x%08" PRIx32, apsr);
1766          printf(", ");
1767          printf("0x%08" PRIx32, rd);
1768          printf(", ");
1769          printf("0x%08" PRIx32, rn);
1770          printf("\n\n");
1771        }
1772      }
1773    }
1774
1775    if (total_error_count > kErrorReportLimit) {
1776      printf("%u other errors follow.\n",
1777             total_error_count - kErrorReportLimit);
1778    }
1779    VIXL_CHECK(total_error_count == 0);
1780  } else {
1781    VIXL_WARNING("Assembled the code, but did not run anything.\n");
1782  }
1783
1784  for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1785    delete[] results[i]->outputs;
1786    delete results[i];
1787    delete[] scratch_memory_buffers[i];
1788  }
1789
1790  TEARDOWN();
1791}
1792
1793// Instantiate tests for each instruction in the list.
1794// TODO: Remove this limitation by having a sandboxing mechanism.
1795#if defined(VIXL_HOST_POINTER_32)
1796#define TEST(mnemonic)                                                      \
1797  void Test_##mnemonic() {                                                  \
1798    TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \
1799  }                                                                         \
1800  Test test_##mnemonic(                                                     \
1801      "AARCH32_SIMULATOR_COND_RD_RN_OPERAND_CONST_A32_" #mnemonic,          \
1802      &Test_##mnemonic);
1803#else
1804#define TEST(mnemonic)                                             \
1805  void Test_##mnemonic() {                                         \
1806    VIXL_WARNING("This test can only run on a 32-bit host.\n");    \
1807    USE(TestHelper);                                               \
1808  }                                                                \
1809  Test test_##mnemonic(                                            \
1810      "AARCH32_SIMULATOR_COND_RD_RN_OPERAND_CONST_A32_" #mnemonic, \
1811      &Test_##mnemonic);
1812#endif
1813
1814FOREACH_INSTRUCTION(TEST)
1815#undef TEST
1816
1817}  // namespace
1818#endif
1819
1820}  // namespace aarch32
1821}  // namespace vixl
1822