• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016, VIXL authors
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 //   * Redistributions of source code must retain the above copyright notice,
8 //     this list of conditions and the following disclaimer.
9 //   * Redistributions in binary form must reproduce the above copyright notice,
10 //     this list of conditions and the following disclaimer in the documentation
11 //     and/or other materials provided with the distribution.
12 //   * Neither the name of ARM Limited nor the names of its contributors may be
13 //     used to endorse or promote products derived from this software without
14 //     specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 
27 
28 // -----------------------------------------------------------------------------
29 // This file is auto generated from the
30 // test/aarch32/config/template-simulator-aarch32.cc.in template file using
31 // tools/generate_tests.py.
32 //
33 // PLEASE DO NOT EDIT.
34 // -----------------------------------------------------------------------------
35 
36 
37 #include "test-runner.h"
38 
39 #include "test-utils.h"
40 #include "test-utils-aarch32.h"
41 
42 #include "aarch32/assembler-aarch32.h"
43 #include "aarch32/disasm-aarch32.h"
44 #include "aarch32/macro-assembler-aarch32.h"
45 
46 #define __ masm.
47 #define BUF_SIZE (4096)
48 
49 #ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
50 // Run tests with the simulator.
51 
52 #define SETUP() MacroAssembler masm(BUF_SIZE)
53 
54 #define START() masm.GetBuffer()->Reset()
55 
56 #define END() \
57   __ Hlt(0);  \
58   __ FinalizeCode();
59 
60 // TODO: Run the tests in the simulator.
61 #define RUN()
62 
63 #else  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32.
64 
65 #define SETUP()                  \
66   MacroAssembler masm(BUF_SIZE); \
67   UseScratchRegisterScope harness_scratch;
68 
69 #define START()                 \
70   harness_scratch.Open(&masm);  \
71   harness_scratch.ExcludeAll(); \
72   masm.GetBuffer()->Reset();    \
73   __ Push(r4);                  \
74   __ Push(r5);                  \
75   __ Push(r6);                  \
76   __ Push(r7);                  \
77   __ Push(r8);                  \
78   __ Push(r9);                  \
79   __ Push(r10);                 \
80   __ Push(r11);                 \
81   __ Push(lr);                  \
82   harness_scratch.Include(ip);
83 
84 #define END()                  \
85   harness_scratch.Exclude(ip); \
86   __ Pop(lr);                  \
87   __ Pop(r11);                 \
88   __ Pop(r10);                 \
89   __ Pop(r9);                  \
90   __ Pop(r8);                  \
91   __ Pop(r7);                  \
92   __ Pop(r6);                  \
93   __ Pop(r5);                  \
94   __ Pop(r4);                  \
95   __ Bx(lr);                   \
96   __ FinalizeCode();           \
97   harness_scratch.Close();
98 
99 #define RUN()                                                 \
100   {                                                           \
101     int pcs_offset = masm.IsUsingT32() ? 1 : 0;               \
102     masm.GetBuffer()->SetExecutable();                        \
103     ExecuteMemory(masm.GetBuffer()->GetStartAddress<byte*>(), \
104                   masm.GetSizeOfCodeGenerated(),              \
105                   pcs_offset);                                \
106     masm.GetBuffer()->SetWritable();                          \
107   }
108 
109 #endif  // ifdef VIXL_INCLUDE_SIMULATOR_AARCH32
110 
111 namespace vixl {
112 namespace aarch32 {
113 
114 // List of instruction encodings:
115 #define FOREACH_INSTRUCTION(M) \
116   M(Cmp)                       \
117   M(Mov)                       \
118   M(Movs)
119 
120 
121 // The following definitions are defined again in each generated test, therefore
122 // we need to place them in an anomymous namespace. It expresses that they are
123 // local to this file only, and the compiler is not allowed to share these types
124 // across test files during template instantiation. Specifically, `Operands` and
125 // `Inputs` have various layouts across generated tests so they absolutely
126 // cannot be shared.
127 
128 #ifdef VIXL_INCLUDE_TARGET_T32
129 namespace {
130 
131 // Values to be passed to the assembler to produce the instruction under test.
132 struct Operands {
133   Condition cond;
134   Register rd;
135   int32_t immediate;
136 };
137 
138 // Input data to feed to the instruction.
139 struct Inputs {
140   uint32_t apsr;
141   uint32_t rd;
142 };
143 
144 // This structure contains all input data needed to test one specific encoding.
145 // It used to generate a loop over an instruction.
146 struct TestLoopData {
147   // The `operands` fields represents the values to pass to the assembler to
148   // produce the instruction.
149   Operands operands;
150   // Description of the operands, used for error reporting.
151   const char* operands_description;
152   // Unique identifier, used for generating traces.
153   const char* identifier;
154   // Array of values to be fed to the instruction.
155   size_t input_size;
156   const Inputs* inputs;
157 };
158 
159 static const Inputs kCondition[] = {{NFlag, 0xabababab},
160                                     {ZFlag, 0xabababab},
161                                     {CFlag, 0xabababab},
162                                     {VFlag, 0xabababab},
163                                     {NZFlag, 0xabababab},
164                                     {NCFlag, 0xabababab},
165                                     {NVFlag, 0xabababab},
166                                     {ZCFlag, 0xabababab},
167                                     {ZVFlag, 0xabababab},
168                                     {CVFlag, 0xabababab},
169                                     {NZCFlag, 0xabababab},
170                                     {NZVFlag, 0xabababab},
171                                     {NCVFlag, 0xabababab},
172                                     {ZCVFlag, 0xabababab},
173                                     {NZCVFlag, 0xabababab}};
174 
175 static const Inputs kModifiedImmediate[] =
176     {{NoFlag, 0x00000000}, {NoFlag, 0x00000001}, {NoFlag, 0x00000002},
177      {NoFlag, 0x00000020}, {NoFlag, 0x0000007d}, {NoFlag, 0x0000007e},
178      {NoFlag, 0x0000007f}, {NoFlag, 0x00007ffd}, {NoFlag, 0x00007ffe},
179      {NoFlag, 0x00007fff}, {NoFlag, 0x33333333}, {NoFlag, 0x55555555},
180      {NoFlag, 0x7ffffffd}, {NoFlag, 0x7ffffffe}, {NoFlag, 0x7fffffff},
181      {NoFlag, 0x80000000}, {NoFlag, 0x80000001}, {NoFlag, 0xaaaaaaaa},
182      {NoFlag, 0xcccccccc}, {NoFlag, 0xffff8000}, {NoFlag, 0xffff8001},
183      {NoFlag, 0xffff8002}, {NoFlag, 0xffff8003}, {NoFlag, 0xffffff80},
184      {NoFlag, 0xffffff81}, {NoFlag, 0xffffff82}, {NoFlag, 0xffffff83},
185      {NoFlag, 0xffffffe0}, {NoFlag, 0xfffffffd}, {NoFlag, 0xfffffffe},
186      {NoFlag, 0xffffffff}};
187 
188 
189 // A loop will be generated for each element of this array.
190 const TestLoopData kTests[] = {{{eq, r0, 0},
191                                 "eq r0 0",
192                                 "Condition_eq_r0_0",
193                                 ARRAY_SIZE(kCondition),
194                                 kCondition},
195                                {{ne, r0, 0},
196                                 "ne r0 0",
197                                 "Condition_ne_r0_0",
198                                 ARRAY_SIZE(kCondition),
199                                 kCondition},
200                                {{cs, r0, 0},
201                                 "cs r0 0",
202                                 "Condition_cs_r0_0",
203                                 ARRAY_SIZE(kCondition),
204                                 kCondition},
205                                {{cc, r0, 0},
206                                 "cc r0 0",
207                                 "Condition_cc_r0_0",
208                                 ARRAY_SIZE(kCondition),
209                                 kCondition},
210                                {{mi, r0, 0},
211                                 "mi r0 0",
212                                 "Condition_mi_r0_0",
213                                 ARRAY_SIZE(kCondition),
214                                 kCondition},
215                                {{pl, r0, 0},
216                                 "pl r0 0",
217                                 "Condition_pl_r0_0",
218                                 ARRAY_SIZE(kCondition),
219                                 kCondition},
220                                {{vs, r0, 0},
221                                 "vs r0 0",
222                                 "Condition_vs_r0_0",
223                                 ARRAY_SIZE(kCondition),
224                                 kCondition},
225                                {{vc, r0, 0},
226                                 "vc r0 0",
227                                 "Condition_vc_r0_0",
228                                 ARRAY_SIZE(kCondition),
229                                 kCondition},
230                                {{hi, r0, 0},
231                                 "hi r0 0",
232                                 "Condition_hi_r0_0",
233                                 ARRAY_SIZE(kCondition),
234                                 kCondition},
235                                {{ls, r0, 0},
236                                 "ls r0 0",
237                                 "Condition_ls_r0_0",
238                                 ARRAY_SIZE(kCondition),
239                                 kCondition},
240                                {{ge, r0, 0},
241                                 "ge r0 0",
242                                 "Condition_ge_r0_0",
243                                 ARRAY_SIZE(kCondition),
244                                 kCondition},
245                                {{lt, r0, 0},
246                                 "lt r0 0",
247                                 "Condition_lt_r0_0",
248                                 ARRAY_SIZE(kCondition),
249                                 kCondition},
250                                {{gt, r0, 0},
251                                 "gt r0 0",
252                                 "Condition_gt_r0_0",
253                                 ARRAY_SIZE(kCondition),
254                                 kCondition},
255                                {{le, r0, 0},
256                                 "le r0 0",
257                                 "Condition_le_r0_0",
258                                 ARRAY_SIZE(kCondition),
259                                 kCondition},
260                                {{al, r0, 0},
261                                 "al r0 0",
262                                 "Condition_al_r0_0",
263                                 ARRAY_SIZE(kCondition),
264                                 kCondition},
265                                {{al, r0, 0},
266                                 "al r0 0",
267                                 "ModifiedImmediate_al_r0_0",
268                                 ARRAY_SIZE(kModifiedImmediate),
269                                 kModifiedImmediate},
270                                {{al, r0, 1},
271                                 "al r0 1",
272                                 "ModifiedImmediate_al_r0_1",
273                                 ARRAY_SIZE(kModifiedImmediate),
274                                 kModifiedImmediate},
275                                {{al, r0, 2},
276                                 "al r0 2",
277                                 "ModifiedImmediate_al_r0_2",
278                                 ARRAY_SIZE(kModifiedImmediate),
279                                 kModifiedImmediate},
280                                {{al, r0, 3},
281                                 "al r0 3",
282                                 "ModifiedImmediate_al_r0_3",
283                                 ARRAY_SIZE(kModifiedImmediate),
284                                 kModifiedImmediate},
285                                {{al, r0, 4},
286                                 "al r0 4",
287                                 "ModifiedImmediate_al_r0_4",
288                                 ARRAY_SIZE(kModifiedImmediate),
289                                 kModifiedImmediate},
290                                {{al, r0, 5},
291                                 "al r0 5",
292                                 "ModifiedImmediate_al_r0_5",
293                                 ARRAY_SIZE(kModifiedImmediate),
294                                 kModifiedImmediate},
295                                {{al, r0, 6},
296                                 "al r0 6",
297                                 "ModifiedImmediate_al_r0_6",
298                                 ARRAY_SIZE(kModifiedImmediate),
299                                 kModifiedImmediate},
300                                {{al, r0, 7},
301                                 "al r0 7",
302                                 "ModifiedImmediate_al_r0_7",
303                                 ARRAY_SIZE(kModifiedImmediate),
304                                 kModifiedImmediate},
305                                {{al, r0, 8},
306                                 "al r0 8",
307                                 "ModifiedImmediate_al_r0_8",
308                                 ARRAY_SIZE(kModifiedImmediate),
309                                 kModifiedImmediate},
310                                {{al, r0, 9},
311                                 "al r0 9",
312                                 "ModifiedImmediate_al_r0_9",
313                                 ARRAY_SIZE(kModifiedImmediate),
314                                 kModifiedImmediate},
315                                {{al, r0, 10},
316                                 "al r0 10",
317                                 "ModifiedImmediate_al_r0_10",
318                                 ARRAY_SIZE(kModifiedImmediate),
319                                 kModifiedImmediate},
320                                {{al, r0, 11},
321                                 "al r0 11",
322                                 "ModifiedImmediate_al_r0_11",
323                                 ARRAY_SIZE(kModifiedImmediate),
324                                 kModifiedImmediate},
325                                {{al, r0, 12},
326                                 "al r0 12",
327                                 "ModifiedImmediate_al_r0_12",
328                                 ARRAY_SIZE(kModifiedImmediate),
329                                 kModifiedImmediate},
330                                {{al, r0, 13},
331                                 "al r0 13",
332                                 "ModifiedImmediate_al_r0_13",
333                                 ARRAY_SIZE(kModifiedImmediate),
334                                 kModifiedImmediate},
335                                {{al, r0, 14},
336                                 "al r0 14",
337                                 "ModifiedImmediate_al_r0_14",
338                                 ARRAY_SIZE(kModifiedImmediate),
339                                 kModifiedImmediate},
340                                {{al, r0, 15},
341                                 "al r0 15",
342                                 "ModifiedImmediate_al_r0_15",
343                                 ARRAY_SIZE(kModifiedImmediate),
344                                 kModifiedImmediate},
345                                {{al, r0, 16},
346                                 "al r0 16",
347                                 "ModifiedImmediate_al_r0_16",
348                                 ARRAY_SIZE(kModifiedImmediate),
349                                 kModifiedImmediate},
350                                {{al, r0, 17},
351                                 "al r0 17",
352                                 "ModifiedImmediate_al_r0_17",
353                                 ARRAY_SIZE(kModifiedImmediate),
354                                 kModifiedImmediate},
355                                {{al, r0, 18},
356                                 "al r0 18",
357                                 "ModifiedImmediate_al_r0_18",
358                                 ARRAY_SIZE(kModifiedImmediate),
359                                 kModifiedImmediate},
360                                {{al, r0, 19},
361                                 "al r0 19",
362                                 "ModifiedImmediate_al_r0_19",
363                                 ARRAY_SIZE(kModifiedImmediate),
364                                 kModifiedImmediate},
365                                {{al, r0, 20},
366                                 "al r0 20",
367                                 "ModifiedImmediate_al_r0_20",
368                                 ARRAY_SIZE(kModifiedImmediate),
369                                 kModifiedImmediate},
370                                {{al, r0, 21},
371                                 "al r0 21",
372                                 "ModifiedImmediate_al_r0_21",
373                                 ARRAY_SIZE(kModifiedImmediate),
374                                 kModifiedImmediate},
375                                {{al, r0, 22},
376                                 "al r0 22",
377                                 "ModifiedImmediate_al_r0_22",
378                                 ARRAY_SIZE(kModifiedImmediate),
379                                 kModifiedImmediate},
380                                {{al, r0, 23},
381                                 "al r0 23",
382                                 "ModifiedImmediate_al_r0_23",
383                                 ARRAY_SIZE(kModifiedImmediate),
384                                 kModifiedImmediate},
385                                {{al, r0, 24},
386                                 "al r0 24",
387                                 "ModifiedImmediate_al_r0_24",
388                                 ARRAY_SIZE(kModifiedImmediate),
389                                 kModifiedImmediate},
390                                {{al, r0, 25},
391                                 "al r0 25",
392                                 "ModifiedImmediate_al_r0_25",
393                                 ARRAY_SIZE(kModifiedImmediate),
394                                 kModifiedImmediate},
395                                {{al, r0, 26},
396                                 "al r0 26",
397                                 "ModifiedImmediate_al_r0_26",
398                                 ARRAY_SIZE(kModifiedImmediate),
399                                 kModifiedImmediate},
400                                {{al, r0, 27},
401                                 "al r0 27",
402                                 "ModifiedImmediate_al_r0_27",
403                                 ARRAY_SIZE(kModifiedImmediate),
404                                 kModifiedImmediate},
405                                {{al, r0, 28},
406                                 "al r0 28",
407                                 "ModifiedImmediate_al_r0_28",
408                                 ARRAY_SIZE(kModifiedImmediate),
409                                 kModifiedImmediate},
410                                {{al, r0, 29},
411                                 "al r0 29",
412                                 "ModifiedImmediate_al_r0_29",
413                                 ARRAY_SIZE(kModifiedImmediate),
414                                 kModifiedImmediate},
415                                {{al, r0, 30},
416                                 "al r0 30",
417                                 "ModifiedImmediate_al_r0_30",
418                                 ARRAY_SIZE(kModifiedImmediate),
419                                 kModifiedImmediate},
420                                {{al, r0, 31},
421                                 "al r0 31",
422                                 "ModifiedImmediate_al_r0_31",
423                                 ARRAY_SIZE(kModifiedImmediate),
424                                 kModifiedImmediate},
425                                {{al, r0, 32},
426                                 "al r0 32",
427                                 "ModifiedImmediate_al_r0_32",
428                                 ARRAY_SIZE(kModifiedImmediate),
429                                 kModifiedImmediate},
430                                {{al, r0, 33},
431                                 "al r0 33",
432                                 "ModifiedImmediate_al_r0_33",
433                                 ARRAY_SIZE(kModifiedImmediate),
434                                 kModifiedImmediate},
435                                {{al, r0, 34},
436                                 "al r0 34",
437                                 "ModifiedImmediate_al_r0_34",
438                                 ARRAY_SIZE(kModifiedImmediate),
439                                 kModifiedImmediate},
440                                {{al, r0, 35},
441                                 "al r0 35",
442                                 "ModifiedImmediate_al_r0_35",
443                                 ARRAY_SIZE(kModifiedImmediate),
444                                 kModifiedImmediate},
445                                {{al, r0, 36},
446                                 "al r0 36",
447                                 "ModifiedImmediate_al_r0_36",
448                                 ARRAY_SIZE(kModifiedImmediate),
449                                 kModifiedImmediate},
450                                {{al, r0, 37},
451                                 "al r0 37",
452                                 "ModifiedImmediate_al_r0_37",
453                                 ARRAY_SIZE(kModifiedImmediate),
454                                 kModifiedImmediate},
455                                {{al, r0, 38},
456                                 "al r0 38",
457                                 "ModifiedImmediate_al_r0_38",
458                                 ARRAY_SIZE(kModifiedImmediate),
459                                 kModifiedImmediate},
460                                {{al, r0, 39},
461                                 "al r0 39",
462                                 "ModifiedImmediate_al_r0_39",
463                                 ARRAY_SIZE(kModifiedImmediate),
464                                 kModifiedImmediate},
465                                {{al, r0, 40},
466                                 "al r0 40",
467                                 "ModifiedImmediate_al_r0_40",
468                                 ARRAY_SIZE(kModifiedImmediate),
469                                 kModifiedImmediate},
470                                {{al, r0, 41},
471                                 "al r0 41",
472                                 "ModifiedImmediate_al_r0_41",
473                                 ARRAY_SIZE(kModifiedImmediate),
474                                 kModifiedImmediate},
475                                {{al, r0, 42},
476                                 "al r0 42",
477                                 "ModifiedImmediate_al_r0_42",
478                                 ARRAY_SIZE(kModifiedImmediate),
479                                 kModifiedImmediate},
480                                {{al, r0, 43},
481                                 "al r0 43",
482                                 "ModifiedImmediate_al_r0_43",
483                                 ARRAY_SIZE(kModifiedImmediate),
484                                 kModifiedImmediate},
485                                {{al, r0, 44},
486                                 "al r0 44",
487                                 "ModifiedImmediate_al_r0_44",
488                                 ARRAY_SIZE(kModifiedImmediate),
489                                 kModifiedImmediate},
490                                {{al, r0, 45},
491                                 "al r0 45",
492                                 "ModifiedImmediate_al_r0_45",
493                                 ARRAY_SIZE(kModifiedImmediate),
494                                 kModifiedImmediate},
495                                {{al, r0, 46},
496                                 "al r0 46",
497                                 "ModifiedImmediate_al_r0_46",
498                                 ARRAY_SIZE(kModifiedImmediate),
499                                 kModifiedImmediate},
500                                {{al, r0, 47},
501                                 "al r0 47",
502                                 "ModifiedImmediate_al_r0_47",
503                                 ARRAY_SIZE(kModifiedImmediate),
504                                 kModifiedImmediate},
505                                {{al, r0, 48},
506                                 "al r0 48",
507                                 "ModifiedImmediate_al_r0_48",
508                                 ARRAY_SIZE(kModifiedImmediate),
509                                 kModifiedImmediate},
510                                {{al, r0, 49},
511                                 "al r0 49",
512                                 "ModifiedImmediate_al_r0_49",
513                                 ARRAY_SIZE(kModifiedImmediate),
514                                 kModifiedImmediate},
515                                {{al, r0, 50},
516                                 "al r0 50",
517                                 "ModifiedImmediate_al_r0_50",
518                                 ARRAY_SIZE(kModifiedImmediate),
519                                 kModifiedImmediate},
520                                {{al, r0, 51},
521                                 "al r0 51",
522                                 "ModifiedImmediate_al_r0_51",
523                                 ARRAY_SIZE(kModifiedImmediate),
524                                 kModifiedImmediate},
525                                {{al, r0, 52},
526                                 "al r0 52",
527                                 "ModifiedImmediate_al_r0_52",
528                                 ARRAY_SIZE(kModifiedImmediate),
529                                 kModifiedImmediate},
530                                {{al, r0, 53},
531                                 "al r0 53",
532                                 "ModifiedImmediate_al_r0_53",
533                                 ARRAY_SIZE(kModifiedImmediate),
534                                 kModifiedImmediate},
535                                {{al, r0, 54},
536                                 "al r0 54",
537                                 "ModifiedImmediate_al_r0_54",
538                                 ARRAY_SIZE(kModifiedImmediate),
539                                 kModifiedImmediate},
540                                {{al, r0, 55},
541                                 "al r0 55",
542                                 "ModifiedImmediate_al_r0_55",
543                                 ARRAY_SIZE(kModifiedImmediate),
544                                 kModifiedImmediate},
545                                {{al, r0, 56},
546                                 "al r0 56",
547                                 "ModifiedImmediate_al_r0_56",
548                                 ARRAY_SIZE(kModifiedImmediate),
549                                 kModifiedImmediate},
550                                {{al, r0, 57},
551                                 "al r0 57",
552                                 "ModifiedImmediate_al_r0_57",
553                                 ARRAY_SIZE(kModifiedImmediate),
554                                 kModifiedImmediate},
555                                {{al, r0, 58},
556                                 "al r0 58",
557                                 "ModifiedImmediate_al_r0_58",
558                                 ARRAY_SIZE(kModifiedImmediate),
559                                 kModifiedImmediate},
560                                {{al, r0, 59},
561                                 "al r0 59",
562                                 "ModifiedImmediate_al_r0_59",
563                                 ARRAY_SIZE(kModifiedImmediate),
564                                 kModifiedImmediate},
565                                {{al, r0, 60},
566                                 "al r0 60",
567                                 "ModifiedImmediate_al_r0_60",
568                                 ARRAY_SIZE(kModifiedImmediate),
569                                 kModifiedImmediate},
570                                {{al, r0, 61},
571                                 "al r0 61",
572                                 "ModifiedImmediate_al_r0_61",
573                                 ARRAY_SIZE(kModifiedImmediate),
574                                 kModifiedImmediate},
575                                {{al, r0, 62},
576                                 "al r0 62",
577                                 "ModifiedImmediate_al_r0_62",
578                                 ARRAY_SIZE(kModifiedImmediate),
579                                 kModifiedImmediate},
580                                {{al, r0, 63},
581                                 "al r0 63",
582                                 "ModifiedImmediate_al_r0_63",
583                                 ARRAY_SIZE(kModifiedImmediate),
584                                 kModifiedImmediate},
585                                {{al, r0, 64},
586                                 "al r0 64",
587                                 "ModifiedImmediate_al_r0_64",
588                                 ARRAY_SIZE(kModifiedImmediate),
589                                 kModifiedImmediate},
590                                {{al, r0, 65},
591                                 "al r0 65",
592                                 "ModifiedImmediate_al_r0_65",
593                                 ARRAY_SIZE(kModifiedImmediate),
594                                 kModifiedImmediate},
595                                {{al, r0, 66},
596                                 "al r0 66",
597                                 "ModifiedImmediate_al_r0_66",
598                                 ARRAY_SIZE(kModifiedImmediate),
599                                 kModifiedImmediate},
600                                {{al, r0, 67},
601                                 "al r0 67",
602                                 "ModifiedImmediate_al_r0_67",
603                                 ARRAY_SIZE(kModifiedImmediate),
604                                 kModifiedImmediate},
605                                {{al, r0, 68},
606                                 "al r0 68",
607                                 "ModifiedImmediate_al_r0_68",
608                                 ARRAY_SIZE(kModifiedImmediate),
609                                 kModifiedImmediate},
610                                {{al, r0, 69},
611                                 "al r0 69",
612                                 "ModifiedImmediate_al_r0_69",
613                                 ARRAY_SIZE(kModifiedImmediate),
614                                 kModifiedImmediate},
615                                {{al, r0, 70},
616                                 "al r0 70",
617                                 "ModifiedImmediate_al_r0_70",
618                                 ARRAY_SIZE(kModifiedImmediate),
619                                 kModifiedImmediate},
620                                {{al, r0, 71},
621                                 "al r0 71",
622                                 "ModifiedImmediate_al_r0_71",
623                                 ARRAY_SIZE(kModifiedImmediate),
624                                 kModifiedImmediate},
625                                {{al, r0, 72},
626                                 "al r0 72",
627                                 "ModifiedImmediate_al_r0_72",
628                                 ARRAY_SIZE(kModifiedImmediate),
629                                 kModifiedImmediate},
630                                {{al, r0, 73},
631                                 "al r0 73",
632                                 "ModifiedImmediate_al_r0_73",
633                                 ARRAY_SIZE(kModifiedImmediate),
634                                 kModifiedImmediate},
635                                {{al, r0, 74},
636                                 "al r0 74",
637                                 "ModifiedImmediate_al_r0_74",
638                                 ARRAY_SIZE(kModifiedImmediate),
639                                 kModifiedImmediate},
640                                {{al, r0, 75},
641                                 "al r0 75",
642                                 "ModifiedImmediate_al_r0_75",
643                                 ARRAY_SIZE(kModifiedImmediate),
644                                 kModifiedImmediate},
645                                {{al, r0, 76},
646                                 "al r0 76",
647                                 "ModifiedImmediate_al_r0_76",
648                                 ARRAY_SIZE(kModifiedImmediate),
649                                 kModifiedImmediate},
650                                {{al, r0, 77},
651                                 "al r0 77",
652                                 "ModifiedImmediate_al_r0_77",
653                                 ARRAY_SIZE(kModifiedImmediate),
654                                 kModifiedImmediate},
655                                {{al, r0, 78},
656                                 "al r0 78",
657                                 "ModifiedImmediate_al_r0_78",
658                                 ARRAY_SIZE(kModifiedImmediate),
659                                 kModifiedImmediate},
660                                {{al, r0, 79},
661                                 "al r0 79",
662                                 "ModifiedImmediate_al_r0_79",
663                                 ARRAY_SIZE(kModifiedImmediate),
664                                 kModifiedImmediate},
665                                {{al, r0, 80},
666                                 "al r0 80",
667                                 "ModifiedImmediate_al_r0_80",
668                                 ARRAY_SIZE(kModifiedImmediate),
669                                 kModifiedImmediate},
670                                {{al, r0, 81},
671                                 "al r0 81",
672                                 "ModifiedImmediate_al_r0_81",
673                                 ARRAY_SIZE(kModifiedImmediate),
674                                 kModifiedImmediate},
675                                {{al, r0, 82},
676                                 "al r0 82",
677                                 "ModifiedImmediate_al_r0_82",
678                                 ARRAY_SIZE(kModifiedImmediate),
679                                 kModifiedImmediate},
680                                {{al, r0, 83},
681                                 "al r0 83",
682                                 "ModifiedImmediate_al_r0_83",
683                                 ARRAY_SIZE(kModifiedImmediate),
684                                 kModifiedImmediate},
685                                {{al, r0, 84},
686                                 "al r0 84",
687                                 "ModifiedImmediate_al_r0_84",
688                                 ARRAY_SIZE(kModifiedImmediate),
689                                 kModifiedImmediate},
690                                {{al, r0, 85},
691                                 "al r0 85",
692                                 "ModifiedImmediate_al_r0_85",
693                                 ARRAY_SIZE(kModifiedImmediate),
694                                 kModifiedImmediate},
695                                {{al, r0, 86},
696                                 "al r0 86",
697                                 "ModifiedImmediate_al_r0_86",
698                                 ARRAY_SIZE(kModifiedImmediate),
699                                 kModifiedImmediate},
700                                {{al, r0, 87},
701                                 "al r0 87",
702                                 "ModifiedImmediate_al_r0_87",
703                                 ARRAY_SIZE(kModifiedImmediate),
704                                 kModifiedImmediate},
705                                {{al, r0, 88},
706                                 "al r0 88",
707                                 "ModifiedImmediate_al_r0_88",
708                                 ARRAY_SIZE(kModifiedImmediate),
709                                 kModifiedImmediate},
710                                {{al, r0, 89},
711                                 "al r0 89",
712                                 "ModifiedImmediate_al_r0_89",
713                                 ARRAY_SIZE(kModifiedImmediate),
714                                 kModifiedImmediate},
715                                {{al, r0, 90},
716                                 "al r0 90",
717                                 "ModifiedImmediate_al_r0_90",
718                                 ARRAY_SIZE(kModifiedImmediate),
719                                 kModifiedImmediate},
720                                {{al, r0, 91},
721                                 "al r0 91",
722                                 "ModifiedImmediate_al_r0_91",
723                                 ARRAY_SIZE(kModifiedImmediate),
724                                 kModifiedImmediate},
725                                {{al, r0, 92},
726                                 "al r0 92",
727                                 "ModifiedImmediate_al_r0_92",
728                                 ARRAY_SIZE(kModifiedImmediate),
729                                 kModifiedImmediate},
730                                {{al, r0, 93},
731                                 "al r0 93",
732                                 "ModifiedImmediate_al_r0_93",
733                                 ARRAY_SIZE(kModifiedImmediate),
734                                 kModifiedImmediate},
735                                {{al, r0, 94},
736                                 "al r0 94",
737                                 "ModifiedImmediate_al_r0_94",
738                                 ARRAY_SIZE(kModifiedImmediate),
739                                 kModifiedImmediate},
740                                {{al, r0, 95},
741                                 "al r0 95",
742                                 "ModifiedImmediate_al_r0_95",
743                                 ARRAY_SIZE(kModifiedImmediate),
744                                 kModifiedImmediate},
745                                {{al, r0, 96},
746                                 "al r0 96",
747                                 "ModifiedImmediate_al_r0_96",
748                                 ARRAY_SIZE(kModifiedImmediate),
749                                 kModifiedImmediate},
750                                {{al, r0, 97},
751                                 "al r0 97",
752                                 "ModifiedImmediate_al_r0_97",
753                                 ARRAY_SIZE(kModifiedImmediate),
754                                 kModifiedImmediate},
755                                {{al, r0, 98},
756                                 "al r0 98",
757                                 "ModifiedImmediate_al_r0_98",
758                                 ARRAY_SIZE(kModifiedImmediate),
759                                 kModifiedImmediate},
760                                {{al, r0, 99},
761                                 "al r0 99",
762                                 "ModifiedImmediate_al_r0_99",
763                                 ARRAY_SIZE(kModifiedImmediate),
764                                 kModifiedImmediate},
765                                {{al, r0, 100},
766                                 "al r0 100",
767                                 "ModifiedImmediate_al_r0_100",
768                                 ARRAY_SIZE(kModifiedImmediate),
769                                 kModifiedImmediate},
770                                {{al, r0, 101},
771                                 "al r0 101",
772                                 "ModifiedImmediate_al_r0_101",
773                                 ARRAY_SIZE(kModifiedImmediate),
774                                 kModifiedImmediate},
775                                {{al, r0, 102},
776                                 "al r0 102",
777                                 "ModifiedImmediate_al_r0_102",
778                                 ARRAY_SIZE(kModifiedImmediate),
779                                 kModifiedImmediate},
780                                {{al, r0, 103},
781                                 "al r0 103",
782                                 "ModifiedImmediate_al_r0_103",
783                                 ARRAY_SIZE(kModifiedImmediate),
784                                 kModifiedImmediate},
785                                {{al, r0, 104},
786                                 "al r0 104",
787                                 "ModifiedImmediate_al_r0_104",
788                                 ARRAY_SIZE(kModifiedImmediate),
789                                 kModifiedImmediate},
790                                {{al, r0, 105},
791                                 "al r0 105",
792                                 "ModifiedImmediate_al_r0_105",
793                                 ARRAY_SIZE(kModifiedImmediate),
794                                 kModifiedImmediate},
795                                {{al, r0, 106},
796                                 "al r0 106",
797                                 "ModifiedImmediate_al_r0_106",
798                                 ARRAY_SIZE(kModifiedImmediate),
799                                 kModifiedImmediate},
800                                {{al, r0, 107},
801                                 "al r0 107",
802                                 "ModifiedImmediate_al_r0_107",
803                                 ARRAY_SIZE(kModifiedImmediate),
804                                 kModifiedImmediate},
805                                {{al, r0, 108},
806                                 "al r0 108",
807                                 "ModifiedImmediate_al_r0_108",
808                                 ARRAY_SIZE(kModifiedImmediate),
809                                 kModifiedImmediate},
810                                {{al, r0, 109},
811                                 "al r0 109",
812                                 "ModifiedImmediate_al_r0_109",
813                                 ARRAY_SIZE(kModifiedImmediate),
814                                 kModifiedImmediate},
815                                {{al, r0, 110},
816                                 "al r0 110",
817                                 "ModifiedImmediate_al_r0_110",
818                                 ARRAY_SIZE(kModifiedImmediate),
819                                 kModifiedImmediate},
820                                {{al, r0, 111},
821                                 "al r0 111",
822                                 "ModifiedImmediate_al_r0_111",
823                                 ARRAY_SIZE(kModifiedImmediate),
824                                 kModifiedImmediate},
825                                {{al, r0, 112},
826                                 "al r0 112",
827                                 "ModifiedImmediate_al_r0_112",
828                                 ARRAY_SIZE(kModifiedImmediate),
829                                 kModifiedImmediate},
830                                {{al, r0, 113},
831                                 "al r0 113",
832                                 "ModifiedImmediate_al_r0_113",
833                                 ARRAY_SIZE(kModifiedImmediate),
834                                 kModifiedImmediate},
835                                {{al, r0, 114},
836                                 "al r0 114",
837                                 "ModifiedImmediate_al_r0_114",
838                                 ARRAY_SIZE(kModifiedImmediate),
839                                 kModifiedImmediate},
840                                {{al, r0, 115},
841                                 "al r0 115",
842                                 "ModifiedImmediate_al_r0_115",
843                                 ARRAY_SIZE(kModifiedImmediate),
844                                 kModifiedImmediate},
845                                {{al, r0, 116},
846                                 "al r0 116",
847                                 "ModifiedImmediate_al_r0_116",
848                                 ARRAY_SIZE(kModifiedImmediate),
849                                 kModifiedImmediate},
850                                {{al, r0, 117},
851                                 "al r0 117",
852                                 "ModifiedImmediate_al_r0_117",
853                                 ARRAY_SIZE(kModifiedImmediate),
854                                 kModifiedImmediate},
855                                {{al, r0, 118},
856                                 "al r0 118",
857                                 "ModifiedImmediate_al_r0_118",
858                                 ARRAY_SIZE(kModifiedImmediate),
859                                 kModifiedImmediate},
860                                {{al, r0, 119},
861                                 "al r0 119",
862                                 "ModifiedImmediate_al_r0_119",
863                                 ARRAY_SIZE(kModifiedImmediate),
864                                 kModifiedImmediate},
865                                {{al, r0, 120},
866                                 "al r0 120",
867                                 "ModifiedImmediate_al_r0_120",
868                                 ARRAY_SIZE(kModifiedImmediate),
869                                 kModifiedImmediate},
870                                {{al, r0, 121},
871                                 "al r0 121",
872                                 "ModifiedImmediate_al_r0_121",
873                                 ARRAY_SIZE(kModifiedImmediate),
874                                 kModifiedImmediate},
875                                {{al, r0, 122},
876                                 "al r0 122",
877                                 "ModifiedImmediate_al_r0_122",
878                                 ARRAY_SIZE(kModifiedImmediate),
879                                 kModifiedImmediate},
880                                {{al, r0, 123},
881                                 "al r0 123",
882                                 "ModifiedImmediate_al_r0_123",
883                                 ARRAY_SIZE(kModifiedImmediate),
884                                 kModifiedImmediate},
885                                {{al, r0, 124},
886                                 "al r0 124",
887                                 "ModifiedImmediate_al_r0_124",
888                                 ARRAY_SIZE(kModifiedImmediate),
889                                 kModifiedImmediate},
890                                {{al, r0, 125},
891                                 "al r0 125",
892                                 "ModifiedImmediate_al_r0_125",
893                                 ARRAY_SIZE(kModifiedImmediate),
894                                 kModifiedImmediate},
895                                {{al, r0, 126},
896                                 "al r0 126",
897                                 "ModifiedImmediate_al_r0_126",
898                                 ARRAY_SIZE(kModifiedImmediate),
899                                 kModifiedImmediate},
900                                {{al, r0, 127},
901                                 "al r0 127",
902                                 "ModifiedImmediate_al_r0_127",
903                                 ARRAY_SIZE(kModifiedImmediate),
904                                 kModifiedImmediate},
905                                {{al, r0, 128},
906                                 "al r0 128",
907                                 "ModifiedImmediate_al_r0_128",
908                                 ARRAY_SIZE(kModifiedImmediate),
909                                 kModifiedImmediate},
910                                {{al, r0, 129},
911                                 "al r0 129",
912                                 "ModifiedImmediate_al_r0_129",
913                                 ARRAY_SIZE(kModifiedImmediate),
914                                 kModifiedImmediate},
915                                {{al, r0, 130},
916                                 "al r0 130",
917                                 "ModifiedImmediate_al_r0_130",
918                                 ARRAY_SIZE(kModifiedImmediate),
919                                 kModifiedImmediate},
920                                {{al, r0, 131},
921                                 "al r0 131",
922                                 "ModifiedImmediate_al_r0_131",
923                                 ARRAY_SIZE(kModifiedImmediate),
924                                 kModifiedImmediate},
925                                {{al, r0, 132},
926                                 "al r0 132",
927                                 "ModifiedImmediate_al_r0_132",
928                                 ARRAY_SIZE(kModifiedImmediate),
929                                 kModifiedImmediate},
930                                {{al, r0, 133},
931                                 "al r0 133",
932                                 "ModifiedImmediate_al_r0_133",
933                                 ARRAY_SIZE(kModifiedImmediate),
934                                 kModifiedImmediate},
935                                {{al, r0, 134},
936                                 "al r0 134",
937                                 "ModifiedImmediate_al_r0_134",
938                                 ARRAY_SIZE(kModifiedImmediate),
939                                 kModifiedImmediate},
940                                {{al, r0, 135},
941                                 "al r0 135",
942                                 "ModifiedImmediate_al_r0_135",
943                                 ARRAY_SIZE(kModifiedImmediate),
944                                 kModifiedImmediate},
945                                {{al, r0, 136},
946                                 "al r0 136",
947                                 "ModifiedImmediate_al_r0_136",
948                                 ARRAY_SIZE(kModifiedImmediate),
949                                 kModifiedImmediate},
950                                {{al, r0, 137},
951                                 "al r0 137",
952                                 "ModifiedImmediate_al_r0_137",
953                                 ARRAY_SIZE(kModifiedImmediate),
954                                 kModifiedImmediate},
955                                {{al, r0, 138},
956                                 "al r0 138",
957                                 "ModifiedImmediate_al_r0_138",
958                                 ARRAY_SIZE(kModifiedImmediate),
959                                 kModifiedImmediate},
960                                {{al, r0, 139},
961                                 "al r0 139",
962                                 "ModifiedImmediate_al_r0_139",
963                                 ARRAY_SIZE(kModifiedImmediate),
964                                 kModifiedImmediate},
965                                {{al, r0, 140},
966                                 "al r0 140",
967                                 "ModifiedImmediate_al_r0_140",
968                                 ARRAY_SIZE(kModifiedImmediate),
969                                 kModifiedImmediate},
970                                {{al, r0, 141},
971                                 "al r0 141",
972                                 "ModifiedImmediate_al_r0_141",
973                                 ARRAY_SIZE(kModifiedImmediate),
974                                 kModifiedImmediate},
975                                {{al, r0, 142},
976                                 "al r0 142",
977                                 "ModifiedImmediate_al_r0_142",
978                                 ARRAY_SIZE(kModifiedImmediate),
979                                 kModifiedImmediate},
980                                {{al, r0, 143},
981                                 "al r0 143",
982                                 "ModifiedImmediate_al_r0_143",
983                                 ARRAY_SIZE(kModifiedImmediate),
984                                 kModifiedImmediate},
985                                {{al, r0, 144},
986                                 "al r0 144",
987                                 "ModifiedImmediate_al_r0_144",
988                                 ARRAY_SIZE(kModifiedImmediate),
989                                 kModifiedImmediate},
990                                {{al, r0, 145},
991                                 "al r0 145",
992                                 "ModifiedImmediate_al_r0_145",
993                                 ARRAY_SIZE(kModifiedImmediate),
994                                 kModifiedImmediate},
995                                {{al, r0, 146},
996                                 "al r0 146",
997                                 "ModifiedImmediate_al_r0_146",
998                                 ARRAY_SIZE(kModifiedImmediate),
999                                 kModifiedImmediate},
1000                                {{al, r0, 147},
1001                                 "al r0 147",
1002                                 "ModifiedImmediate_al_r0_147",
1003                                 ARRAY_SIZE(kModifiedImmediate),
1004                                 kModifiedImmediate},
1005                                {{al, r0, 148},
1006                                 "al r0 148",
1007                                 "ModifiedImmediate_al_r0_148",
1008                                 ARRAY_SIZE(kModifiedImmediate),
1009                                 kModifiedImmediate},
1010                                {{al, r0, 149},
1011                                 "al r0 149",
1012                                 "ModifiedImmediate_al_r0_149",
1013                                 ARRAY_SIZE(kModifiedImmediate),
1014                                 kModifiedImmediate},
1015                                {{al, r0, 150},
1016                                 "al r0 150",
1017                                 "ModifiedImmediate_al_r0_150",
1018                                 ARRAY_SIZE(kModifiedImmediate),
1019                                 kModifiedImmediate},
1020                                {{al, r0, 151},
1021                                 "al r0 151",
1022                                 "ModifiedImmediate_al_r0_151",
1023                                 ARRAY_SIZE(kModifiedImmediate),
1024                                 kModifiedImmediate},
1025                                {{al, r0, 152},
1026                                 "al r0 152",
1027                                 "ModifiedImmediate_al_r0_152",
1028                                 ARRAY_SIZE(kModifiedImmediate),
1029                                 kModifiedImmediate},
1030                                {{al, r0, 153},
1031                                 "al r0 153",
1032                                 "ModifiedImmediate_al_r0_153",
1033                                 ARRAY_SIZE(kModifiedImmediate),
1034                                 kModifiedImmediate},
1035                                {{al, r0, 154},
1036                                 "al r0 154",
1037                                 "ModifiedImmediate_al_r0_154",
1038                                 ARRAY_SIZE(kModifiedImmediate),
1039                                 kModifiedImmediate},
1040                                {{al, r0, 155},
1041                                 "al r0 155",
1042                                 "ModifiedImmediate_al_r0_155",
1043                                 ARRAY_SIZE(kModifiedImmediate),
1044                                 kModifiedImmediate},
1045                                {{al, r0, 156},
1046                                 "al r0 156",
1047                                 "ModifiedImmediate_al_r0_156",
1048                                 ARRAY_SIZE(kModifiedImmediate),
1049                                 kModifiedImmediate},
1050                                {{al, r0, 157},
1051                                 "al r0 157",
1052                                 "ModifiedImmediate_al_r0_157",
1053                                 ARRAY_SIZE(kModifiedImmediate),
1054                                 kModifiedImmediate},
1055                                {{al, r0, 158},
1056                                 "al r0 158",
1057                                 "ModifiedImmediate_al_r0_158",
1058                                 ARRAY_SIZE(kModifiedImmediate),
1059                                 kModifiedImmediate},
1060                                {{al, r0, 159},
1061                                 "al r0 159",
1062                                 "ModifiedImmediate_al_r0_159",
1063                                 ARRAY_SIZE(kModifiedImmediate),
1064                                 kModifiedImmediate},
1065                                {{al, r0, 160},
1066                                 "al r0 160",
1067                                 "ModifiedImmediate_al_r0_160",
1068                                 ARRAY_SIZE(kModifiedImmediate),
1069                                 kModifiedImmediate},
1070                                {{al, r0, 161},
1071                                 "al r0 161",
1072                                 "ModifiedImmediate_al_r0_161",
1073                                 ARRAY_SIZE(kModifiedImmediate),
1074                                 kModifiedImmediate},
1075                                {{al, r0, 162},
1076                                 "al r0 162",
1077                                 "ModifiedImmediate_al_r0_162",
1078                                 ARRAY_SIZE(kModifiedImmediate),
1079                                 kModifiedImmediate},
1080                                {{al, r0, 163},
1081                                 "al r0 163",
1082                                 "ModifiedImmediate_al_r0_163",
1083                                 ARRAY_SIZE(kModifiedImmediate),
1084                                 kModifiedImmediate},
1085                                {{al, r0, 164},
1086                                 "al r0 164",
1087                                 "ModifiedImmediate_al_r0_164",
1088                                 ARRAY_SIZE(kModifiedImmediate),
1089                                 kModifiedImmediate},
1090                                {{al, r0, 165},
1091                                 "al r0 165",
1092                                 "ModifiedImmediate_al_r0_165",
1093                                 ARRAY_SIZE(kModifiedImmediate),
1094                                 kModifiedImmediate},
1095                                {{al, r0, 166},
1096                                 "al r0 166",
1097                                 "ModifiedImmediate_al_r0_166",
1098                                 ARRAY_SIZE(kModifiedImmediate),
1099                                 kModifiedImmediate},
1100                                {{al, r0, 167},
1101                                 "al r0 167",
1102                                 "ModifiedImmediate_al_r0_167",
1103                                 ARRAY_SIZE(kModifiedImmediate),
1104                                 kModifiedImmediate},
1105                                {{al, r0, 168},
1106                                 "al r0 168",
1107                                 "ModifiedImmediate_al_r0_168",
1108                                 ARRAY_SIZE(kModifiedImmediate),
1109                                 kModifiedImmediate},
1110                                {{al, r0, 169},
1111                                 "al r0 169",
1112                                 "ModifiedImmediate_al_r0_169",
1113                                 ARRAY_SIZE(kModifiedImmediate),
1114                                 kModifiedImmediate},
1115                                {{al, r0, 170},
1116                                 "al r0 170",
1117                                 "ModifiedImmediate_al_r0_170",
1118                                 ARRAY_SIZE(kModifiedImmediate),
1119                                 kModifiedImmediate},
1120                                {{al, r0, 171},
1121                                 "al r0 171",
1122                                 "ModifiedImmediate_al_r0_171",
1123                                 ARRAY_SIZE(kModifiedImmediate),
1124                                 kModifiedImmediate},
1125                                {{al, r0, 172},
1126                                 "al r0 172",
1127                                 "ModifiedImmediate_al_r0_172",
1128                                 ARRAY_SIZE(kModifiedImmediate),
1129                                 kModifiedImmediate},
1130                                {{al, r0, 173},
1131                                 "al r0 173",
1132                                 "ModifiedImmediate_al_r0_173",
1133                                 ARRAY_SIZE(kModifiedImmediate),
1134                                 kModifiedImmediate},
1135                                {{al, r0, 174},
1136                                 "al r0 174",
1137                                 "ModifiedImmediate_al_r0_174",
1138                                 ARRAY_SIZE(kModifiedImmediate),
1139                                 kModifiedImmediate},
1140                                {{al, r0, 175},
1141                                 "al r0 175",
1142                                 "ModifiedImmediate_al_r0_175",
1143                                 ARRAY_SIZE(kModifiedImmediate),
1144                                 kModifiedImmediate},
1145                                {{al, r0, 176},
1146                                 "al r0 176",
1147                                 "ModifiedImmediate_al_r0_176",
1148                                 ARRAY_SIZE(kModifiedImmediate),
1149                                 kModifiedImmediate},
1150                                {{al, r0, 177},
1151                                 "al r0 177",
1152                                 "ModifiedImmediate_al_r0_177",
1153                                 ARRAY_SIZE(kModifiedImmediate),
1154                                 kModifiedImmediate},
1155                                {{al, r0, 178},
1156                                 "al r0 178",
1157                                 "ModifiedImmediate_al_r0_178",
1158                                 ARRAY_SIZE(kModifiedImmediate),
1159                                 kModifiedImmediate},
1160                                {{al, r0, 179},
1161                                 "al r0 179",
1162                                 "ModifiedImmediate_al_r0_179",
1163                                 ARRAY_SIZE(kModifiedImmediate),
1164                                 kModifiedImmediate},
1165                                {{al, r0, 180},
1166                                 "al r0 180",
1167                                 "ModifiedImmediate_al_r0_180",
1168                                 ARRAY_SIZE(kModifiedImmediate),
1169                                 kModifiedImmediate},
1170                                {{al, r0, 181},
1171                                 "al r0 181",
1172                                 "ModifiedImmediate_al_r0_181",
1173                                 ARRAY_SIZE(kModifiedImmediate),
1174                                 kModifiedImmediate},
1175                                {{al, r0, 182},
1176                                 "al r0 182",
1177                                 "ModifiedImmediate_al_r0_182",
1178                                 ARRAY_SIZE(kModifiedImmediate),
1179                                 kModifiedImmediate},
1180                                {{al, r0, 183},
1181                                 "al r0 183",
1182                                 "ModifiedImmediate_al_r0_183",
1183                                 ARRAY_SIZE(kModifiedImmediate),
1184                                 kModifiedImmediate},
1185                                {{al, r0, 184},
1186                                 "al r0 184",
1187                                 "ModifiedImmediate_al_r0_184",
1188                                 ARRAY_SIZE(kModifiedImmediate),
1189                                 kModifiedImmediate},
1190                                {{al, r0, 185},
1191                                 "al r0 185",
1192                                 "ModifiedImmediate_al_r0_185",
1193                                 ARRAY_SIZE(kModifiedImmediate),
1194                                 kModifiedImmediate},
1195                                {{al, r0, 186},
1196                                 "al r0 186",
1197                                 "ModifiedImmediate_al_r0_186",
1198                                 ARRAY_SIZE(kModifiedImmediate),
1199                                 kModifiedImmediate},
1200                                {{al, r0, 187},
1201                                 "al r0 187",
1202                                 "ModifiedImmediate_al_r0_187",
1203                                 ARRAY_SIZE(kModifiedImmediate),
1204                                 kModifiedImmediate},
1205                                {{al, r0, 188},
1206                                 "al r0 188",
1207                                 "ModifiedImmediate_al_r0_188",
1208                                 ARRAY_SIZE(kModifiedImmediate),
1209                                 kModifiedImmediate},
1210                                {{al, r0, 189},
1211                                 "al r0 189",
1212                                 "ModifiedImmediate_al_r0_189",
1213                                 ARRAY_SIZE(kModifiedImmediate),
1214                                 kModifiedImmediate},
1215                                {{al, r0, 190},
1216                                 "al r0 190",
1217                                 "ModifiedImmediate_al_r0_190",
1218                                 ARRAY_SIZE(kModifiedImmediate),
1219                                 kModifiedImmediate},
1220                                {{al, r0, 191},
1221                                 "al r0 191",
1222                                 "ModifiedImmediate_al_r0_191",
1223                                 ARRAY_SIZE(kModifiedImmediate),
1224                                 kModifiedImmediate},
1225                                {{al, r0, 192},
1226                                 "al r0 192",
1227                                 "ModifiedImmediate_al_r0_192",
1228                                 ARRAY_SIZE(kModifiedImmediate),
1229                                 kModifiedImmediate},
1230                                {{al, r0, 193},
1231                                 "al r0 193",
1232                                 "ModifiedImmediate_al_r0_193",
1233                                 ARRAY_SIZE(kModifiedImmediate),
1234                                 kModifiedImmediate},
1235                                {{al, r0, 194},
1236                                 "al r0 194",
1237                                 "ModifiedImmediate_al_r0_194",
1238                                 ARRAY_SIZE(kModifiedImmediate),
1239                                 kModifiedImmediate},
1240                                {{al, r0, 195},
1241                                 "al r0 195",
1242                                 "ModifiedImmediate_al_r0_195",
1243                                 ARRAY_SIZE(kModifiedImmediate),
1244                                 kModifiedImmediate},
1245                                {{al, r0, 196},
1246                                 "al r0 196",
1247                                 "ModifiedImmediate_al_r0_196",
1248                                 ARRAY_SIZE(kModifiedImmediate),
1249                                 kModifiedImmediate},
1250                                {{al, r0, 197},
1251                                 "al r0 197",
1252                                 "ModifiedImmediate_al_r0_197",
1253                                 ARRAY_SIZE(kModifiedImmediate),
1254                                 kModifiedImmediate},
1255                                {{al, r0, 198},
1256                                 "al r0 198",
1257                                 "ModifiedImmediate_al_r0_198",
1258                                 ARRAY_SIZE(kModifiedImmediate),
1259                                 kModifiedImmediate},
1260                                {{al, r0, 199},
1261                                 "al r0 199",
1262                                 "ModifiedImmediate_al_r0_199",
1263                                 ARRAY_SIZE(kModifiedImmediate),
1264                                 kModifiedImmediate},
1265                                {{al, r0, 200},
1266                                 "al r0 200",
1267                                 "ModifiedImmediate_al_r0_200",
1268                                 ARRAY_SIZE(kModifiedImmediate),
1269                                 kModifiedImmediate},
1270                                {{al, r0, 201},
1271                                 "al r0 201",
1272                                 "ModifiedImmediate_al_r0_201",
1273                                 ARRAY_SIZE(kModifiedImmediate),
1274                                 kModifiedImmediate},
1275                                {{al, r0, 202},
1276                                 "al r0 202",
1277                                 "ModifiedImmediate_al_r0_202",
1278                                 ARRAY_SIZE(kModifiedImmediate),
1279                                 kModifiedImmediate},
1280                                {{al, r0, 203},
1281                                 "al r0 203",
1282                                 "ModifiedImmediate_al_r0_203",
1283                                 ARRAY_SIZE(kModifiedImmediate),
1284                                 kModifiedImmediate},
1285                                {{al, r0, 204},
1286                                 "al r0 204",
1287                                 "ModifiedImmediate_al_r0_204",
1288                                 ARRAY_SIZE(kModifiedImmediate),
1289                                 kModifiedImmediate},
1290                                {{al, r0, 205},
1291                                 "al r0 205",
1292                                 "ModifiedImmediate_al_r0_205",
1293                                 ARRAY_SIZE(kModifiedImmediate),
1294                                 kModifiedImmediate},
1295                                {{al, r0, 206},
1296                                 "al r0 206",
1297                                 "ModifiedImmediate_al_r0_206",
1298                                 ARRAY_SIZE(kModifiedImmediate),
1299                                 kModifiedImmediate},
1300                                {{al, r0, 207},
1301                                 "al r0 207",
1302                                 "ModifiedImmediate_al_r0_207",
1303                                 ARRAY_SIZE(kModifiedImmediate),
1304                                 kModifiedImmediate},
1305                                {{al, r0, 208},
1306                                 "al r0 208",
1307                                 "ModifiedImmediate_al_r0_208",
1308                                 ARRAY_SIZE(kModifiedImmediate),
1309                                 kModifiedImmediate},
1310                                {{al, r0, 209},
1311                                 "al r0 209",
1312                                 "ModifiedImmediate_al_r0_209",
1313                                 ARRAY_SIZE(kModifiedImmediate),
1314                                 kModifiedImmediate},
1315                                {{al, r0, 210},
1316                                 "al r0 210",
1317                                 "ModifiedImmediate_al_r0_210",
1318                                 ARRAY_SIZE(kModifiedImmediate),
1319                                 kModifiedImmediate},
1320                                {{al, r0, 211},
1321                                 "al r0 211",
1322                                 "ModifiedImmediate_al_r0_211",
1323                                 ARRAY_SIZE(kModifiedImmediate),
1324                                 kModifiedImmediate},
1325                                {{al, r0, 212},
1326                                 "al r0 212",
1327                                 "ModifiedImmediate_al_r0_212",
1328                                 ARRAY_SIZE(kModifiedImmediate),
1329                                 kModifiedImmediate},
1330                                {{al, r0, 213},
1331                                 "al r0 213",
1332                                 "ModifiedImmediate_al_r0_213",
1333                                 ARRAY_SIZE(kModifiedImmediate),
1334                                 kModifiedImmediate},
1335                                {{al, r0, 214},
1336                                 "al r0 214",
1337                                 "ModifiedImmediate_al_r0_214",
1338                                 ARRAY_SIZE(kModifiedImmediate),
1339                                 kModifiedImmediate},
1340                                {{al, r0, 215},
1341                                 "al r0 215",
1342                                 "ModifiedImmediate_al_r0_215",
1343                                 ARRAY_SIZE(kModifiedImmediate),
1344                                 kModifiedImmediate},
1345                                {{al, r0, 216},
1346                                 "al r0 216",
1347                                 "ModifiedImmediate_al_r0_216",
1348                                 ARRAY_SIZE(kModifiedImmediate),
1349                                 kModifiedImmediate},
1350                                {{al, r0, 217},
1351                                 "al r0 217",
1352                                 "ModifiedImmediate_al_r0_217",
1353                                 ARRAY_SIZE(kModifiedImmediate),
1354                                 kModifiedImmediate},
1355                                {{al, r0, 218},
1356                                 "al r0 218",
1357                                 "ModifiedImmediate_al_r0_218",
1358                                 ARRAY_SIZE(kModifiedImmediate),
1359                                 kModifiedImmediate},
1360                                {{al, r0, 219},
1361                                 "al r0 219",
1362                                 "ModifiedImmediate_al_r0_219",
1363                                 ARRAY_SIZE(kModifiedImmediate),
1364                                 kModifiedImmediate},
1365                                {{al, r0, 220},
1366                                 "al r0 220",
1367                                 "ModifiedImmediate_al_r0_220",
1368                                 ARRAY_SIZE(kModifiedImmediate),
1369                                 kModifiedImmediate},
1370                                {{al, r0, 221},
1371                                 "al r0 221",
1372                                 "ModifiedImmediate_al_r0_221",
1373                                 ARRAY_SIZE(kModifiedImmediate),
1374                                 kModifiedImmediate},
1375                                {{al, r0, 222},
1376                                 "al r0 222",
1377                                 "ModifiedImmediate_al_r0_222",
1378                                 ARRAY_SIZE(kModifiedImmediate),
1379                                 kModifiedImmediate},
1380                                {{al, r0, 223},
1381                                 "al r0 223",
1382                                 "ModifiedImmediate_al_r0_223",
1383                                 ARRAY_SIZE(kModifiedImmediate),
1384                                 kModifiedImmediate},
1385                                {{al, r0, 224},
1386                                 "al r0 224",
1387                                 "ModifiedImmediate_al_r0_224",
1388                                 ARRAY_SIZE(kModifiedImmediate),
1389                                 kModifiedImmediate},
1390                                {{al, r0, 225},
1391                                 "al r0 225",
1392                                 "ModifiedImmediate_al_r0_225",
1393                                 ARRAY_SIZE(kModifiedImmediate),
1394                                 kModifiedImmediate},
1395                                {{al, r0, 226},
1396                                 "al r0 226",
1397                                 "ModifiedImmediate_al_r0_226",
1398                                 ARRAY_SIZE(kModifiedImmediate),
1399                                 kModifiedImmediate},
1400                                {{al, r0, 227},
1401                                 "al r0 227",
1402                                 "ModifiedImmediate_al_r0_227",
1403                                 ARRAY_SIZE(kModifiedImmediate),
1404                                 kModifiedImmediate},
1405                                {{al, r0, 228},
1406                                 "al r0 228",
1407                                 "ModifiedImmediate_al_r0_228",
1408                                 ARRAY_SIZE(kModifiedImmediate),
1409                                 kModifiedImmediate},
1410                                {{al, r0, 229},
1411                                 "al r0 229",
1412                                 "ModifiedImmediate_al_r0_229",
1413                                 ARRAY_SIZE(kModifiedImmediate),
1414                                 kModifiedImmediate},
1415                                {{al, r0, 230},
1416                                 "al r0 230",
1417                                 "ModifiedImmediate_al_r0_230",
1418                                 ARRAY_SIZE(kModifiedImmediate),
1419                                 kModifiedImmediate},
1420                                {{al, r0, 231},
1421                                 "al r0 231",
1422                                 "ModifiedImmediate_al_r0_231",
1423                                 ARRAY_SIZE(kModifiedImmediate),
1424                                 kModifiedImmediate},
1425                                {{al, r0, 232},
1426                                 "al r0 232",
1427                                 "ModifiedImmediate_al_r0_232",
1428                                 ARRAY_SIZE(kModifiedImmediate),
1429                                 kModifiedImmediate},
1430                                {{al, r0, 233},
1431                                 "al r0 233",
1432                                 "ModifiedImmediate_al_r0_233",
1433                                 ARRAY_SIZE(kModifiedImmediate),
1434                                 kModifiedImmediate},
1435                                {{al, r0, 234},
1436                                 "al r0 234",
1437                                 "ModifiedImmediate_al_r0_234",
1438                                 ARRAY_SIZE(kModifiedImmediate),
1439                                 kModifiedImmediate},
1440                                {{al, r0, 235},
1441                                 "al r0 235",
1442                                 "ModifiedImmediate_al_r0_235",
1443                                 ARRAY_SIZE(kModifiedImmediate),
1444                                 kModifiedImmediate},
1445                                {{al, r0, 236},
1446                                 "al r0 236",
1447                                 "ModifiedImmediate_al_r0_236",
1448                                 ARRAY_SIZE(kModifiedImmediate),
1449                                 kModifiedImmediate},
1450                                {{al, r0, 237},
1451                                 "al r0 237",
1452                                 "ModifiedImmediate_al_r0_237",
1453                                 ARRAY_SIZE(kModifiedImmediate),
1454                                 kModifiedImmediate},
1455                                {{al, r0, 238},
1456                                 "al r0 238",
1457                                 "ModifiedImmediate_al_r0_238",
1458                                 ARRAY_SIZE(kModifiedImmediate),
1459                                 kModifiedImmediate},
1460                                {{al, r0, 239},
1461                                 "al r0 239",
1462                                 "ModifiedImmediate_al_r0_239",
1463                                 ARRAY_SIZE(kModifiedImmediate),
1464                                 kModifiedImmediate},
1465                                {{al, r0, 240},
1466                                 "al r0 240",
1467                                 "ModifiedImmediate_al_r0_240",
1468                                 ARRAY_SIZE(kModifiedImmediate),
1469                                 kModifiedImmediate},
1470                                {{al, r0, 241},
1471                                 "al r0 241",
1472                                 "ModifiedImmediate_al_r0_241",
1473                                 ARRAY_SIZE(kModifiedImmediate),
1474                                 kModifiedImmediate},
1475                                {{al, r0, 242},
1476                                 "al r0 242",
1477                                 "ModifiedImmediate_al_r0_242",
1478                                 ARRAY_SIZE(kModifiedImmediate),
1479                                 kModifiedImmediate},
1480                                {{al, r0, 243},
1481                                 "al r0 243",
1482                                 "ModifiedImmediate_al_r0_243",
1483                                 ARRAY_SIZE(kModifiedImmediate),
1484                                 kModifiedImmediate},
1485                                {{al, r0, 244},
1486                                 "al r0 244",
1487                                 "ModifiedImmediate_al_r0_244",
1488                                 ARRAY_SIZE(kModifiedImmediate),
1489                                 kModifiedImmediate},
1490                                {{al, r0, 245},
1491                                 "al r0 245",
1492                                 "ModifiedImmediate_al_r0_245",
1493                                 ARRAY_SIZE(kModifiedImmediate),
1494                                 kModifiedImmediate},
1495                                {{al, r0, 246},
1496                                 "al r0 246",
1497                                 "ModifiedImmediate_al_r0_246",
1498                                 ARRAY_SIZE(kModifiedImmediate),
1499                                 kModifiedImmediate},
1500                                {{al, r0, 247},
1501                                 "al r0 247",
1502                                 "ModifiedImmediate_al_r0_247",
1503                                 ARRAY_SIZE(kModifiedImmediate),
1504                                 kModifiedImmediate},
1505                                {{al, r0, 248},
1506                                 "al r0 248",
1507                                 "ModifiedImmediate_al_r0_248",
1508                                 ARRAY_SIZE(kModifiedImmediate),
1509                                 kModifiedImmediate},
1510                                {{al, r0, 249},
1511                                 "al r0 249",
1512                                 "ModifiedImmediate_al_r0_249",
1513                                 ARRAY_SIZE(kModifiedImmediate),
1514                                 kModifiedImmediate},
1515                                {{al, r0, 250},
1516                                 "al r0 250",
1517                                 "ModifiedImmediate_al_r0_250",
1518                                 ARRAY_SIZE(kModifiedImmediate),
1519                                 kModifiedImmediate},
1520                                {{al, r0, 251},
1521                                 "al r0 251",
1522                                 "ModifiedImmediate_al_r0_251",
1523                                 ARRAY_SIZE(kModifiedImmediate),
1524                                 kModifiedImmediate},
1525                                {{al, r0, 252},
1526                                 "al r0 252",
1527                                 "ModifiedImmediate_al_r0_252",
1528                                 ARRAY_SIZE(kModifiedImmediate),
1529                                 kModifiedImmediate},
1530                                {{al, r0, 253},
1531                                 "al r0 253",
1532                                 "ModifiedImmediate_al_r0_253",
1533                                 ARRAY_SIZE(kModifiedImmediate),
1534                                 kModifiedImmediate},
1535                                {{al, r0, 254},
1536                                 "al r0 254",
1537                                 "ModifiedImmediate_al_r0_254",
1538                                 ARRAY_SIZE(kModifiedImmediate),
1539                                 kModifiedImmediate},
1540                                {{al, r0, 255},
1541                                 "al r0 255",
1542                                 "ModifiedImmediate_al_r0_255",
1543                                 ARRAY_SIZE(kModifiedImmediate),
1544                                 kModifiedImmediate}};
1545 
1546 // We record all inputs to the instructions as outputs. This way, we also check
1547 // that what shouldn't change didn't change.
1548 struct TestResult {
1549   size_t output_size;
1550   const Inputs* outputs;
1551 };
1552 
1553 // These headers each contain an array of `TestResult` with the reference output
1554 // values. The reference arrays are names `kReference{mnemonic}`.
1555 #include "aarch32/traces/simulator-cond-rdlow-operand-imm8-cmp-t32.h"
1556 #include "aarch32/traces/simulator-cond-rdlow-operand-imm8-mov-t32.h"
1557 #include "aarch32/traces/simulator-cond-rdlow-operand-imm8-movs-t32.h"
1558 
1559 
1560 // The maximum number of errors to report in detail for each test.
1561 const unsigned kErrorReportLimit = 8;
1562 
1563 typedef void (MacroAssembler::*Fn)(Condition cond,
1564                                    Register rd,
1565                                    const Operand& op);
1566 
TestHelper(Fn instruction,const char * mnemonic,const TestResult reference[])1567 void TestHelper(Fn instruction,
1568                 const char* mnemonic,
1569                 const TestResult reference[]) {
1570   SETUP();
1571   masm.UseT32();
1572   START();
1573 
1574   // Data to compare to `reference`.
1575   TestResult* results[ARRAY_SIZE(kTests)];
1576 
1577   // Test cases for memory bound instructions may allocate a buffer and save its
1578   // address in this array.
1579   byte* scratch_memory_buffers[ARRAY_SIZE(kTests)];
1580 
1581   // Generate a loop for each element in `kTests`. Each loop tests one specific
1582   // instruction.
1583   for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
1584     // Allocate results on the heap for this test.
1585     results[i] = new TestResult;
1586     results[i]->outputs = new Inputs[kTests[i].input_size];
1587     results[i]->output_size = kTests[i].input_size;
1588 
1589     size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size;
1590     VIXL_ASSERT(IsUint32(input_stride));
1591 
1592     scratch_memory_buffers[i] = NULL;
1593 
1594     Label loop;
1595     UseScratchRegisterScope scratch_registers(&masm);
1596     // Include all registers from r0 ro r12.
1597     scratch_registers.Include(RegisterList(0x1fff));
1598 
1599     // Values to pass to the macro-assembler.
1600     Condition cond = kTests[i].operands.cond;
1601     Register rd = kTests[i].operands.rd;
1602     int32_t immediate = kTests[i].operands.immediate;
1603     Operand op(immediate);
1604     scratch_registers.Exclude(rd);
1605 
1606     // Allocate reserved registers for our own use.
1607     Register input_ptr = scratch_registers.Acquire();
1608     Register input_end = scratch_registers.Acquire();
1609     Register result_ptr = scratch_registers.Acquire();
1610 
1611     // Initialize `input_ptr` to the first element and `input_end` the address
1612     // after the array.
1613     __ Mov(input_ptr, Operand::From(kTests[i].inputs));
1614     __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride));
1615     __ Mov(result_ptr, Operand::From(results[i]->outputs));
1616     __ Bind(&loop);
1617 
1618     {
1619       UseScratchRegisterScope temp_registers(&masm);
1620       Register nzcv_bits = temp_registers.Acquire();
1621       Register saved_q_bit = temp_registers.Acquire();
1622       // Save the `Q` bit flag.
1623       __ Mrs(saved_q_bit, APSR);
1624       __ And(saved_q_bit, saved_q_bit, QFlag);
1625       // Set the `NZCV` and `Q` flags together.
1626       __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr)));
1627       __ Orr(nzcv_bits, nzcv_bits, saved_q_bit);
1628       __ Msr(APSR_nzcvq, nzcv_bits);
1629     }
1630     __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd)));
1631 
1632     (masm.*instruction)(cond, rd, op);
1633 
1634     {
1635       UseScratchRegisterScope temp_registers(&masm);
1636       Register nzcv_bits = temp_registers.Acquire();
1637       __ Mrs(nzcv_bits, APSR);
1638       // Only record the NZCV bits.
1639       __ And(nzcv_bits, nzcv_bits, NZCVFlag);
1640       __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr)));
1641     }
1642     __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd)));
1643 
1644     // Advance the result pointer.
1645     __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
1646     // Loop back until `input_ptr` is lower than `input_base`.
1647     __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
1648     __ Cmp(input_ptr, input_end);
1649     __ B(ne, &loop);
1650   }
1651 
1652   END();
1653 
1654   RUN();
1655 
1656   if (Test::generate_test_trace()) {
1657     // Print the results.
1658     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1659       printf("const Inputs kOutputs_%s_%s[] = {\n",
1660              mnemonic,
1661              kTests[i].identifier);
1662       for (size_t j = 0; j < results[i]->output_size; j++) {
1663         printf("  { ");
1664         printf("0x%08" PRIx32, results[i]->outputs[j].apsr);
1665         printf(", ");
1666         printf("0x%08" PRIx32, results[i]->outputs[j].rd);
1667         printf(" },\n");
1668       }
1669       printf("};\n");
1670     }
1671     printf("const TestResult kReference%s[] = {\n", mnemonic);
1672     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1673       printf("  {\n");
1674       printf("    ARRAY_SIZE(kOutputs_%s_%s),\n",
1675              mnemonic,
1676              kTests[i].identifier);
1677       printf("    kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier);
1678       printf("  },\n");
1679     }
1680     printf("};\n");
1681   } else if (kCheckSimulatorTestResults) {
1682     // Check the results.
1683     unsigned total_error_count = 0;
1684     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1685       bool instruction_has_errors = false;
1686       for (size_t j = 0; j < kTests[i].input_size; j++) {
1687         uint32_t apsr = results[i]->outputs[j].apsr;
1688         uint32_t rd = results[i]->outputs[j].rd;
1689         uint32_t apsr_input = kTests[i].inputs[j].apsr;
1690         uint32_t rd_input = kTests[i].inputs[j].rd;
1691         uint32_t apsr_ref = reference[i].outputs[j].apsr;
1692         uint32_t rd_ref = reference[i].outputs[j].rd;
1693 
1694         if (((apsr != apsr_ref) || (rd != rd_ref)) &&
1695             (++total_error_count <= kErrorReportLimit)) {
1696           // Print the instruction once even if it triggered multiple failures.
1697           if (!instruction_has_errors) {
1698             printf("Error(s) when testing \"%s %s\":\n",
1699                    mnemonic,
1700                    kTests[i].operands_description);
1701             instruction_has_errors = true;
1702           }
1703           // Print subsequent errors.
1704           printf("  Input:    ");
1705           printf("0x%08" PRIx32, apsr_input);
1706           printf(", ");
1707           printf("0x%08" PRIx32, rd_input);
1708           printf("\n");
1709           printf("  Expected: ");
1710           printf("0x%08" PRIx32, apsr_ref);
1711           printf(", ");
1712           printf("0x%08" PRIx32, rd_ref);
1713           printf("\n");
1714           printf("  Found:    ");
1715           printf("0x%08" PRIx32, apsr);
1716           printf(", ");
1717           printf("0x%08" PRIx32, rd);
1718           printf("\n\n");
1719         }
1720       }
1721     }
1722 
1723     if (total_error_count > kErrorReportLimit) {
1724       printf("%u other errors follow.\n",
1725              total_error_count - kErrorReportLimit);
1726     }
1727     VIXL_CHECK(total_error_count == 0);
1728   } else {
1729     VIXL_WARNING("Assembled the code, but did not run anything.\n");
1730   }
1731 
1732   for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
1733     delete[] results[i]->outputs;
1734     delete results[i];
1735     delete[] scratch_memory_buffers[i];
1736   }
1737 }
1738 
1739 // Instantiate tests for each instruction in the list.
1740 // TODO: Remove this limitation by having a sandboxing mechanism.
1741 #if defined(VIXL_HOST_POINTER_32)
1742 #define TEST(mnemonic)                                                        \
1743   void Test_##mnemonic() {                                                    \
1744     TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic);   \
1745   }                                                                           \
1746   Test test_##mnemonic("AARCH32_SIMULATOR_COND_RDLOW_OPERAND_IMM8_" #mnemonic \
1747                        "_T32",                                                \
1748                        &Test_##mnemonic);
1749 #else
1750 #define TEST(mnemonic)                                                        \
1751   void Test_##mnemonic() {                                                    \
1752     VIXL_WARNING("This test can only run on a 32-bit host.\n");               \
1753     USE(TestHelper);                                                          \
1754   }                                                                           \
1755   Test test_##mnemonic("AARCH32_SIMULATOR_COND_RDLOW_OPERAND_IMM8_" #mnemonic \
1756                        "_T32",                                                \
1757                        &Test_##mnemonic);
1758 #endif
1759 
1760 FOREACH_INSTRUCTION(TEST)
1761 #undef TEST
1762 
1763 }  // namespace
1764 #endif
1765 
1766 }  // namespace aarch32
1767 }  // namespace vixl
1768