• 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(Ldr)                       \
117   M(Ldrb)                      \
118   M(Ldrh)                      \
119   M(Ldrsb)                     \
120   M(Ldrsh)                     \
121   M(Str)                       \
122   M(Strb)                      \
123   M(Strh)
124 
125 
126 // The following definitions are defined again in each generated test, therefore
127 // we need to place them in an anomymous namespace. It expresses that they are
128 // local to this file only, and the compiler is not allowed to share these types
129 // across test files during template instantiation. Specifically, `Operands` and
130 // `Inputs` have various layouts across generated tests so they absolutely
131 // cannot be shared.
132 
133 #ifdef VIXL_INCLUDE_TARGET_A32
134 namespace {
135 
136 // Values to be passed to the assembler to produce the instruction under test.
137 struct Operands {
138   Condition cond;
139   Register rd;
140   Register rn;
141   Sign sign;
142   Register rm;
143   AddrMode addr_mode;
144 };
145 
146 // Input data to feed to the instruction.
147 struct Inputs {
148   uint32_t apsr;
149   uint32_t rd;
150   uint32_t rm;
151   uint32_t memop[2];
152 };
153 
154 // This structure contains all input data needed to test one specific encoding.
155 // It used to generate a loop over an instruction.
156 struct TestLoopData {
157   // The `operands` fields represents the values to pass to the assembler to
158   // produce the instruction.
159   Operands operands;
160   // Description of the operands, used for error reporting.
161   const char* operands_description;
162   // Unique identifier, used for generating traces.
163   const char* identifier;
164   // Array of values to be fed to the instruction.
165   size_t input_size;
166   const Inputs* inputs;
167 };
168 
169 static const Inputs kCondition[] = {{NFlag, 0xabababab, 0, {0, 0x77777777}},
170                                     {ZFlag, 0xabababab, 0, {0, 0x77777777}},
171                                     {CFlag, 0xabababab, 0, {0, 0x77777777}},
172                                     {VFlag, 0xabababab, 0, {0, 0x77777777}},
173                                     {NZFlag, 0xabababab, 0, {0, 0x77777777}},
174                                     {NCFlag, 0xabababab, 0, {0, 0x77777777}},
175                                     {NVFlag, 0xabababab, 0, {0, 0x77777777}},
176                                     {ZCFlag, 0xabababab, 0, {0, 0x77777777}},
177                                     {ZVFlag, 0xabababab, 0, {0, 0x77777777}},
178                                     {CVFlag, 0xabababab, 0, {0, 0x77777777}},
179                                     {NZCFlag, 0xabababab, 0, {0, 0x77777777}},
180                                     {NZVFlag, 0xabababab, 0, {0, 0x77777777}},
181                                     {NCVFlag, 0xabababab, 0, {0, 0x77777777}},
182                                     {ZCVFlag, 0xabababab, 0, {0, 0x77777777}},
183                                     {NZCVFlag, 0xabababab, 0, {0, 0x77777777}}};
184 
185 static const Inputs kPositiveOffset[] =
186     {{NoFlag, 0xabababab, 1651, {0, 0x0cabba9e}},
187      {NoFlag, 0xabababab, 601, {0, 0x0cabba9e}},
188      {NoFlag, 0xabababab, 1934, {0, 0x0badbeef}},
189      {NoFlag, 0xabababab, 3952, {0, 0x0cabba9e}},
190      {NoFlag, 0xabababab, 674, {0, 0x55555555}},
191      {NoFlag, 0xabababab, 3438, {0, 0x0cabba9e}},
192      {NoFlag, 0xabababab, 3963, {0, 0x0cabba9e}},
193      {NoFlag, 0xabababab, 1428, {0, 0x0cabba9e}},
194      {NoFlag, 0xabababab, 1835, {0, 0x0cabba9e}},
195      {NoFlag, 0xabababab, 2619, {0, 0x77777777}}};
196 
197 static const Inputs kNegativeOffset[] =
198     {{NoFlag, 0xabababab, 1635, {0, 0x0cabba9e}},
199      {NoFlag, 0xabababab, 48, {0, 0x0badbeef}},
200      {NoFlag, 0xabababab, 3871, {0, 0x0cabba9e}},
201      {NoFlag, 0xabababab, 517, {0, 0x77777777}},
202      {NoFlag, 0xabababab, 513, {0, 0x0badbeef}},
203      {NoFlag, 0xabababab, 1348, {0, 0x77777777}},
204      {NoFlag, 0xabababab, 3002, {0, 0x0badbeef}},
205      {NoFlag, 0xabababab, 306, {0, 0x0badbeef}},
206      {NoFlag, 0xabababab, 1458, {0, 0x0cabba9e}},
207      {NoFlag, 0xabababab, 3028, {0, 0x55555555}}};
208 
209 static const Inputs kPositivePostIndex[] =
210     {{NoFlag, 0xabababab, 2442, {0, 0x55555555}},
211      {NoFlag, 0xabababab, 1485, {0, 0x0badbeef}},
212      {NoFlag, 0xabababab, 674, {0, 0x0badbeef}},
213      {NoFlag, 0xabababab, 55, {0, 0x0badbeef}},
214      {NoFlag, 0xabababab, 2395, {0, 0x0cabba9e}},
215      {NoFlag, 0xabababab, 582, {0, 0x77777777}},
216      {NoFlag, 0xabababab, 3572, {0, 0x77777777}},
217      {NoFlag, 0xabababab, 2849, {0, 0x0cabba9e}},
218      {NoFlag, 0xabababab, 3522, {0, 0x77777777}},
219      {NoFlag, 0xabababab, 1234, {0, 0x0badbeef}}};
220 
221 static const Inputs kNegativePostIndex[] =
222     {{NoFlag, 0xabababab, 3413, {0, 0x55555555}},
223      {NoFlag, 0xabababab, 2442, {0, 0x0badbeef}},
224      {NoFlag, 0xabababab, 3136, {0, 0x0badbeef}},
225      {NoFlag, 0xabababab, 2119, {0, 0x0badbeef}},
226      {NoFlag, 0xabababab, 778, {0, 0x0badbeef}},
227      {NoFlag, 0xabababab, 1666, {0, 0x77777777}},
228      {NoFlag, 0xabababab, 3069, {0, 0x0badbeef}},
229      {NoFlag, 0xabababab, 365, {0, 0x0badbeef}},
230      {NoFlag, 0xabababab, 3094, {0, 0x55555555}},
231      {NoFlag, 0xabababab, 2690, {0, 0x55555555}}};
232 
233 static const Inputs kPositivePreIndex[] =
234     {{NoFlag, 0xabababab, 2072, {0, 0x0badbeef}},
235      {NoFlag, 0xabababab, 22, {0, 0x0badbeef}},
236      {NoFlag, 0xabababab, 2254, {0, 0x55555555}},
237      {NoFlag, 0xabababab, 3002, {0, 0x55555555}},
238      {NoFlag, 0xabababab, 3391, {0, 0x0cabba9e}},
239      {NoFlag, 0xabababab, 3449, {0, 0x0cabba9e}},
240      {NoFlag, 0xabababab, 2796, {0, 0x0badbeef}},
241      {NoFlag, 0xabababab, 3325, {0, 0x0badbeef}},
242      {NoFlag, 0xabababab, 365, {0, 0x55555555}},
243      {NoFlag, 0xabababab, 1323, {0, 0x77777777}}};
244 
245 static const Inputs kNegativePreIndex[] =
246     {{NoFlag, 0xabababab, 3821, {0, 0x0badbeef}},
247      {NoFlag, 0xabababab, 2892, {0, 0x77777777}},
248      {NoFlag, 0xabababab, 3439, {0, 0x0cabba9e}},
249      {NoFlag, 0xabababab, 3057, {0, 0x55555555}},
250      {NoFlag, 0xabababab, 2559, {0, 0x55555555}},
251      {NoFlag, 0xabababab, 3663, {0, 0x0cabba9e}},
252      {NoFlag, 0xabababab, 1506, {0, 0x0badbeef}},
253      {NoFlag, 0xabababab, 2011, {0, 0x77777777}},
254      {NoFlag, 0xabababab, 3865, {0, 0x77777777}},
255      {NoFlag, 0xabababab, 4058, {0, 0x55555555}}};
256 
257 
258 // A loop will be generated for each element of this array.
259 const TestLoopData kTests[] =
260     {{{eq, r0, r1, plus, r8, Offset},
261       "eq r0 r1 plus r8 Offset",
262       "Condition_eq_r0_r1_plus_r8_Offset",
263       ARRAY_SIZE(kCondition),
264       kCondition},
265      {{ne, r0, r1, plus, r8, Offset},
266       "ne r0 r1 plus r8 Offset",
267       "Condition_ne_r0_r1_plus_r8_Offset",
268       ARRAY_SIZE(kCondition),
269       kCondition},
270      {{cs, r0, r1, plus, r8, Offset},
271       "cs r0 r1 plus r8 Offset",
272       "Condition_cs_r0_r1_plus_r8_Offset",
273       ARRAY_SIZE(kCondition),
274       kCondition},
275      {{cc, r0, r1, plus, r8, Offset},
276       "cc r0 r1 plus r8 Offset",
277       "Condition_cc_r0_r1_plus_r8_Offset",
278       ARRAY_SIZE(kCondition),
279       kCondition},
280      {{mi, r0, r1, plus, r8, Offset},
281       "mi r0 r1 plus r8 Offset",
282       "Condition_mi_r0_r1_plus_r8_Offset",
283       ARRAY_SIZE(kCondition),
284       kCondition},
285      {{pl, r0, r1, plus, r8, Offset},
286       "pl r0 r1 plus r8 Offset",
287       "Condition_pl_r0_r1_plus_r8_Offset",
288       ARRAY_SIZE(kCondition),
289       kCondition},
290      {{vs, r0, r1, plus, r8, Offset},
291       "vs r0 r1 plus r8 Offset",
292       "Condition_vs_r0_r1_plus_r8_Offset",
293       ARRAY_SIZE(kCondition),
294       kCondition},
295      {{vc, r0, r1, plus, r8, Offset},
296       "vc r0 r1 plus r8 Offset",
297       "Condition_vc_r0_r1_plus_r8_Offset",
298       ARRAY_SIZE(kCondition),
299       kCondition},
300      {{hi, r0, r1, plus, r8, Offset},
301       "hi r0 r1 plus r8 Offset",
302       "Condition_hi_r0_r1_plus_r8_Offset",
303       ARRAY_SIZE(kCondition),
304       kCondition},
305      {{ls, r0, r1, plus, r8, Offset},
306       "ls r0 r1 plus r8 Offset",
307       "Condition_ls_r0_r1_plus_r8_Offset",
308       ARRAY_SIZE(kCondition),
309       kCondition},
310      {{ge, r0, r1, plus, r8, Offset},
311       "ge r0 r1 plus r8 Offset",
312       "Condition_ge_r0_r1_plus_r8_Offset",
313       ARRAY_SIZE(kCondition),
314       kCondition},
315      {{lt, r0, r1, plus, r8, Offset},
316       "lt r0 r1 plus r8 Offset",
317       "Condition_lt_r0_r1_plus_r8_Offset",
318       ARRAY_SIZE(kCondition),
319       kCondition},
320      {{gt, r0, r1, plus, r8, Offset},
321       "gt r0 r1 plus r8 Offset",
322       "Condition_gt_r0_r1_plus_r8_Offset",
323       ARRAY_SIZE(kCondition),
324       kCondition},
325      {{le, r0, r1, plus, r8, Offset},
326       "le r0 r1 plus r8 Offset",
327       "Condition_le_r0_r1_plus_r8_Offset",
328       ARRAY_SIZE(kCondition),
329       kCondition},
330      {{al, r0, r1, plus, r8, Offset},
331       "al r0 r1 plus r8 Offset",
332       "Condition_al_r0_r1_plus_r8_Offset",
333       ARRAY_SIZE(kCondition),
334       kCondition},
335      {{al, r9, r8, plus, r14, Offset},
336       "al r9 r8 plus r14 Offset",
337       "PositiveOffset_al_r9_r8_plus_r14_Offset",
338       ARRAY_SIZE(kPositiveOffset),
339       kPositiveOffset},
340      {{al, r3, r8, plus, r9, Offset},
341       "al r3 r8 plus r9 Offset",
342       "PositiveOffset_al_r3_r8_plus_r9_Offset",
343       ARRAY_SIZE(kPositiveOffset),
344       kPositiveOffset},
345      {{al, r11, r6, plus, r9, Offset},
346       "al r11 r6 plus r9 Offset",
347       "PositiveOffset_al_r11_r6_plus_r9_Offset",
348       ARRAY_SIZE(kPositiveOffset),
349       kPositiveOffset},
350      {{al, r4, r0, plus, r12, Offset},
351       "al r4 r0 plus r12 Offset",
352       "PositiveOffset_al_r4_r0_plus_r12_Offset",
353       ARRAY_SIZE(kPositiveOffset),
354       kPositiveOffset},
355      {{al, r8, r3, plus, r14, Offset},
356       "al r8 r3 plus r14 Offset",
357       "PositiveOffset_al_r8_r3_plus_r14_Offset",
358       ARRAY_SIZE(kPositiveOffset),
359       kPositiveOffset},
360      {{al, r10, r9, plus, r14, Offset},
361       "al r10 r9 plus r14 Offset",
362       "PositiveOffset_al_r10_r9_plus_r14_Offset",
363       ARRAY_SIZE(kPositiveOffset),
364       kPositiveOffset},
365      {{al, r7, r4, plus, r0, Offset},
366       "al r7 r4 plus r0 Offset",
367       "PositiveOffset_al_r7_r4_plus_r0_Offset",
368       ARRAY_SIZE(kPositiveOffset),
369       kPositiveOffset},
370      {{al, r4, r5, plus, r0, Offset},
371       "al r4 r5 plus r0 Offset",
372       "PositiveOffset_al_r4_r5_plus_r0_Offset",
373       ARRAY_SIZE(kPositiveOffset),
374       kPositiveOffset},
375      {{al, r14, r4, plus, r6, Offset},
376       "al r14 r4 plus r6 Offset",
377       "PositiveOffset_al_r14_r4_plus_r6_Offset",
378       ARRAY_SIZE(kPositiveOffset),
379       kPositiveOffset},
380      {{al, r3, r10, plus, r0, Offset},
381       "al r3 r10 plus r0 Offset",
382       "PositiveOffset_al_r3_r10_plus_r0_Offset",
383       ARRAY_SIZE(kPositiveOffset),
384       kPositiveOffset},
385      {{al, r8, r3, plus, r7, Offset},
386       "al r8 r3 plus r7 Offset",
387       "PositiveOffset_al_r8_r3_plus_r7_Offset",
388       ARRAY_SIZE(kPositiveOffset),
389       kPositiveOffset},
390      {{al, r11, r10, plus, r3, Offset},
391       "al r11 r10 plus r3 Offset",
392       "PositiveOffset_al_r11_r10_plus_r3_Offset",
393       ARRAY_SIZE(kPositiveOffset),
394       kPositiveOffset},
395      {{al, r10, r4, plus, r14, Offset},
396       "al r10 r4 plus r14 Offset",
397       "PositiveOffset_al_r10_r4_plus_r14_Offset",
398       ARRAY_SIZE(kPositiveOffset),
399       kPositiveOffset},
400      {{al, r0, r3, plus, r9, Offset},
401       "al r0 r3 plus r9 Offset",
402       "PositiveOffset_al_r0_r3_plus_r9_Offset",
403       ARRAY_SIZE(kPositiveOffset),
404       kPositiveOffset},
405      {{al, r10, r8, plus, r3, Offset},
406       "al r10 r8 plus r3 Offset",
407       "PositiveOffset_al_r10_r8_plus_r3_Offset",
408       ARRAY_SIZE(kPositiveOffset),
409       kPositiveOffset},
410      {{al, r3, r1, plus, r5, Offset},
411       "al r3 r1 plus r5 Offset",
412       "PositiveOffset_al_r3_r1_plus_r5_Offset",
413       ARRAY_SIZE(kPositiveOffset),
414       kPositiveOffset},
415      {{al, r6, r14, plus, r12, Offset},
416       "al r6 r14 plus r12 Offset",
417       "PositiveOffset_al_r6_r14_plus_r12_Offset",
418       ARRAY_SIZE(kPositiveOffset),
419       kPositiveOffset},
420      {{al, r14, r3, plus, r1, Offset},
421       "al r14 r3 plus r1 Offset",
422       "PositiveOffset_al_r14_r3_plus_r1_Offset",
423       ARRAY_SIZE(kPositiveOffset),
424       kPositiveOffset},
425      {{al, r12, r7, plus, r4, Offset},
426       "al r12 r7 plus r4 Offset",
427       "PositiveOffset_al_r12_r7_plus_r4_Offset",
428       ARRAY_SIZE(kPositiveOffset),
429       kPositiveOffset},
430      {{al, r0, r12, plus, r11, Offset},
431       "al r0 r12 plus r11 Offset",
432       "PositiveOffset_al_r0_r12_plus_r11_Offset",
433       ARRAY_SIZE(kPositiveOffset),
434       kPositiveOffset},
435      {{al, r5, r10, plus, r9, Offset},
436       "al r5 r10 plus r9 Offset",
437       "PositiveOffset_al_r5_r10_plus_r9_Offset",
438       ARRAY_SIZE(kPositiveOffset),
439       kPositiveOffset},
440      {{al, r6, r9, plus, r10, Offset},
441       "al r6 r9 plus r10 Offset",
442       "PositiveOffset_al_r6_r9_plus_r10_Offset",
443       ARRAY_SIZE(kPositiveOffset),
444       kPositiveOffset},
445      {{al, r1, r2, plus, r14, Offset},
446       "al r1 r2 plus r14 Offset",
447       "PositiveOffset_al_r1_r2_plus_r14_Offset",
448       ARRAY_SIZE(kPositiveOffset),
449       kPositiveOffset},
450      {{al, r4, r6, plus, r10, Offset},
451       "al r4 r6 plus r10 Offset",
452       "PositiveOffset_al_r4_r6_plus_r10_Offset",
453       ARRAY_SIZE(kPositiveOffset),
454       kPositiveOffset},
455      {{al, r1, r14, plus, r9, Offset},
456       "al r1 r14 plus r9 Offset",
457       "PositiveOffset_al_r1_r14_plus_r9_Offset",
458       ARRAY_SIZE(kPositiveOffset),
459       kPositiveOffset},
460      {{al, r14, r4, plus, r8, Offset},
461       "al r14 r4 plus r8 Offset",
462       "PositiveOffset_al_r14_r4_plus_r8_Offset",
463       ARRAY_SIZE(kPositiveOffset),
464       kPositiveOffset},
465      {{al, r9, r11, plus, r4, Offset},
466       "al r9 r11 plus r4 Offset",
467       "PositiveOffset_al_r9_r11_plus_r4_Offset",
468       ARRAY_SIZE(kPositiveOffset),
469       kPositiveOffset},
470      {{al, r9, r7, plus, r12, Offset},
471       "al r9 r7 plus r12 Offset",
472       "PositiveOffset_al_r9_r7_plus_r12_Offset",
473       ARRAY_SIZE(kPositiveOffset),
474       kPositiveOffset},
475      {{al, r8, r6, plus, r11, Offset},
476       "al r8 r6 plus r11 Offset",
477       "PositiveOffset_al_r8_r6_plus_r11_Offset",
478       ARRAY_SIZE(kPositiveOffset),
479       kPositiveOffset},
480      {{al, r1, r12, plus, r4, Offset},
481       "al r1 r12 plus r4 Offset",
482       "PositiveOffset_al_r1_r12_plus_r4_Offset",
483       ARRAY_SIZE(kPositiveOffset),
484       kPositiveOffset},
485      {{al, r3, r7, plus, r10, Offset},
486       "al r3 r7 plus r10 Offset",
487       "PositiveOffset_al_r3_r7_plus_r10_Offset",
488       ARRAY_SIZE(kPositiveOffset),
489       kPositiveOffset},
490      {{al, r11, r4, plus, r7, Offset},
491       "al r11 r4 plus r7 Offset",
492       "PositiveOffset_al_r11_r4_plus_r7_Offset",
493       ARRAY_SIZE(kPositiveOffset),
494       kPositiveOffset},
495      {{al, r3, r7, plus, r0, Offset},
496       "al r3 r7 plus r0 Offset",
497       "PositiveOffset_al_r3_r7_plus_r0_Offset",
498       ARRAY_SIZE(kPositiveOffset),
499       kPositiveOffset},
500      {{al, r4, r0, plus, r2, Offset},
501       "al r4 r0 plus r2 Offset",
502       "PositiveOffset_al_r4_r0_plus_r2_Offset",
503       ARRAY_SIZE(kPositiveOffset),
504       kPositiveOffset},
505      {{al, r5, r14, plus, r6, Offset},
506       "al r5 r14 plus r6 Offset",
507       "PositiveOffset_al_r5_r14_plus_r6_Offset",
508       ARRAY_SIZE(kPositiveOffset),
509       kPositiveOffset},
510      {{al, r6, r14, plus, r9, Offset},
511       "al r6 r14 plus r9 Offset",
512       "PositiveOffset_al_r6_r14_plus_r9_Offset",
513       ARRAY_SIZE(kPositiveOffset),
514       kPositiveOffset},
515      {{al, r2, r9, plus, r6, Offset},
516       "al r2 r9 plus r6 Offset",
517       "PositiveOffset_al_r2_r9_plus_r6_Offset",
518       ARRAY_SIZE(kPositiveOffset),
519       kPositiveOffset},
520      {{al, r1, r3, plus, r4, Offset},
521       "al r1 r3 plus r4 Offset",
522       "PositiveOffset_al_r1_r3_plus_r4_Offset",
523       ARRAY_SIZE(kPositiveOffset),
524       kPositiveOffset},
525      {{al, r5, r11, plus, r8, Offset},
526       "al r5 r11 plus r8 Offset",
527       "PositiveOffset_al_r5_r11_plus_r8_Offset",
528       ARRAY_SIZE(kPositiveOffset),
529       kPositiveOffset},
530      {{al, r11, r9, plus, r3, Offset},
531       "al r11 r9 plus r3 Offset",
532       "PositiveOffset_al_r11_r9_plus_r3_Offset",
533       ARRAY_SIZE(kPositiveOffset),
534       kPositiveOffset},
535      {{al, r4, r12, plus, r5, Offset},
536       "al r4 r12 plus r5 Offset",
537       "PositiveOffset_al_r4_r12_plus_r5_Offset",
538       ARRAY_SIZE(kPositiveOffset),
539       kPositiveOffset},
540      {{al, r7, r8, plus, r12, Offset},
541       "al r7 r8 plus r12 Offset",
542       "PositiveOffset_al_r7_r8_plus_r12_Offset",
543       ARRAY_SIZE(kPositiveOffset),
544       kPositiveOffset},
545      {{al, r10, r14, plus, r6, Offset},
546       "al r10 r14 plus r6 Offset",
547       "PositiveOffset_al_r10_r14_plus_r6_Offset",
548       ARRAY_SIZE(kPositiveOffset),
549       kPositiveOffset},
550      {{al, r1, r6, plus, r10, Offset},
551       "al r1 r6 plus r10 Offset",
552       "PositiveOffset_al_r1_r6_plus_r10_Offset",
553       ARRAY_SIZE(kPositiveOffset),
554       kPositiveOffset},
555      {{al, r2, r6, plus, r3, Offset},
556       "al r2 r6 plus r3 Offset",
557       "PositiveOffset_al_r2_r6_plus_r3_Offset",
558       ARRAY_SIZE(kPositiveOffset),
559       kPositiveOffset},
560      {{al, r9, r10, plus, r6, Offset},
561       "al r9 r10 plus r6 Offset",
562       "PositiveOffset_al_r9_r10_plus_r6_Offset",
563       ARRAY_SIZE(kPositiveOffset),
564       kPositiveOffset},
565      {{al, r8, r3, plus, r10, Offset},
566       "al r8 r3 plus r10 Offset",
567       "PositiveOffset_al_r8_r3_plus_r10_Offset",
568       ARRAY_SIZE(kPositiveOffset),
569       kPositiveOffset},
570      {{al, r5, r9, plus, r12, Offset},
571       "al r5 r9 plus r12 Offset",
572       "PositiveOffset_al_r5_r9_plus_r12_Offset",
573       ARRAY_SIZE(kPositiveOffset),
574       kPositiveOffset},
575      {{al, r3, r0, plus, r12, Offset},
576       "al r3 r0 plus r12 Offset",
577       "PositiveOffset_al_r3_r0_plus_r12_Offset",
578       ARRAY_SIZE(kPositiveOffset),
579       kPositiveOffset},
580      {{al, r3, r8, plus, r2, Offset},
581       "al r3 r8 plus r2 Offset",
582       "PositiveOffset_al_r3_r8_plus_r2_Offset",
583       ARRAY_SIZE(kPositiveOffset),
584       kPositiveOffset},
585      {{al, r9, r5, plus, r6, Offset},
586       "al r9 r5 plus r6 Offset",
587       "PositiveOffset_al_r9_r5_plus_r6_Offset",
588       ARRAY_SIZE(kPositiveOffset),
589       kPositiveOffset},
590      {{al, r3, r0, plus, r9, Offset},
591       "al r3 r0 plus r9 Offset",
592       "PositiveOffset_al_r3_r0_plus_r9_Offset",
593       ARRAY_SIZE(kPositiveOffset),
594       kPositiveOffset},
595      {{al, r7, r12, plus, r9, Offset},
596       "al r7 r12 plus r9 Offset",
597       "PositiveOffset_al_r7_r12_plus_r9_Offset",
598       ARRAY_SIZE(kPositiveOffset),
599       kPositiveOffset},
600      {{al, r10, r3, plus, r0, Offset},
601       "al r10 r3 plus r0 Offset",
602       "PositiveOffset_al_r10_r3_plus_r0_Offset",
603       ARRAY_SIZE(kPositiveOffset),
604       kPositiveOffset},
605      {{al, r1, r14, plus, r11, Offset},
606       "al r1 r14 plus r11 Offset",
607       "PositiveOffset_al_r1_r14_plus_r11_Offset",
608       ARRAY_SIZE(kPositiveOffset),
609       kPositiveOffset},
610      {{al, r11, r10, plus, r6, Offset},
611       "al r11 r10 plus r6 Offset",
612       "PositiveOffset_al_r11_r10_plus_r6_Offset",
613       ARRAY_SIZE(kPositiveOffset),
614       kPositiveOffset},
615      {{al, r9, r11, plus, r6, Offset},
616       "al r9 r11 plus r6 Offset",
617       "PositiveOffset_al_r9_r11_plus_r6_Offset",
618       ARRAY_SIZE(kPositiveOffset),
619       kPositiveOffset},
620      {{al, r4, r0, plus, r5, Offset},
621       "al r4 r0 plus r5 Offset",
622       "PositiveOffset_al_r4_r0_plus_r5_Offset",
623       ARRAY_SIZE(kPositiveOffset),
624       kPositiveOffset},
625      {{al, r10, r14, plus, r4, Offset},
626       "al r10 r14 plus r4 Offset",
627       "PositiveOffset_al_r10_r14_plus_r4_Offset",
628       ARRAY_SIZE(kPositiveOffset),
629       kPositiveOffset},
630      {{al, r11, r7, plus, r14, Offset},
631       "al r11 r7 plus r14 Offset",
632       "PositiveOffset_al_r11_r7_plus_r14_Offset",
633       ARRAY_SIZE(kPositiveOffset),
634       kPositiveOffset},
635      {{al, r8, r2, plus, r9, Offset},
636       "al r8 r2 plus r9 Offset",
637       "PositiveOffset_al_r8_r2_plus_r9_Offset",
638       ARRAY_SIZE(kPositiveOffset),
639       kPositiveOffset},
640      {{al, r7, r2, plus, r11, Offset},
641       "al r7 r2 plus r11 Offset",
642       "PositiveOffset_al_r7_r2_plus_r11_Offset",
643       ARRAY_SIZE(kPositiveOffset),
644       kPositiveOffset},
645      {{al, r12, r6, plus, r14, Offset},
646       "al r12 r6 plus r14 Offset",
647       "PositiveOffset_al_r12_r6_plus_r14_Offset",
648       ARRAY_SIZE(kPositiveOffset),
649       kPositiveOffset},
650      {{al, r3, r2, plus, r1, Offset},
651       "al r3 r2 plus r1 Offset",
652       "PositiveOffset_al_r3_r2_plus_r1_Offset",
653       ARRAY_SIZE(kPositiveOffset),
654       kPositiveOffset},
655      {{al, r14, r5, plus, r12, Offset},
656       "al r14 r5 plus r12 Offset",
657       "PositiveOffset_al_r14_r5_plus_r12_Offset",
658       ARRAY_SIZE(kPositiveOffset),
659       kPositiveOffset},
660      {{al, r4, r9, plus, r2, Offset},
661       "al r4 r9 plus r2 Offset",
662       "PositiveOffset_al_r4_r9_plus_r2_Offset",
663       ARRAY_SIZE(kPositiveOffset),
664       kPositiveOffset},
665      {{al, r5, r4, plus, r7, Offset},
666       "al r5 r4 plus r7 Offset",
667       "PositiveOffset_al_r5_r4_plus_r7_Offset",
668       ARRAY_SIZE(kPositiveOffset),
669       kPositiveOffset},
670      {{al, r7, r2, plus, r14, Offset},
671       "al r7 r2 plus r14 Offset",
672       "PositiveOffset_al_r7_r2_plus_r14_Offset",
673       ARRAY_SIZE(kPositiveOffset),
674       kPositiveOffset},
675      {{al, r4, r8, plus, r2, Offset},
676       "al r4 r8 plus r2 Offset",
677       "PositiveOffset_al_r4_r8_plus_r2_Offset",
678       ARRAY_SIZE(kPositiveOffset),
679       kPositiveOffset},
680      {{al, r7, r5, plus, r6, Offset},
681       "al r7 r5 plus r6 Offset",
682       "PositiveOffset_al_r7_r5_plus_r6_Offset",
683       ARRAY_SIZE(kPositiveOffset),
684       kPositiveOffset},
685      {{al, r11, r8, plus, r6, Offset},
686       "al r11 r8 plus r6 Offset",
687       "PositiveOffset_al_r11_r8_plus_r6_Offset",
688       ARRAY_SIZE(kPositiveOffset),
689       kPositiveOffset},
690      {{al, r8, r0, plus, r1, Offset},
691       "al r8 r0 plus r1 Offset",
692       "PositiveOffset_al_r8_r0_plus_r1_Offset",
693       ARRAY_SIZE(kPositiveOffset),
694       kPositiveOffset},
695      {{al, r4, r9, plus, r8, Offset},
696       "al r4 r9 plus r8 Offset",
697       "PositiveOffset_al_r4_r9_plus_r8_Offset",
698       ARRAY_SIZE(kPositiveOffset),
699       kPositiveOffset},
700      {{al, r7, r1, plus, r12, Offset},
701       "al r7 r1 plus r12 Offset",
702       "PositiveOffset_al_r7_r1_plus_r12_Offset",
703       ARRAY_SIZE(kPositiveOffset),
704       kPositiveOffset},
705      {{al, r12, r14, plus, r11, Offset},
706       "al r12 r14 plus r11 Offset",
707       "PositiveOffset_al_r12_r14_plus_r11_Offset",
708       ARRAY_SIZE(kPositiveOffset),
709       kPositiveOffset},
710      {{al, r1, r6, plus, r5, Offset},
711       "al r1 r6 plus r5 Offset",
712       "PositiveOffset_al_r1_r6_plus_r5_Offset",
713       ARRAY_SIZE(kPositiveOffset),
714       kPositiveOffset},
715      {{al, r9, r10, plus, r1, Offset},
716       "al r9 r10 plus r1 Offset",
717       "PositiveOffset_al_r9_r10_plus_r1_Offset",
718       ARRAY_SIZE(kPositiveOffset),
719       kPositiveOffset},
720      {{al, r8, r14, plus, r10, Offset},
721       "al r8 r14 plus r10 Offset",
722       "PositiveOffset_al_r8_r14_plus_r10_Offset",
723       ARRAY_SIZE(kPositiveOffset),
724       kPositiveOffset},
725      {{al, r12, r10, plus, r0, Offset},
726       "al r12 r10 plus r0 Offset",
727       "PositiveOffset_al_r12_r10_plus_r0_Offset",
728       ARRAY_SIZE(kPositiveOffset),
729       kPositiveOffset},
730      {{al, r6, r2, plus, r10, Offset},
731       "al r6 r2 plus r10 Offset",
732       "PositiveOffset_al_r6_r2_plus_r10_Offset",
733       ARRAY_SIZE(kPositiveOffset),
734       kPositiveOffset},
735      {{al, r9, r1, plus, r5, Offset},
736       "al r9 r1 plus r5 Offset",
737       "PositiveOffset_al_r9_r1_plus_r5_Offset",
738       ARRAY_SIZE(kPositiveOffset),
739       kPositiveOffset},
740      {{al, r4, r6, plus, r5, Offset},
741       "al r4 r6 plus r5 Offset",
742       "PositiveOffset_al_r4_r6_plus_r5_Offset",
743       ARRAY_SIZE(kPositiveOffset),
744       kPositiveOffset},
745      {{al, r12, r5, plus, r11, Offset},
746       "al r12 r5 plus r11 Offset",
747       "PositiveOffset_al_r12_r5_plus_r11_Offset",
748       ARRAY_SIZE(kPositiveOffset),
749       kPositiveOffset},
750      {{al, r0, r2, plus, r1, Offset},
751       "al r0 r2 plus r1 Offset",
752       "PositiveOffset_al_r0_r2_plus_r1_Offset",
753       ARRAY_SIZE(kPositiveOffset),
754       kPositiveOffset},
755      {{al, r9, r1, plus, r8, Offset},
756       "al r9 r1 plus r8 Offset",
757       "PositiveOffset_al_r9_r1_plus_r8_Offset",
758       ARRAY_SIZE(kPositiveOffset),
759       kPositiveOffset},
760      {{al, r6, r4, plus, r9, Offset},
761       "al r6 r4 plus r9 Offset",
762       "PositiveOffset_al_r6_r4_plus_r9_Offset",
763       ARRAY_SIZE(kPositiveOffset),
764       kPositiveOffset},
765      {{al, r11, r2, plus, r7, Offset},
766       "al r11 r2 plus r7 Offset",
767       "PositiveOffset_al_r11_r2_plus_r7_Offset",
768       ARRAY_SIZE(kPositiveOffset),
769       kPositiveOffset},
770      {{al, r11, r4, plus, r0, Offset},
771       "al r11 r4 plus r0 Offset",
772       "PositiveOffset_al_r11_r4_plus_r0_Offset",
773       ARRAY_SIZE(kPositiveOffset),
774       kPositiveOffset},
775      {{al, r2, r11, plus, r7, Offset},
776       "al r2 r11 plus r7 Offset",
777       "PositiveOffset_al_r2_r11_plus_r7_Offset",
778       ARRAY_SIZE(kPositiveOffset),
779       kPositiveOffset},
780      {{al, r3, r7, plus, r5, Offset},
781       "al r3 r7 plus r5 Offset",
782       "PositiveOffset_al_r3_r7_plus_r5_Offset",
783       ARRAY_SIZE(kPositiveOffset),
784       kPositiveOffset},
785      {{al, r1, r0, plus, r4, Offset},
786       "al r1 r0 plus r4 Offset",
787       "PositiveOffset_al_r1_r0_plus_r4_Offset",
788       ARRAY_SIZE(kPositiveOffset),
789       kPositiveOffset},
790      {{al, r10, r12, plus, r0, Offset},
791       "al r10 r12 plus r0 Offset",
792       "PositiveOffset_al_r10_r12_plus_r0_Offset",
793       ARRAY_SIZE(kPositiveOffset),
794       kPositiveOffset},
795      {{al, r5, r0, plus, r11, Offset},
796       "al r5 r0 plus r11 Offset",
797       "PositiveOffset_al_r5_r0_plus_r11_Offset",
798       ARRAY_SIZE(kPositiveOffset),
799       kPositiveOffset},
800      {{al, r3, r5, plus, r7, Offset},
801       "al r3 r5 plus r7 Offset",
802       "PositiveOffset_al_r3_r5_plus_r7_Offset",
803       ARRAY_SIZE(kPositiveOffset),
804       kPositiveOffset},
805      {{al, r2, r14, plus, r4, Offset},
806       "al r2 r14 plus r4 Offset",
807       "PositiveOffset_al_r2_r14_plus_r4_Offset",
808       ARRAY_SIZE(kPositiveOffset),
809       kPositiveOffset},
810      {{al, r3, r12, plus, r10, Offset},
811       "al r3 r12 plus r10 Offset",
812       "PositiveOffset_al_r3_r12_plus_r10_Offset",
813       ARRAY_SIZE(kPositiveOffset),
814       kPositiveOffset},
815      {{al, r0, r11, plus, r1, Offset},
816       "al r0 r11 plus r1 Offset",
817       "PositiveOffset_al_r0_r11_plus_r1_Offset",
818       ARRAY_SIZE(kPositiveOffset),
819       kPositiveOffset},
820      {{al, r2, r14, plus, r6, Offset},
821       "al r2 r14 plus r6 Offset",
822       "PositiveOffset_al_r2_r14_plus_r6_Offset",
823       ARRAY_SIZE(kPositiveOffset),
824       kPositiveOffset},
825      {{al, r0, r10, plus, r11, Offset},
826       "al r0 r10 plus r11 Offset",
827       "PositiveOffset_al_r0_r10_plus_r11_Offset",
828       ARRAY_SIZE(kPositiveOffset),
829       kPositiveOffset},
830      {{al, r14, r10, plus, r2, Offset},
831       "al r14 r10 plus r2 Offset",
832       "PositiveOffset_al_r14_r10_plus_r2_Offset",
833       ARRAY_SIZE(kPositiveOffset),
834       kPositiveOffset},
835      {{al, r9, r7, minus, r8, Offset},
836       "al r9 r7 minus r8 Offset",
837       "NegativeOffset_al_r9_r7_minus_r8_Offset",
838       ARRAY_SIZE(kNegativeOffset),
839       kNegativeOffset},
840      {{al, r0, r6, minus, r2, Offset},
841       "al r0 r6 minus r2 Offset",
842       "NegativeOffset_al_r0_r6_minus_r2_Offset",
843       ARRAY_SIZE(kNegativeOffset),
844       kNegativeOffset},
845      {{al, r3, r0, minus, r7, Offset},
846       "al r3 r0 minus r7 Offset",
847       "NegativeOffset_al_r3_r0_minus_r7_Offset",
848       ARRAY_SIZE(kNegativeOffset),
849       kNegativeOffset},
850      {{al, r3, r0, minus, r2, Offset},
851       "al r3 r0 minus r2 Offset",
852       "NegativeOffset_al_r3_r0_minus_r2_Offset",
853       ARRAY_SIZE(kNegativeOffset),
854       kNegativeOffset},
855      {{al, r7, r10, minus, r0, Offset},
856       "al r7 r10 minus r0 Offset",
857       "NegativeOffset_al_r7_r10_minus_r0_Offset",
858       ARRAY_SIZE(kNegativeOffset),
859       kNegativeOffset},
860      {{al, r1, r11, minus, r10, Offset},
861       "al r1 r11 minus r10 Offset",
862       "NegativeOffset_al_r1_r11_minus_r10_Offset",
863       ARRAY_SIZE(kNegativeOffset),
864       kNegativeOffset},
865      {{al, r8, r7, minus, r3, Offset},
866       "al r8 r7 minus r3 Offset",
867       "NegativeOffset_al_r8_r7_minus_r3_Offset",
868       ARRAY_SIZE(kNegativeOffset),
869       kNegativeOffset},
870      {{al, r6, r5, minus, r4, Offset},
871       "al r6 r5 minus r4 Offset",
872       "NegativeOffset_al_r6_r5_minus_r4_Offset",
873       ARRAY_SIZE(kNegativeOffset),
874       kNegativeOffset},
875      {{al, r3, r10, minus, r6, Offset},
876       "al r3 r10 minus r6 Offset",
877       "NegativeOffset_al_r3_r10_minus_r6_Offset",
878       ARRAY_SIZE(kNegativeOffset),
879       kNegativeOffset},
880      {{al, r3, r14, minus, r0, Offset},
881       "al r3 r14 minus r0 Offset",
882       "NegativeOffset_al_r3_r14_minus_r0_Offset",
883       ARRAY_SIZE(kNegativeOffset),
884       kNegativeOffset},
885      {{al, r10, r4, minus, r5, Offset},
886       "al r10 r4 minus r5 Offset",
887       "NegativeOffset_al_r10_r4_minus_r5_Offset",
888       ARRAY_SIZE(kNegativeOffset),
889       kNegativeOffset},
890      {{al, r10, r0, minus, r11, Offset},
891       "al r10 r0 minus r11 Offset",
892       "NegativeOffset_al_r10_r0_minus_r11_Offset",
893       ARRAY_SIZE(kNegativeOffset),
894       kNegativeOffset},
895      {{al, r7, r0, minus, r10, Offset},
896       "al r7 r0 minus r10 Offset",
897       "NegativeOffset_al_r7_r0_minus_r10_Offset",
898       ARRAY_SIZE(kNegativeOffset),
899       kNegativeOffset},
900      {{al, r9, r4, minus, r10, Offset},
901       "al r9 r4 minus r10 Offset",
902       "NegativeOffset_al_r9_r4_minus_r10_Offset",
903       ARRAY_SIZE(kNegativeOffset),
904       kNegativeOffset},
905      {{al, r6, r3, minus, r10, Offset},
906       "al r6 r3 minus r10 Offset",
907       "NegativeOffset_al_r6_r3_minus_r10_Offset",
908       ARRAY_SIZE(kNegativeOffset),
909       kNegativeOffset},
910      {{al, r14, r2, minus, r8, Offset},
911       "al r14 r2 minus r8 Offset",
912       "NegativeOffset_al_r14_r2_minus_r8_Offset",
913       ARRAY_SIZE(kNegativeOffset),
914       kNegativeOffset},
915      {{al, r14, r8, minus, r1, Offset},
916       "al r14 r8 minus r1 Offset",
917       "NegativeOffset_al_r14_r8_minus_r1_Offset",
918       ARRAY_SIZE(kNegativeOffset),
919       kNegativeOffset},
920      {{al, r9, r6, minus, r11, Offset},
921       "al r9 r6 minus r11 Offset",
922       "NegativeOffset_al_r9_r6_minus_r11_Offset",
923       ARRAY_SIZE(kNegativeOffset),
924       kNegativeOffset},
925      {{al, r11, r7, minus, r6, Offset},
926       "al r11 r7 minus r6 Offset",
927       "NegativeOffset_al_r11_r7_minus_r6_Offset",
928       ARRAY_SIZE(kNegativeOffset),
929       kNegativeOffset},
930      {{al, r8, r5, minus, r7, Offset},
931       "al r8 r5 minus r7 Offset",
932       "NegativeOffset_al_r8_r5_minus_r7_Offset",
933       ARRAY_SIZE(kNegativeOffset),
934       kNegativeOffset},
935      {{al, r1, r2, minus, r10, Offset},
936       "al r1 r2 minus r10 Offset",
937       "NegativeOffset_al_r1_r2_minus_r10_Offset",
938       ARRAY_SIZE(kNegativeOffset),
939       kNegativeOffset},
940      {{al, r0, r12, minus, r5, Offset},
941       "al r0 r12 minus r5 Offset",
942       "NegativeOffset_al_r0_r12_minus_r5_Offset",
943       ARRAY_SIZE(kNegativeOffset),
944       kNegativeOffset},
945      {{al, r7, r8, minus, r1, Offset},
946       "al r7 r8 minus r1 Offset",
947       "NegativeOffset_al_r7_r8_minus_r1_Offset",
948       ARRAY_SIZE(kNegativeOffset),
949       kNegativeOffset},
950      {{al, r4, r12, minus, r6, Offset},
951       "al r4 r12 minus r6 Offset",
952       "NegativeOffset_al_r4_r12_minus_r6_Offset",
953       ARRAY_SIZE(kNegativeOffset),
954       kNegativeOffset},
955      {{al, r2, r11, minus, r9, Offset},
956       "al r2 r11 minus r9 Offset",
957       "NegativeOffset_al_r2_r11_minus_r9_Offset",
958       ARRAY_SIZE(kNegativeOffset),
959       kNegativeOffset},
960      {{al, r4, r14, minus, r11, Offset},
961       "al r4 r14 minus r11 Offset",
962       "NegativeOffset_al_r4_r14_minus_r11_Offset",
963       ARRAY_SIZE(kNegativeOffset),
964       kNegativeOffset},
965      {{al, r8, r5, minus, r6, Offset},
966       "al r8 r5 minus r6 Offset",
967       "NegativeOffset_al_r8_r5_minus_r6_Offset",
968       ARRAY_SIZE(kNegativeOffset),
969       kNegativeOffset},
970      {{al, r10, r11, minus, r8, Offset},
971       "al r10 r11 minus r8 Offset",
972       "NegativeOffset_al_r10_r11_minus_r8_Offset",
973       ARRAY_SIZE(kNegativeOffset),
974       kNegativeOffset},
975      {{al, r14, r4, minus, r2, Offset},
976       "al r14 r4 minus r2 Offset",
977       "NegativeOffset_al_r14_r4_minus_r2_Offset",
978       ARRAY_SIZE(kNegativeOffset),
979       kNegativeOffset},
980      {{al, r2, r4, minus, r12, Offset},
981       "al r2 r4 minus r12 Offset",
982       "NegativeOffset_al_r2_r4_minus_r12_Offset",
983       ARRAY_SIZE(kNegativeOffset),
984       kNegativeOffset},
985      {{al, r0, r4, minus, r8, Offset},
986       "al r0 r4 minus r8 Offset",
987       "NegativeOffset_al_r0_r4_minus_r8_Offset",
988       ARRAY_SIZE(kNegativeOffset),
989       kNegativeOffset},
990      {{al, r14, r5, minus, r0, Offset},
991       "al r14 r5 minus r0 Offset",
992       "NegativeOffset_al_r14_r5_minus_r0_Offset",
993       ARRAY_SIZE(kNegativeOffset),
994       kNegativeOffset},
995      {{al, r8, r4, minus, r9, Offset},
996       "al r8 r4 minus r9 Offset",
997       "NegativeOffset_al_r8_r4_minus_r9_Offset",
998       ARRAY_SIZE(kNegativeOffset),
999       kNegativeOffset},
1000      {{al, r7, r11, minus, r2, Offset},
1001       "al r7 r11 minus r2 Offset",
1002       "NegativeOffset_al_r7_r11_minus_r2_Offset",
1003       ARRAY_SIZE(kNegativeOffset),
1004       kNegativeOffset},
1005      {{al, r7, r5, minus, r10, Offset},
1006       "al r7 r5 minus r10 Offset",
1007       "NegativeOffset_al_r7_r5_minus_r10_Offset",
1008       ARRAY_SIZE(kNegativeOffset),
1009       kNegativeOffset},
1010      {{al, r5, r0, minus, r14, Offset},
1011       "al r5 r0 minus r14 Offset",
1012       "NegativeOffset_al_r5_r0_minus_r14_Offset",
1013       ARRAY_SIZE(kNegativeOffset),
1014       kNegativeOffset},
1015      {{al, r1, r10, minus, r12, Offset},
1016       "al r1 r10 minus r12 Offset",
1017       "NegativeOffset_al_r1_r10_minus_r12_Offset",
1018       ARRAY_SIZE(kNegativeOffset),
1019       kNegativeOffset},
1020      {{al, r0, r14, minus, r10, Offset},
1021       "al r0 r14 minus r10 Offset",
1022       "NegativeOffset_al_r0_r14_minus_r10_Offset",
1023       ARRAY_SIZE(kNegativeOffset),
1024       kNegativeOffset},
1025      {{al, r5, r10, minus, r4, Offset},
1026       "al r5 r10 minus r4 Offset",
1027       "NegativeOffset_al_r5_r10_minus_r4_Offset",
1028       ARRAY_SIZE(kNegativeOffset),
1029       kNegativeOffset},
1030      {{al, r8, r5, minus, r4, Offset},
1031       "al r8 r5 minus r4 Offset",
1032       "NegativeOffset_al_r8_r5_minus_r4_Offset",
1033       ARRAY_SIZE(kNegativeOffset),
1034       kNegativeOffset},
1035      {{al, r9, r5, minus, r3, Offset},
1036       "al r9 r5 minus r3 Offset",
1037       "NegativeOffset_al_r9_r5_minus_r3_Offset",
1038       ARRAY_SIZE(kNegativeOffset),
1039       kNegativeOffset},
1040      {{al, r9, r3, minus, r11, Offset},
1041       "al r9 r3 minus r11 Offset",
1042       "NegativeOffset_al_r9_r3_minus_r11_Offset",
1043       ARRAY_SIZE(kNegativeOffset),
1044       kNegativeOffset},
1045      {{al, r9, r11, minus, r1, Offset},
1046       "al r9 r11 minus r1 Offset",
1047       "NegativeOffset_al_r9_r11_minus_r1_Offset",
1048       ARRAY_SIZE(kNegativeOffset),
1049       kNegativeOffset},
1050      {{al, r11, r8, minus, r1, Offset},
1051       "al r11 r8 minus r1 Offset",
1052       "NegativeOffset_al_r11_r8_minus_r1_Offset",
1053       ARRAY_SIZE(kNegativeOffset),
1054       kNegativeOffset},
1055      {{al, r5, r12, minus, r14, Offset},
1056       "al r5 r12 minus r14 Offset",
1057       "NegativeOffset_al_r5_r12_minus_r14_Offset",
1058       ARRAY_SIZE(kNegativeOffset),
1059       kNegativeOffset},
1060      {{al, r5, r0, minus, r7, Offset},
1061       "al r5 r0 minus r7 Offset",
1062       "NegativeOffset_al_r5_r0_minus_r7_Offset",
1063       ARRAY_SIZE(kNegativeOffset),
1064       kNegativeOffset},
1065      {{al, r1, r3, minus, r6, Offset},
1066       "al r1 r3 minus r6 Offset",
1067       "NegativeOffset_al_r1_r3_minus_r6_Offset",
1068       ARRAY_SIZE(kNegativeOffset),
1069       kNegativeOffset},
1070      {{al, r12, r5, minus, r14, Offset},
1071       "al r12 r5 minus r14 Offset",
1072       "NegativeOffset_al_r12_r5_minus_r14_Offset",
1073       ARRAY_SIZE(kNegativeOffset),
1074       kNegativeOffset},
1075      {{al, r7, r9, minus, r6, Offset},
1076       "al r7 r9 minus r6 Offset",
1077       "NegativeOffset_al_r7_r9_minus_r6_Offset",
1078       ARRAY_SIZE(kNegativeOffset),
1079       kNegativeOffset},
1080      {{al, r10, r0, minus, r2, Offset},
1081       "al r10 r0 minus r2 Offset",
1082       "NegativeOffset_al_r10_r0_minus_r2_Offset",
1083       ARRAY_SIZE(kNegativeOffset),
1084       kNegativeOffset},
1085      {{al, r8, r10, minus, r6, Offset},
1086       "al r8 r10 minus r6 Offset",
1087       "NegativeOffset_al_r8_r10_minus_r6_Offset",
1088       ARRAY_SIZE(kNegativeOffset),
1089       kNegativeOffset},
1090      {{al, r4, r9, minus, r2, Offset},
1091       "al r4 r9 minus r2 Offset",
1092       "NegativeOffset_al_r4_r9_minus_r2_Offset",
1093       ARRAY_SIZE(kNegativeOffset),
1094       kNegativeOffset},
1095      {{al, r11, r1, minus, r14, Offset},
1096       "al r11 r1 minus r14 Offset",
1097       "NegativeOffset_al_r11_r1_minus_r14_Offset",
1098       ARRAY_SIZE(kNegativeOffset),
1099       kNegativeOffset},
1100      {{al, r10, r11, minus, r2, Offset},
1101       "al r10 r11 minus r2 Offset",
1102       "NegativeOffset_al_r10_r11_minus_r2_Offset",
1103       ARRAY_SIZE(kNegativeOffset),
1104       kNegativeOffset},
1105      {{al, r5, r7, minus, r14, Offset},
1106       "al r5 r7 minus r14 Offset",
1107       "NegativeOffset_al_r5_r7_minus_r14_Offset",
1108       ARRAY_SIZE(kNegativeOffset),
1109       kNegativeOffset},
1110      {{al, r7, r14, minus, r5, Offset},
1111       "al r7 r14 minus r5 Offset",
1112       "NegativeOffset_al_r7_r14_minus_r5_Offset",
1113       ARRAY_SIZE(kNegativeOffset),
1114       kNegativeOffset},
1115      {{al, r14, r11, minus, r10, Offset},
1116       "al r14 r11 minus r10 Offset",
1117       "NegativeOffset_al_r14_r11_minus_r10_Offset",
1118       ARRAY_SIZE(kNegativeOffset),
1119       kNegativeOffset},
1120      {{al, r10, r4, minus, r12, Offset},
1121       "al r10 r4 minus r12 Offset",
1122       "NegativeOffset_al_r10_r4_minus_r12_Offset",
1123       ARRAY_SIZE(kNegativeOffset),
1124       kNegativeOffset},
1125      {{al, r10, r12, minus, r6, Offset},
1126       "al r10 r12 minus r6 Offset",
1127       "NegativeOffset_al_r10_r12_minus_r6_Offset",
1128       ARRAY_SIZE(kNegativeOffset),
1129       kNegativeOffset},
1130      {{al, r8, r11, minus, r9, Offset},
1131       "al r8 r11 minus r9 Offset",
1132       "NegativeOffset_al_r8_r11_minus_r9_Offset",
1133       ARRAY_SIZE(kNegativeOffset),
1134       kNegativeOffset},
1135      {{al, r9, r1, minus, r3, Offset},
1136       "al r9 r1 minus r3 Offset",
1137       "NegativeOffset_al_r9_r1_minus_r3_Offset",
1138       ARRAY_SIZE(kNegativeOffset),
1139       kNegativeOffset},
1140      {{al, r4, r12, minus, r14, Offset},
1141       "al r4 r12 minus r14 Offset",
1142       "NegativeOffset_al_r4_r12_minus_r14_Offset",
1143       ARRAY_SIZE(kNegativeOffset),
1144       kNegativeOffset},
1145      {{al, r8, r11, minus, r1, Offset},
1146       "al r8 r11 minus r1 Offset",
1147       "NegativeOffset_al_r8_r11_minus_r1_Offset",
1148       ARRAY_SIZE(kNegativeOffset),
1149       kNegativeOffset},
1150      {{al, r3, r2, minus, r8, Offset},
1151       "al r3 r2 minus r8 Offset",
1152       "NegativeOffset_al_r3_r2_minus_r8_Offset",
1153       ARRAY_SIZE(kNegativeOffset),
1154       kNegativeOffset},
1155      {{al, r5, r3, minus, r8, Offset},
1156       "al r5 r3 minus r8 Offset",
1157       "NegativeOffset_al_r5_r3_minus_r8_Offset",
1158       ARRAY_SIZE(kNegativeOffset),
1159       kNegativeOffset},
1160      {{al, r9, r7, minus, r0, Offset},
1161       "al r9 r7 minus r0 Offset",
1162       "NegativeOffset_al_r9_r7_minus_r0_Offset",
1163       ARRAY_SIZE(kNegativeOffset),
1164       kNegativeOffset},
1165      {{al, r6, r12, minus, r8, Offset},
1166       "al r6 r12 minus r8 Offset",
1167       "NegativeOffset_al_r6_r12_minus_r8_Offset",
1168       ARRAY_SIZE(kNegativeOffset),
1169       kNegativeOffset},
1170      {{al, r10, r8, minus, r9, Offset},
1171       "al r10 r8 minus r9 Offset",
1172       "NegativeOffset_al_r10_r8_minus_r9_Offset",
1173       ARRAY_SIZE(kNegativeOffset),
1174       kNegativeOffset},
1175      {{al, r11, r0, minus, r3, Offset},
1176       "al r11 r0 minus r3 Offset",
1177       "NegativeOffset_al_r11_r0_minus_r3_Offset",
1178       ARRAY_SIZE(kNegativeOffset),
1179       kNegativeOffset},
1180      {{al, r10, r0, minus, r6, Offset},
1181       "al r10 r0 minus r6 Offset",
1182       "NegativeOffset_al_r10_r0_minus_r6_Offset",
1183       ARRAY_SIZE(kNegativeOffset),
1184       kNegativeOffset},
1185      {{al, r11, r10, minus, r12, Offset},
1186       "al r11 r10 minus r12 Offset",
1187       "NegativeOffset_al_r11_r10_minus_r12_Offset",
1188       ARRAY_SIZE(kNegativeOffset),
1189       kNegativeOffset},
1190      {{al, r0, r1, minus, r2, Offset},
1191       "al r0 r1 minus r2 Offset",
1192       "NegativeOffset_al_r0_r1_minus_r2_Offset",
1193       ARRAY_SIZE(kNegativeOffset),
1194       kNegativeOffset},
1195      {{al, r5, r9, minus, r2, Offset},
1196       "al r5 r9 minus r2 Offset",
1197       "NegativeOffset_al_r5_r9_minus_r2_Offset",
1198       ARRAY_SIZE(kNegativeOffset),
1199       kNegativeOffset},
1200      {{al, r14, r6, minus, r5, Offset},
1201       "al r14 r6 minus r5 Offset",
1202       "NegativeOffset_al_r14_r6_minus_r5_Offset",
1203       ARRAY_SIZE(kNegativeOffset),
1204       kNegativeOffset},
1205      {{al, r6, r9, minus, r1, Offset},
1206       "al r6 r9 minus r1 Offset",
1207       "NegativeOffset_al_r6_r9_minus_r1_Offset",
1208       ARRAY_SIZE(kNegativeOffset),
1209       kNegativeOffset},
1210      {{al, r3, r2, minus, r6, Offset},
1211       "al r3 r2 minus r6 Offset",
1212       "NegativeOffset_al_r3_r2_minus_r6_Offset",
1213       ARRAY_SIZE(kNegativeOffset),
1214       kNegativeOffset},
1215      {{al, r2, r0, minus, r8, Offset},
1216       "al r2 r0 minus r8 Offset",
1217       "NegativeOffset_al_r2_r0_minus_r8_Offset",
1218       ARRAY_SIZE(kNegativeOffset),
1219       kNegativeOffset},
1220      {{al, r11, r0, minus, r8, Offset},
1221       "al r11 r0 minus r8 Offset",
1222       "NegativeOffset_al_r11_r0_minus_r8_Offset",
1223       ARRAY_SIZE(kNegativeOffset),
1224       kNegativeOffset},
1225      {{al, r6, r7, minus, r12, Offset},
1226       "al r6 r7 minus r12 Offset",
1227       "NegativeOffset_al_r6_r7_minus_r12_Offset",
1228       ARRAY_SIZE(kNegativeOffset),
1229       kNegativeOffset},
1230      {{al, r0, r2, minus, r9, Offset},
1231       "al r0 r2 minus r9 Offset",
1232       "NegativeOffset_al_r0_r2_minus_r9_Offset",
1233       ARRAY_SIZE(kNegativeOffset),
1234       kNegativeOffset},
1235      {{al, r1, r10, minus, r8, Offset},
1236       "al r1 r10 minus r8 Offset",
1237       "NegativeOffset_al_r1_r10_minus_r8_Offset",
1238       ARRAY_SIZE(kNegativeOffset),
1239       kNegativeOffset},
1240      {{al, r5, r3, minus, r2, Offset},
1241       "al r5 r3 minus r2 Offset",
1242       "NegativeOffset_al_r5_r3_minus_r2_Offset",
1243       ARRAY_SIZE(kNegativeOffset),
1244       kNegativeOffset},
1245      {{al, r6, r11, minus, r8, Offset},
1246       "al r6 r11 minus r8 Offset",
1247       "NegativeOffset_al_r6_r11_minus_r8_Offset",
1248       ARRAY_SIZE(kNegativeOffset),
1249       kNegativeOffset},
1250      {{al, r6, r11, minus, r9, Offset},
1251       "al r6 r11 minus r9 Offset",
1252       "NegativeOffset_al_r6_r11_minus_r9_Offset",
1253       ARRAY_SIZE(kNegativeOffset),
1254       kNegativeOffset},
1255      {{al, r14, r12, minus, r9, Offset},
1256       "al r14 r12 minus r9 Offset",
1257       "NegativeOffset_al_r14_r12_minus_r9_Offset",
1258       ARRAY_SIZE(kNegativeOffset),
1259       kNegativeOffset},
1260      {{al, r3, r4, minus, r2, Offset},
1261       "al r3 r4 minus r2 Offset",
1262       "NegativeOffset_al_r3_r4_minus_r2_Offset",
1263       ARRAY_SIZE(kNegativeOffset),
1264       kNegativeOffset},
1265      {{al, r7, r3, minus, r8, Offset},
1266       "al r7 r3 minus r8 Offset",
1267       "NegativeOffset_al_r7_r3_minus_r8_Offset",
1268       ARRAY_SIZE(kNegativeOffset),
1269       kNegativeOffset},
1270      {{al, r6, r14, minus, r8, Offset},
1271       "al r6 r14 minus r8 Offset",
1272       "NegativeOffset_al_r6_r14_minus_r8_Offset",
1273       ARRAY_SIZE(kNegativeOffset),
1274       kNegativeOffset},
1275      {{al, r11, r10, minus, r14, Offset},
1276       "al r11 r10 minus r14 Offset",
1277       "NegativeOffset_al_r11_r10_minus_r14_Offset",
1278       ARRAY_SIZE(kNegativeOffset),
1279       kNegativeOffset},
1280      {{al, r3, r4, minus, r7, Offset},
1281       "al r3 r4 minus r7 Offset",
1282       "NegativeOffset_al_r3_r4_minus_r7_Offset",
1283       ARRAY_SIZE(kNegativeOffset),
1284       kNegativeOffset},
1285      {{al, r9, r6, minus, r0, Offset},
1286       "al r9 r6 minus r0 Offset",
1287       "NegativeOffset_al_r9_r6_minus_r0_Offset",
1288       ARRAY_SIZE(kNegativeOffset),
1289       kNegativeOffset},
1290      {{al, r10, r3, minus, r2, Offset},
1291       "al r10 r3 minus r2 Offset",
1292       "NegativeOffset_al_r10_r3_minus_r2_Offset",
1293       ARRAY_SIZE(kNegativeOffset),
1294       kNegativeOffset},
1295      {{al, r10, r5, minus, r1, Offset},
1296       "al r10 r5 minus r1 Offset",
1297       "NegativeOffset_al_r10_r5_minus_r1_Offset",
1298       ARRAY_SIZE(kNegativeOffset),
1299       kNegativeOffset},
1300      {{al, r10, r11, minus, r9, Offset},
1301       "al r10 r11 minus r9 Offset",
1302       "NegativeOffset_al_r10_r11_minus_r9_Offset",
1303       ARRAY_SIZE(kNegativeOffset),
1304       kNegativeOffset},
1305      {{al, r3, r1, minus, r8, Offset},
1306       "al r3 r1 minus r8 Offset",
1307       "NegativeOffset_al_r3_r1_minus_r8_Offset",
1308       ARRAY_SIZE(kNegativeOffset),
1309       kNegativeOffset},
1310      {{al, r6, r1, minus, r2, Offset},
1311       "al r6 r1 minus r2 Offset",
1312       "NegativeOffset_al_r6_r1_minus_r2_Offset",
1313       ARRAY_SIZE(kNegativeOffset),
1314       kNegativeOffset},
1315      {{al, r7, r6, minus, r14, Offset},
1316       "al r7 r6 minus r14 Offset",
1317       "NegativeOffset_al_r7_r6_minus_r14_Offset",
1318       ARRAY_SIZE(kNegativeOffset),
1319       kNegativeOffset},
1320      {{al, r3, r9, minus, r5, Offset},
1321       "al r3 r9 minus r5 Offset",
1322       "NegativeOffset_al_r3_r9_minus_r5_Offset",
1323       ARRAY_SIZE(kNegativeOffset),
1324       kNegativeOffset},
1325      {{al, r10, r7, minus, r2, Offset},
1326       "al r10 r7 minus r2 Offset",
1327       "NegativeOffset_al_r10_r7_minus_r2_Offset",
1328       ARRAY_SIZE(kNegativeOffset),
1329       kNegativeOffset},
1330      {{al, r12, r9, minus, r7, Offset},
1331       "al r12 r9 minus r7 Offset",
1332       "NegativeOffset_al_r12_r9_minus_r7_Offset",
1333       ARRAY_SIZE(kNegativeOffset),
1334       kNegativeOffset},
1335      {{al, r8, r11, plus, r4, PostIndex},
1336       "al r8 r11 plus r4 PostIndex",
1337       "PositivePostIndex_al_r8_r11_plus_r4_PostIndex",
1338       ARRAY_SIZE(kPositivePostIndex),
1339       kPositivePostIndex},
1340      {{al, r4, r1, plus, r2, PostIndex},
1341       "al r4 r1 plus r2 PostIndex",
1342       "PositivePostIndex_al_r4_r1_plus_r2_PostIndex",
1343       ARRAY_SIZE(kPositivePostIndex),
1344       kPositivePostIndex},
1345      {{al, r0, r7, plus, r5, PostIndex},
1346       "al r0 r7 plus r5 PostIndex",
1347       "PositivePostIndex_al_r0_r7_plus_r5_PostIndex",
1348       ARRAY_SIZE(kPositivePostIndex),
1349       kPositivePostIndex},
1350      {{al, r3, r6, plus, r10, PostIndex},
1351       "al r3 r6 plus r10 PostIndex",
1352       "PositivePostIndex_al_r3_r6_plus_r10_PostIndex",
1353       ARRAY_SIZE(kPositivePostIndex),
1354       kPositivePostIndex},
1355      {{al, r7, r3, plus, r6, PostIndex},
1356       "al r7 r3 plus r6 PostIndex",
1357       "PositivePostIndex_al_r7_r3_plus_r6_PostIndex",
1358       ARRAY_SIZE(kPositivePostIndex),
1359       kPositivePostIndex},
1360      {{al, r14, r0, plus, r3, PostIndex},
1361       "al r14 r0 plus r3 PostIndex",
1362       "PositivePostIndex_al_r14_r0_plus_r3_PostIndex",
1363       ARRAY_SIZE(kPositivePostIndex),
1364       kPositivePostIndex},
1365      {{al, r11, r0, plus, r2, PostIndex},
1366       "al r11 r0 plus r2 PostIndex",
1367       "PositivePostIndex_al_r11_r0_plus_r2_PostIndex",
1368       ARRAY_SIZE(kPositivePostIndex),
1369       kPositivePostIndex},
1370      {{al, r11, r14, plus, r3, PostIndex},
1371       "al r11 r14 plus r3 PostIndex",
1372       "PositivePostIndex_al_r11_r14_plus_r3_PostIndex",
1373       ARRAY_SIZE(kPositivePostIndex),
1374       kPositivePostIndex},
1375      {{al, r10, r3, plus, r14, PostIndex},
1376       "al r10 r3 plus r14 PostIndex",
1377       "PositivePostIndex_al_r10_r3_plus_r14_PostIndex",
1378       ARRAY_SIZE(kPositivePostIndex),
1379       kPositivePostIndex},
1380      {{al, r3, r10, plus, r4, PostIndex},
1381       "al r3 r10 plus r4 PostIndex",
1382       "PositivePostIndex_al_r3_r10_plus_r4_PostIndex",
1383       ARRAY_SIZE(kPositivePostIndex),
1384       kPositivePostIndex},
1385      {{al, r14, r0, plus, r11, PostIndex},
1386       "al r14 r0 plus r11 PostIndex",
1387       "PositivePostIndex_al_r14_r0_plus_r11_PostIndex",
1388       ARRAY_SIZE(kPositivePostIndex),
1389       kPositivePostIndex},
1390      {{al, r10, r1, plus, r14, PostIndex},
1391       "al r10 r1 plus r14 PostIndex",
1392       "PositivePostIndex_al_r10_r1_plus_r14_PostIndex",
1393       ARRAY_SIZE(kPositivePostIndex),
1394       kPositivePostIndex},
1395      {{al, r7, r2, plus, r10, PostIndex},
1396       "al r7 r2 plus r10 PostIndex",
1397       "PositivePostIndex_al_r7_r2_plus_r10_PostIndex",
1398       ARRAY_SIZE(kPositivePostIndex),
1399       kPositivePostIndex},
1400      {{al, r4, r11, plus, r9, PostIndex},
1401       "al r4 r11 plus r9 PostIndex",
1402       "PositivePostIndex_al_r4_r11_plus_r9_PostIndex",
1403       ARRAY_SIZE(kPositivePostIndex),
1404       kPositivePostIndex},
1405      {{al, r6, r7, plus, r8, PostIndex},
1406       "al r6 r7 plus r8 PostIndex",
1407       "PositivePostIndex_al_r6_r7_plus_r8_PostIndex",
1408       ARRAY_SIZE(kPositivePostIndex),
1409       kPositivePostIndex},
1410      {{al, r3, r7, plus, r6, PostIndex},
1411       "al r3 r7 plus r6 PostIndex",
1412       "PositivePostIndex_al_r3_r7_plus_r6_PostIndex",
1413       ARRAY_SIZE(kPositivePostIndex),
1414       kPositivePostIndex},
1415      {{al, r1, r9, plus, r5, PostIndex},
1416       "al r1 r9 plus r5 PostIndex",
1417       "PositivePostIndex_al_r1_r9_plus_r5_PostIndex",
1418       ARRAY_SIZE(kPositivePostIndex),
1419       kPositivePostIndex},
1420      {{al, r5, r10, plus, r2, PostIndex},
1421       "al r5 r10 plus r2 PostIndex",
1422       "PositivePostIndex_al_r5_r10_plus_r2_PostIndex",
1423       ARRAY_SIZE(kPositivePostIndex),
1424       kPositivePostIndex},
1425      {{al, r9, r3, plus, r5, PostIndex},
1426       "al r9 r3 plus r5 PostIndex",
1427       "PositivePostIndex_al_r9_r3_plus_r5_PostIndex",
1428       ARRAY_SIZE(kPositivePostIndex),
1429       kPositivePostIndex},
1430      {{al, r2, r11, plus, r14, PostIndex},
1431       "al r2 r11 plus r14 PostIndex",
1432       "PositivePostIndex_al_r2_r11_plus_r14_PostIndex",
1433       ARRAY_SIZE(kPositivePostIndex),
1434       kPositivePostIndex},
1435      {{al, r14, r5, plus, r3, PostIndex},
1436       "al r14 r5 plus r3 PostIndex",
1437       "PositivePostIndex_al_r14_r5_plus_r3_PostIndex",
1438       ARRAY_SIZE(kPositivePostIndex),
1439       kPositivePostIndex},
1440      {{al, r0, r1, plus, r4, PostIndex},
1441       "al r0 r1 plus r4 PostIndex",
1442       "PositivePostIndex_al_r0_r1_plus_r4_PostIndex",
1443       ARRAY_SIZE(kPositivePostIndex),
1444       kPositivePostIndex},
1445      {{al, r5, r14, plus, r8, PostIndex},
1446       "al r5 r14 plus r8 PostIndex",
1447       "PositivePostIndex_al_r5_r14_plus_r8_PostIndex",
1448       ARRAY_SIZE(kPositivePostIndex),
1449       kPositivePostIndex},
1450      {{al, r0, r1, plus, r9, PostIndex},
1451       "al r0 r1 plus r9 PostIndex",
1452       "PositivePostIndex_al_r0_r1_plus_r9_PostIndex",
1453       ARRAY_SIZE(kPositivePostIndex),
1454       kPositivePostIndex},
1455      {{al, r8, r12, plus, r5, PostIndex},
1456       "al r8 r12 plus r5 PostIndex",
1457       "PositivePostIndex_al_r8_r12_plus_r5_PostIndex",
1458       ARRAY_SIZE(kPositivePostIndex),
1459       kPositivePostIndex},
1460      {{al, r6, r3, plus, r5, PostIndex},
1461       "al r6 r3 plus r5 PostIndex",
1462       "PositivePostIndex_al_r6_r3_plus_r5_PostIndex",
1463       ARRAY_SIZE(kPositivePostIndex),
1464       kPositivePostIndex},
1465      {{al, r3, r10, plus, r8, PostIndex},
1466       "al r3 r10 plus r8 PostIndex",
1467       "PositivePostIndex_al_r3_r10_plus_r8_PostIndex",
1468       ARRAY_SIZE(kPositivePostIndex),
1469       kPositivePostIndex},
1470      {{al, r9, r6, plus, r12, PostIndex},
1471       "al r9 r6 plus r12 PostIndex",
1472       "PositivePostIndex_al_r9_r6_plus_r12_PostIndex",
1473       ARRAY_SIZE(kPositivePostIndex),
1474       kPositivePostIndex},
1475      {{al, r10, r5, plus, r3, PostIndex},
1476       "al r10 r5 plus r3 PostIndex",
1477       "PositivePostIndex_al_r10_r5_plus_r3_PostIndex",
1478       ARRAY_SIZE(kPositivePostIndex),
1479       kPositivePostIndex},
1480      {{al, r3, r10, plus, r6, PostIndex},
1481       "al r3 r10 plus r6 PostIndex",
1482       "PositivePostIndex_al_r3_r10_plus_r6_PostIndex",
1483       ARRAY_SIZE(kPositivePostIndex),
1484       kPositivePostIndex},
1485      {{al, r4, r7, plus, r2, PostIndex},
1486       "al r4 r7 plus r2 PostIndex",
1487       "PositivePostIndex_al_r4_r7_plus_r2_PostIndex",
1488       ARRAY_SIZE(kPositivePostIndex),
1489       kPositivePostIndex},
1490      {{al, r14, r12, plus, r5, PostIndex},
1491       "al r14 r12 plus r5 PostIndex",
1492       "PositivePostIndex_al_r14_r12_plus_r5_PostIndex",
1493       ARRAY_SIZE(kPositivePostIndex),
1494       kPositivePostIndex},
1495      {{al, r1, r8, plus, r7, PostIndex},
1496       "al r1 r8 plus r7 PostIndex",
1497       "PositivePostIndex_al_r1_r8_plus_r7_PostIndex",
1498       ARRAY_SIZE(kPositivePostIndex),
1499       kPositivePostIndex},
1500      {{al, r5, r7, plus, r8, PostIndex},
1501       "al r5 r7 plus r8 PostIndex",
1502       "PositivePostIndex_al_r5_r7_plus_r8_PostIndex",
1503       ARRAY_SIZE(kPositivePostIndex),
1504       kPositivePostIndex},
1505      {{al, r0, r6, plus, r11, PostIndex},
1506       "al r0 r6 plus r11 PostIndex",
1507       "PositivePostIndex_al_r0_r6_plus_r11_PostIndex",
1508       ARRAY_SIZE(kPositivePostIndex),
1509       kPositivePostIndex},
1510      {{al, r5, r6, plus, r7, PostIndex},
1511       "al r5 r6 plus r7 PostIndex",
1512       "PositivePostIndex_al_r5_r6_plus_r7_PostIndex",
1513       ARRAY_SIZE(kPositivePostIndex),
1514       kPositivePostIndex},
1515      {{al, r7, r2, plus, r6, PostIndex},
1516       "al r7 r2 plus r6 PostIndex",
1517       "PositivePostIndex_al_r7_r2_plus_r6_PostIndex",
1518       ARRAY_SIZE(kPositivePostIndex),
1519       kPositivePostIndex},
1520      {{al, r6, r8, plus, r5, PostIndex},
1521       "al r6 r8 plus r5 PostIndex",
1522       "PositivePostIndex_al_r6_r8_plus_r5_PostIndex",
1523       ARRAY_SIZE(kPositivePostIndex),
1524       kPositivePostIndex},
1525      {{al, r7, r4, plus, r0, PostIndex},
1526       "al r7 r4 plus r0 PostIndex",
1527       "PositivePostIndex_al_r7_r4_plus_r0_PostIndex",
1528       ARRAY_SIZE(kPositivePostIndex),
1529       kPositivePostIndex},
1530      {{al, r2, r8, plus, r3, PostIndex},
1531       "al r2 r8 plus r3 PostIndex",
1532       "PositivePostIndex_al_r2_r8_plus_r3_PostIndex",
1533       ARRAY_SIZE(kPositivePostIndex),
1534       kPositivePostIndex},
1535      {{al, r3, r2, plus, r6, PostIndex},
1536       "al r3 r2 plus r6 PostIndex",
1537       "PositivePostIndex_al_r3_r2_plus_r6_PostIndex",
1538       ARRAY_SIZE(kPositivePostIndex),
1539       kPositivePostIndex},
1540      {{al, r7, r6, plus, r2, PostIndex},
1541       "al r7 r6 plus r2 PostIndex",
1542       "PositivePostIndex_al_r7_r6_plus_r2_PostIndex",
1543       ARRAY_SIZE(kPositivePostIndex),
1544       kPositivePostIndex},
1545      {{al, r0, r4, plus, r10, PostIndex},
1546       "al r0 r4 plus r10 PostIndex",
1547       "PositivePostIndex_al_r0_r4_plus_r10_PostIndex",
1548       ARRAY_SIZE(kPositivePostIndex),
1549       kPositivePostIndex},
1550      {{al, r9, r14, plus, r6, PostIndex},
1551       "al r9 r14 plus r6 PostIndex",
1552       "PositivePostIndex_al_r9_r14_plus_r6_PostIndex",
1553       ARRAY_SIZE(kPositivePostIndex),
1554       kPositivePostIndex},
1555      {{al, r0, r3, plus, r12, PostIndex},
1556       "al r0 r3 plus r12 PostIndex",
1557       "PositivePostIndex_al_r0_r3_plus_r12_PostIndex",
1558       ARRAY_SIZE(kPositivePostIndex),
1559       kPositivePostIndex},
1560      {{al, r8, r7, plus, r5, PostIndex},
1561       "al r8 r7 plus r5 PostIndex",
1562       "PositivePostIndex_al_r8_r7_plus_r5_PostIndex",
1563       ARRAY_SIZE(kPositivePostIndex),
1564       kPositivePostIndex},
1565      {{al, r5, r14, plus, r2, PostIndex},
1566       "al r5 r14 plus r2 PostIndex",
1567       "PositivePostIndex_al_r5_r14_plus_r2_PostIndex",
1568       ARRAY_SIZE(kPositivePostIndex),
1569       kPositivePostIndex},
1570      {{al, r7, r6, plus, r4, PostIndex},
1571       "al r7 r6 plus r4 PostIndex",
1572       "PositivePostIndex_al_r7_r6_plus_r4_PostIndex",
1573       ARRAY_SIZE(kPositivePostIndex),
1574       kPositivePostIndex},
1575      {{al, r1, r14, plus, r12, PostIndex},
1576       "al r1 r14 plus r12 PostIndex",
1577       "PositivePostIndex_al_r1_r14_plus_r12_PostIndex",
1578       ARRAY_SIZE(kPositivePostIndex),
1579       kPositivePostIndex},
1580      {{al, r11, r1, plus, r0, PostIndex},
1581       "al r11 r1 plus r0 PostIndex",
1582       "PositivePostIndex_al_r11_r1_plus_r0_PostIndex",
1583       ARRAY_SIZE(kPositivePostIndex),
1584       kPositivePostIndex},
1585      {{al, r4, r2, plus, r12, PostIndex},
1586       "al r4 r2 plus r12 PostIndex",
1587       "PositivePostIndex_al_r4_r2_plus_r12_PostIndex",
1588       ARRAY_SIZE(kPositivePostIndex),
1589       kPositivePostIndex},
1590      {{al, r0, r1, plus, r3, PostIndex},
1591       "al r0 r1 plus r3 PostIndex",
1592       "PositivePostIndex_al_r0_r1_plus_r3_PostIndex",
1593       ARRAY_SIZE(kPositivePostIndex),
1594       kPositivePostIndex},
1595      {{al, r4, r0, plus, r5, PostIndex},
1596       "al r4 r0 plus r5 PostIndex",
1597       "PositivePostIndex_al_r4_r0_plus_r5_PostIndex",
1598       ARRAY_SIZE(kPositivePostIndex),
1599       kPositivePostIndex},
1600      {{al, r8, r4, plus, r0, PostIndex},
1601       "al r8 r4 plus r0 PostIndex",
1602       "PositivePostIndex_al_r8_r4_plus_r0_PostIndex",
1603       ARRAY_SIZE(kPositivePostIndex),
1604       kPositivePostIndex},
1605      {{al, r1, r7, plus, r11, PostIndex},
1606       "al r1 r7 plus r11 PostIndex",
1607       "PositivePostIndex_al_r1_r7_plus_r11_PostIndex",
1608       ARRAY_SIZE(kPositivePostIndex),
1609       kPositivePostIndex},
1610      {{al, r9, r0, plus, r14, PostIndex},
1611       "al r9 r0 plus r14 PostIndex",
1612       "PositivePostIndex_al_r9_r0_plus_r14_PostIndex",
1613       ARRAY_SIZE(kPositivePostIndex),
1614       kPositivePostIndex},
1615      {{al, r8, r9, plus, r14, PostIndex},
1616       "al r8 r9 plus r14 PostIndex",
1617       "PositivePostIndex_al_r8_r9_plus_r14_PostIndex",
1618       ARRAY_SIZE(kPositivePostIndex),
1619       kPositivePostIndex},
1620      {{al, r10, r14, plus, r12, PostIndex},
1621       "al r10 r14 plus r12 PostIndex",
1622       "PositivePostIndex_al_r10_r14_plus_r12_PostIndex",
1623       ARRAY_SIZE(kPositivePostIndex),
1624       kPositivePostIndex},
1625      {{al, r8, r9, plus, r10, PostIndex},
1626       "al r8 r9 plus r10 PostIndex",
1627       "PositivePostIndex_al_r8_r9_plus_r10_PostIndex",
1628       ARRAY_SIZE(kPositivePostIndex),
1629       kPositivePostIndex},
1630      {{al, r14, r8, plus, r11, PostIndex},
1631       "al r14 r8 plus r11 PostIndex",
1632       "PositivePostIndex_al_r14_r8_plus_r11_PostIndex",
1633       ARRAY_SIZE(kPositivePostIndex),
1634       kPositivePostIndex},
1635      {{al, r4, r10, plus, r2, PostIndex},
1636       "al r4 r10 plus r2 PostIndex",
1637       "PositivePostIndex_al_r4_r10_plus_r2_PostIndex",
1638       ARRAY_SIZE(kPositivePostIndex),
1639       kPositivePostIndex},
1640      {{al, r7, r8, plus, r10, PostIndex},
1641       "al r7 r8 plus r10 PostIndex",
1642       "PositivePostIndex_al_r7_r8_plus_r10_PostIndex",
1643       ARRAY_SIZE(kPositivePostIndex),
1644       kPositivePostIndex},
1645      {{al, r11, r4, plus, r7, PostIndex},
1646       "al r11 r4 plus r7 PostIndex",
1647       "PositivePostIndex_al_r11_r4_plus_r7_PostIndex",
1648       ARRAY_SIZE(kPositivePostIndex),
1649       kPositivePostIndex},
1650      {{al, r8, r6, plus, r1, PostIndex},
1651       "al r8 r6 plus r1 PostIndex",
1652       "PositivePostIndex_al_r8_r6_plus_r1_PostIndex",
1653       ARRAY_SIZE(kPositivePostIndex),
1654       kPositivePostIndex},
1655      {{al, r0, r5, plus, r12, PostIndex},
1656       "al r0 r5 plus r12 PostIndex",
1657       "PositivePostIndex_al_r0_r5_plus_r12_PostIndex",
1658       ARRAY_SIZE(kPositivePostIndex),
1659       kPositivePostIndex},
1660      {{al, r14, r11, plus, r5, PostIndex},
1661       "al r14 r11 plus r5 PostIndex",
1662       "PositivePostIndex_al_r14_r11_plus_r5_PostIndex",
1663       ARRAY_SIZE(kPositivePostIndex),
1664       kPositivePostIndex},
1665      {{al, r12, r7, plus, r3, PostIndex},
1666       "al r12 r7 plus r3 PostIndex",
1667       "PositivePostIndex_al_r12_r7_plus_r3_PostIndex",
1668       ARRAY_SIZE(kPositivePostIndex),
1669       kPositivePostIndex},
1670      {{al, r6, r4, plus, r8, PostIndex},
1671       "al r6 r4 plus r8 PostIndex",
1672       "PositivePostIndex_al_r6_r4_plus_r8_PostIndex",
1673       ARRAY_SIZE(kPositivePostIndex),
1674       kPositivePostIndex},
1675      {{al, r14, r3, plus, r2, PostIndex},
1676       "al r14 r3 plus r2 PostIndex",
1677       "PositivePostIndex_al_r14_r3_plus_r2_PostIndex",
1678       ARRAY_SIZE(kPositivePostIndex),
1679       kPositivePostIndex},
1680      {{al, r7, r6, plus, r1, PostIndex},
1681       "al r7 r6 plus r1 PostIndex",
1682       "PositivePostIndex_al_r7_r6_plus_r1_PostIndex",
1683       ARRAY_SIZE(kPositivePostIndex),
1684       kPositivePostIndex},
1685      {{al, r7, r14, plus, r12, PostIndex},
1686       "al r7 r14 plus r12 PostIndex",
1687       "PositivePostIndex_al_r7_r14_plus_r12_PostIndex",
1688       ARRAY_SIZE(kPositivePostIndex),
1689       kPositivePostIndex},
1690      {{al, r8, r7, plus, r14, PostIndex},
1691       "al r8 r7 plus r14 PostIndex",
1692       "PositivePostIndex_al_r8_r7_plus_r14_PostIndex",
1693       ARRAY_SIZE(kPositivePostIndex),
1694       kPositivePostIndex},
1695      {{al, r3, r11, plus, r5, PostIndex},
1696       "al r3 r11 plus r5 PostIndex",
1697       "PositivePostIndex_al_r3_r11_plus_r5_PostIndex",
1698       ARRAY_SIZE(kPositivePostIndex),
1699       kPositivePostIndex},
1700      {{al, r8, r2, plus, r9, PostIndex},
1701       "al r8 r2 plus r9 PostIndex",
1702       "PositivePostIndex_al_r8_r2_plus_r9_PostIndex",
1703       ARRAY_SIZE(kPositivePostIndex),
1704       kPositivePostIndex},
1705      {{al, r8, r2, plus, r0, PostIndex},
1706       "al r8 r2 plus r0 PostIndex",
1707       "PositivePostIndex_al_r8_r2_plus_r0_PostIndex",
1708       ARRAY_SIZE(kPositivePostIndex),
1709       kPositivePostIndex},
1710      {{al, r10, r9, plus, r4, PostIndex},
1711       "al r10 r9 plus r4 PostIndex",
1712       "PositivePostIndex_al_r10_r9_plus_r4_PostIndex",
1713       ARRAY_SIZE(kPositivePostIndex),
1714       kPositivePostIndex},
1715      {{al, r1, r5, plus, r9, PostIndex},
1716       "al r1 r5 plus r9 PostIndex",
1717       "PositivePostIndex_al_r1_r5_plus_r9_PostIndex",
1718       ARRAY_SIZE(kPositivePostIndex),
1719       kPositivePostIndex},
1720      {{al, r14, r7, plus, r2, PostIndex},
1721       "al r14 r7 plus r2 PostIndex",
1722       "PositivePostIndex_al_r14_r7_plus_r2_PostIndex",
1723       ARRAY_SIZE(kPositivePostIndex),
1724       kPositivePostIndex},
1725      {{al, r2, r1, plus, r9, PostIndex},
1726       "al r2 r1 plus r9 PostIndex",
1727       "PositivePostIndex_al_r2_r1_plus_r9_PostIndex",
1728       ARRAY_SIZE(kPositivePostIndex),
1729       kPositivePostIndex},
1730      {{al, r9, r3, plus, r2, PostIndex},
1731       "al r9 r3 plus r2 PostIndex",
1732       "PositivePostIndex_al_r9_r3_plus_r2_PostIndex",
1733       ARRAY_SIZE(kPositivePostIndex),
1734       kPositivePostIndex},
1735      {{al, r14, r7, plus, r0, PostIndex},
1736       "al r14 r7 plus r0 PostIndex",
1737       "PositivePostIndex_al_r14_r7_plus_r0_PostIndex",
1738       ARRAY_SIZE(kPositivePostIndex),
1739       kPositivePostIndex},
1740      {{al, r0, r14, plus, r5, PostIndex},
1741       "al r0 r14 plus r5 PostIndex",
1742       "PositivePostIndex_al_r0_r14_plus_r5_PostIndex",
1743       ARRAY_SIZE(kPositivePostIndex),
1744       kPositivePostIndex},
1745      {{al, r7, r4, plus, r12, PostIndex},
1746       "al r7 r4 plus r12 PostIndex",
1747       "PositivePostIndex_al_r7_r4_plus_r12_PostIndex",
1748       ARRAY_SIZE(kPositivePostIndex),
1749       kPositivePostIndex},
1750      {{al, r4, r10, plus, r7, PostIndex},
1751       "al r4 r10 plus r7 PostIndex",
1752       "PositivePostIndex_al_r4_r10_plus_r7_PostIndex",
1753       ARRAY_SIZE(kPositivePostIndex),
1754       kPositivePostIndex},
1755      {{al, r10, r4, plus, r7, PostIndex},
1756       "al r10 r4 plus r7 PostIndex",
1757       "PositivePostIndex_al_r10_r4_plus_r7_PostIndex",
1758       ARRAY_SIZE(kPositivePostIndex),
1759       kPositivePostIndex},
1760      {{al, r8, r4, plus, r2, PostIndex},
1761       "al r8 r4 plus r2 PostIndex",
1762       "PositivePostIndex_al_r8_r4_plus_r2_PostIndex",
1763       ARRAY_SIZE(kPositivePostIndex),
1764       kPositivePostIndex},
1765      {{al, r0, r3, plus, r6, PostIndex},
1766       "al r0 r3 plus r6 PostIndex",
1767       "PositivePostIndex_al_r0_r3_plus_r6_PostIndex",
1768       ARRAY_SIZE(kPositivePostIndex),
1769       kPositivePostIndex},
1770      {{al, r2, r8, plus, r11, PostIndex},
1771       "al r2 r8 plus r11 PostIndex",
1772       "PositivePostIndex_al_r2_r8_plus_r11_PostIndex",
1773       ARRAY_SIZE(kPositivePostIndex),
1774       kPositivePostIndex},
1775      {{al, r11, r9, plus, r7, PostIndex},
1776       "al r11 r9 plus r7 PostIndex",
1777       "PositivePostIndex_al_r11_r9_plus_r7_PostIndex",
1778       ARRAY_SIZE(kPositivePostIndex),
1779       kPositivePostIndex},
1780      {{al, r5, r2, plus, r10, PostIndex},
1781       "al r5 r2 plus r10 PostIndex",
1782       "PositivePostIndex_al_r5_r2_plus_r10_PostIndex",
1783       ARRAY_SIZE(kPositivePostIndex),
1784       kPositivePostIndex},
1785      {{al, r6, r12, plus, r7, PostIndex},
1786       "al r6 r12 plus r7 PostIndex",
1787       "PositivePostIndex_al_r6_r12_plus_r7_PostIndex",
1788       ARRAY_SIZE(kPositivePostIndex),
1789       kPositivePostIndex},
1790      {{al, r12, r11, plus, r0, PostIndex},
1791       "al r12 r11 plus r0 PostIndex",
1792       "PositivePostIndex_al_r12_r11_plus_r0_PostIndex",
1793       ARRAY_SIZE(kPositivePostIndex),
1794       kPositivePostIndex},
1795      {{al, r5, r11, plus, r6, PostIndex},
1796       "al r5 r11 plus r6 PostIndex",
1797       "PositivePostIndex_al_r5_r11_plus_r6_PostIndex",
1798       ARRAY_SIZE(kPositivePostIndex),
1799       kPositivePostIndex},
1800      {{al, r1, r0, plus, r11, PostIndex},
1801       "al r1 r0 plus r11 PostIndex",
1802       "PositivePostIndex_al_r1_r0_plus_r11_PostIndex",
1803       ARRAY_SIZE(kPositivePostIndex),
1804       kPositivePostIndex},
1805      {{al, r12, r10, plus, r9, PostIndex},
1806       "al r12 r10 plus r9 PostIndex",
1807       "PositivePostIndex_al_r12_r10_plus_r9_PostIndex",
1808       ARRAY_SIZE(kPositivePostIndex),
1809       kPositivePostIndex},
1810      {{al, r2, r3, plus, r9, PostIndex},
1811       "al r2 r3 plus r9 PostIndex",
1812       "PositivePostIndex_al_r2_r3_plus_r9_PostIndex",
1813       ARRAY_SIZE(kPositivePostIndex),
1814       kPositivePostIndex},
1815      {{al, r3, r0, plus, r2, PostIndex},
1816       "al r3 r0 plus r2 PostIndex",
1817       "PositivePostIndex_al_r3_r0_plus_r2_PostIndex",
1818       ARRAY_SIZE(kPositivePostIndex),
1819       kPositivePostIndex},
1820      {{al, r2, r5, plus, r1, PostIndex},
1821       "al r2 r5 plus r1 PostIndex",
1822       "PositivePostIndex_al_r2_r5_plus_r1_PostIndex",
1823       ARRAY_SIZE(kPositivePostIndex),
1824       kPositivePostIndex},
1825      {{al, r2, r9, plus, r12, PostIndex},
1826       "al r2 r9 plus r12 PostIndex",
1827       "PositivePostIndex_al_r2_r9_plus_r12_PostIndex",
1828       ARRAY_SIZE(kPositivePostIndex),
1829       kPositivePostIndex},
1830      {{al, r4, r2, plus, r14, PostIndex},
1831       "al r4 r2 plus r14 PostIndex",
1832       "PositivePostIndex_al_r4_r2_plus_r14_PostIndex",
1833       ARRAY_SIZE(kPositivePostIndex),
1834       kPositivePostIndex},
1835      {{al, r12, r11, minus, r8, PostIndex},
1836       "al r12 r11 minus r8 PostIndex",
1837       "NegativePostIndex_al_r12_r11_minus_r8_PostIndex",
1838       ARRAY_SIZE(kNegativePostIndex),
1839       kNegativePostIndex},
1840      {{al, r4, r10, minus, r9, PostIndex},
1841       "al r4 r10 minus r9 PostIndex",
1842       "NegativePostIndex_al_r4_r10_minus_r9_PostIndex",
1843       ARRAY_SIZE(kNegativePostIndex),
1844       kNegativePostIndex},
1845      {{al, r9, r12, minus, r10, PostIndex},
1846       "al r9 r12 minus r10 PostIndex",
1847       "NegativePostIndex_al_r9_r12_minus_r10_PostIndex",
1848       ARRAY_SIZE(kNegativePostIndex),
1849       kNegativePostIndex},
1850      {{al, r2, r1, minus, r11, PostIndex},
1851       "al r2 r1 minus r11 PostIndex",
1852       "NegativePostIndex_al_r2_r1_minus_r11_PostIndex",
1853       ARRAY_SIZE(kNegativePostIndex),
1854       kNegativePostIndex},
1855      {{al, r14, r8, minus, r6, PostIndex},
1856       "al r14 r8 minus r6 PostIndex",
1857       "NegativePostIndex_al_r14_r8_minus_r6_PostIndex",
1858       ARRAY_SIZE(kNegativePostIndex),
1859       kNegativePostIndex},
1860      {{al, r7, r2, minus, r8, PostIndex},
1861       "al r7 r2 minus r8 PostIndex",
1862       "NegativePostIndex_al_r7_r2_minus_r8_PostIndex",
1863       ARRAY_SIZE(kNegativePostIndex),
1864       kNegativePostIndex},
1865      {{al, r9, r1, minus, r8, PostIndex},
1866       "al r9 r1 minus r8 PostIndex",
1867       "NegativePostIndex_al_r9_r1_minus_r8_PostIndex",
1868       ARRAY_SIZE(kNegativePostIndex),
1869       kNegativePostIndex},
1870      {{al, r1, r6, minus, r5, PostIndex},
1871       "al r1 r6 minus r5 PostIndex",
1872       "NegativePostIndex_al_r1_r6_minus_r5_PostIndex",
1873       ARRAY_SIZE(kNegativePostIndex),
1874       kNegativePostIndex},
1875      {{al, r6, r2, minus, r14, PostIndex},
1876       "al r6 r2 minus r14 PostIndex",
1877       "NegativePostIndex_al_r6_r2_minus_r14_PostIndex",
1878       ARRAY_SIZE(kNegativePostIndex),
1879       kNegativePostIndex},
1880      {{al, r11, r1, minus, r9, PostIndex},
1881       "al r11 r1 minus r9 PostIndex",
1882       "NegativePostIndex_al_r11_r1_minus_r9_PostIndex",
1883       ARRAY_SIZE(kNegativePostIndex),
1884       kNegativePostIndex},
1885      {{al, r9, r7, minus, r12, PostIndex},
1886       "al r9 r7 minus r12 PostIndex",
1887       "NegativePostIndex_al_r9_r7_minus_r12_PostIndex",
1888       ARRAY_SIZE(kNegativePostIndex),
1889       kNegativePostIndex},
1890      {{al, r10, r6, minus, r1, PostIndex},
1891       "al r10 r6 minus r1 PostIndex",
1892       "NegativePostIndex_al_r10_r6_minus_r1_PostIndex",
1893       ARRAY_SIZE(kNegativePostIndex),
1894       kNegativePostIndex},
1895      {{al, r4, r9, minus, r6, PostIndex},
1896       "al r4 r9 minus r6 PostIndex",
1897       "NegativePostIndex_al_r4_r9_minus_r6_PostIndex",
1898       ARRAY_SIZE(kNegativePostIndex),
1899       kNegativePostIndex},
1900      {{al, r11, r4, minus, r9, PostIndex},
1901       "al r11 r4 minus r9 PostIndex",
1902       "NegativePostIndex_al_r11_r4_minus_r9_PostIndex",
1903       ARRAY_SIZE(kNegativePostIndex),
1904       kNegativePostIndex},
1905      {{al, r7, r12, minus, r0, PostIndex},
1906       "al r7 r12 minus r0 PostIndex",
1907       "NegativePostIndex_al_r7_r12_minus_r0_PostIndex",
1908       ARRAY_SIZE(kNegativePostIndex),
1909       kNegativePostIndex},
1910      {{al, r10, r3, minus, r7, PostIndex},
1911       "al r10 r3 minus r7 PostIndex",
1912       "NegativePostIndex_al_r10_r3_minus_r7_PostIndex",
1913       ARRAY_SIZE(kNegativePostIndex),
1914       kNegativePostIndex},
1915      {{al, r7, r14, minus, r11, PostIndex},
1916       "al r7 r14 minus r11 PostIndex",
1917       "NegativePostIndex_al_r7_r14_minus_r11_PostIndex",
1918       ARRAY_SIZE(kNegativePostIndex),
1919       kNegativePostIndex},
1920      {{al, r6, r12, minus, r2, PostIndex},
1921       "al r6 r12 minus r2 PostIndex",
1922       "NegativePostIndex_al_r6_r12_minus_r2_PostIndex",
1923       ARRAY_SIZE(kNegativePostIndex),
1924       kNegativePostIndex},
1925      {{al, r10, r7, minus, r1, PostIndex},
1926       "al r10 r7 minus r1 PostIndex",
1927       "NegativePostIndex_al_r10_r7_minus_r1_PostIndex",
1928       ARRAY_SIZE(kNegativePostIndex),
1929       kNegativePostIndex},
1930      {{al, r3, r11, minus, r0, PostIndex},
1931       "al r3 r11 minus r0 PostIndex",
1932       "NegativePostIndex_al_r3_r11_minus_r0_PostIndex",
1933       ARRAY_SIZE(kNegativePostIndex),
1934       kNegativePostIndex},
1935      {{al, r4, r5, minus, r11, PostIndex},
1936       "al r4 r5 minus r11 PostIndex",
1937       "NegativePostIndex_al_r4_r5_minus_r11_PostIndex",
1938       ARRAY_SIZE(kNegativePostIndex),
1939       kNegativePostIndex},
1940      {{al, r6, r12, minus, r5, PostIndex},
1941       "al r6 r12 minus r5 PostIndex",
1942       "NegativePostIndex_al_r6_r12_minus_r5_PostIndex",
1943       ARRAY_SIZE(kNegativePostIndex),
1944       kNegativePostIndex},
1945      {{al, r4, r11, minus, r12, PostIndex},
1946       "al r4 r11 minus r12 PostIndex",
1947       "NegativePostIndex_al_r4_r11_minus_r12_PostIndex",
1948       ARRAY_SIZE(kNegativePostIndex),
1949       kNegativePostIndex},
1950      {{al, r12, r5, minus, r4, PostIndex},
1951       "al r12 r5 minus r4 PostIndex",
1952       "NegativePostIndex_al_r12_r5_minus_r4_PostIndex",
1953       ARRAY_SIZE(kNegativePostIndex),
1954       kNegativePostIndex},
1955      {{al, r11, r10, minus, r9, PostIndex},
1956       "al r11 r10 minus r9 PostIndex",
1957       "NegativePostIndex_al_r11_r10_minus_r9_PostIndex",
1958       ARRAY_SIZE(kNegativePostIndex),
1959       kNegativePostIndex},
1960      {{al, r8, r11, minus, r2, PostIndex},
1961       "al r8 r11 minus r2 PostIndex",
1962       "NegativePostIndex_al_r8_r11_minus_r2_PostIndex",
1963       ARRAY_SIZE(kNegativePostIndex),
1964       kNegativePostIndex},
1965      {{al, r6, r7, minus, r4, PostIndex},
1966       "al r6 r7 minus r4 PostIndex",
1967       "NegativePostIndex_al_r6_r7_minus_r4_PostIndex",
1968       ARRAY_SIZE(kNegativePostIndex),
1969       kNegativePostIndex},
1970      {{al, r14, r8, minus, r2, PostIndex},
1971       "al r14 r8 minus r2 PostIndex",
1972       "NegativePostIndex_al_r14_r8_minus_r2_PostIndex",
1973       ARRAY_SIZE(kNegativePostIndex),
1974       kNegativePostIndex},
1975      {{al, r7, r10, minus, r12, PostIndex},
1976       "al r7 r10 minus r12 PostIndex",
1977       "NegativePostIndex_al_r7_r10_minus_r12_PostIndex",
1978       ARRAY_SIZE(kNegativePostIndex),
1979       kNegativePostIndex},
1980      {{al, r14, r5, minus, r7, PostIndex},
1981       "al r14 r5 minus r7 PostIndex",
1982       "NegativePostIndex_al_r14_r5_minus_r7_PostIndex",
1983       ARRAY_SIZE(kNegativePostIndex),
1984       kNegativePostIndex},
1985      {{al, r9, r8, minus, r2, PostIndex},
1986       "al r9 r8 minus r2 PostIndex",
1987       "NegativePostIndex_al_r9_r8_minus_r2_PostIndex",
1988       ARRAY_SIZE(kNegativePostIndex),
1989       kNegativePostIndex},
1990      {{al, r10, r8, minus, r9, PostIndex},
1991       "al r10 r8 minus r9 PostIndex",
1992       "NegativePostIndex_al_r10_r8_minus_r9_PostIndex",
1993       ARRAY_SIZE(kNegativePostIndex),
1994       kNegativePostIndex},
1995      {{al, r11, r6, minus, r1, PostIndex},
1996       "al r11 r6 minus r1 PostIndex",
1997       "NegativePostIndex_al_r11_r6_minus_r1_PostIndex",
1998       ARRAY_SIZE(kNegativePostIndex),
1999       kNegativePostIndex},
2000      {{al, r3, r7, minus, r0, PostIndex},
2001       "al r3 r7 minus r0 PostIndex",
2002       "NegativePostIndex_al_r3_r7_minus_r0_PostIndex",
2003       ARRAY_SIZE(kNegativePostIndex),
2004       kNegativePostIndex},
2005      {{al, r3, r12, minus, r5, PostIndex},
2006       "al r3 r12 minus r5 PostIndex",
2007       "NegativePostIndex_al_r3_r12_minus_r5_PostIndex",
2008       ARRAY_SIZE(kNegativePostIndex),
2009       kNegativePostIndex},
2010      {{al, r12, r1, minus, r14, PostIndex},
2011       "al r12 r1 minus r14 PostIndex",
2012       "NegativePostIndex_al_r12_r1_minus_r14_PostIndex",
2013       ARRAY_SIZE(kNegativePostIndex),
2014       kNegativePostIndex},
2015      {{al, r11, r14, minus, r4, PostIndex},
2016       "al r11 r14 minus r4 PostIndex",
2017       "NegativePostIndex_al_r11_r14_minus_r4_PostIndex",
2018       ARRAY_SIZE(kNegativePostIndex),
2019       kNegativePostIndex},
2020      {{al, r7, r8, minus, r11, PostIndex},
2021       "al r7 r8 minus r11 PostIndex",
2022       "NegativePostIndex_al_r7_r8_minus_r11_PostIndex",
2023       ARRAY_SIZE(kNegativePostIndex),
2024       kNegativePostIndex},
2025      {{al, r3, r11, minus, r1, PostIndex},
2026       "al r3 r11 minus r1 PostIndex",
2027       "NegativePostIndex_al_r3_r11_minus_r1_PostIndex",
2028       ARRAY_SIZE(kNegativePostIndex),
2029       kNegativePostIndex},
2030      {{al, r12, r7, minus, r1, PostIndex},
2031       "al r12 r7 minus r1 PostIndex",
2032       "NegativePostIndex_al_r12_r7_minus_r1_PostIndex",
2033       ARRAY_SIZE(kNegativePostIndex),
2034       kNegativePostIndex},
2035      {{al, r3, r0, minus, r5, PostIndex},
2036       "al r3 r0 minus r5 PostIndex",
2037       "NegativePostIndex_al_r3_r0_minus_r5_PostIndex",
2038       ARRAY_SIZE(kNegativePostIndex),
2039       kNegativePostIndex},
2040      {{al, r2, r1, minus, r12, PostIndex},
2041       "al r2 r1 minus r12 PostIndex",
2042       "NegativePostIndex_al_r2_r1_minus_r12_PostIndex",
2043       ARRAY_SIZE(kNegativePostIndex),
2044       kNegativePostIndex},
2045      {{al, r6, r11, minus, r0, PostIndex},
2046       "al r6 r11 minus r0 PostIndex",
2047       "NegativePostIndex_al_r6_r11_minus_r0_PostIndex",
2048       ARRAY_SIZE(kNegativePostIndex),
2049       kNegativePostIndex},
2050      {{al, r9, r4, minus, r10, PostIndex},
2051       "al r9 r4 minus r10 PostIndex",
2052       "NegativePostIndex_al_r9_r4_minus_r10_PostIndex",
2053       ARRAY_SIZE(kNegativePostIndex),
2054       kNegativePostIndex},
2055      {{al, r1, r3, minus, r8, PostIndex},
2056       "al r1 r3 minus r8 PostIndex",
2057       "NegativePostIndex_al_r1_r3_minus_r8_PostIndex",
2058       ARRAY_SIZE(kNegativePostIndex),
2059       kNegativePostIndex},
2060      {{al, r2, r5, minus, r4, PostIndex},
2061       "al r2 r5 minus r4 PostIndex",
2062       "NegativePostIndex_al_r2_r5_minus_r4_PostIndex",
2063       ARRAY_SIZE(kNegativePostIndex),
2064       kNegativePostIndex},
2065      {{al, r12, r3, minus, r9, PostIndex},
2066       "al r12 r3 minus r9 PostIndex",
2067       "NegativePostIndex_al_r12_r3_minus_r9_PostIndex",
2068       ARRAY_SIZE(kNegativePostIndex),
2069       kNegativePostIndex},
2070      {{al, r14, r6, minus, r1, PostIndex},
2071       "al r14 r6 minus r1 PostIndex",
2072       "NegativePostIndex_al_r14_r6_minus_r1_PostIndex",
2073       ARRAY_SIZE(kNegativePostIndex),
2074       kNegativePostIndex},
2075      {{al, r8, r4, minus, r7, PostIndex},
2076       "al r8 r4 minus r7 PostIndex",
2077       "NegativePostIndex_al_r8_r4_minus_r7_PostIndex",
2078       ARRAY_SIZE(kNegativePostIndex),
2079       kNegativePostIndex},
2080      {{al, r14, r2, minus, r3, PostIndex},
2081       "al r14 r2 minus r3 PostIndex",
2082       "NegativePostIndex_al_r14_r2_minus_r3_PostIndex",
2083       ARRAY_SIZE(kNegativePostIndex),
2084       kNegativePostIndex},
2085      {{al, r11, r2, minus, r0, PostIndex},
2086       "al r11 r2 minus r0 PostIndex",
2087       "NegativePostIndex_al_r11_r2_minus_r0_PostIndex",
2088       ARRAY_SIZE(kNegativePostIndex),
2089       kNegativePostIndex},
2090      {{al, r10, r14, minus, r5, PostIndex},
2091       "al r10 r14 minus r5 PostIndex",
2092       "NegativePostIndex_al_r10_r14_minus_r5_PostIndex",
2093       ARRAY_SIZE(kNegativePostIndex),
2094       kNegativePostIndex},
2095      {{al, r3, r8, minus, r5, PostIndex},
2096       "al r3 r8 minus r5 PostIndex",
2097       "NegativePostIndex_al_r3_r8_minus_r5_PostIndex",
2098       ARRAY_SIZE(kNegativePostIndex),
2099       kNegativePostIndex},
2100      {{al, r6, r1, minus, r5, PostIndex},
2101       "al r6 r1 minus r5 PostIndex",
2102       "NegativePostIndex_al_r6_r1_minus_r5_PostIndex",
2103       ARRAY_SIZE(kNegativePostIndex),
2104       kNegativePostIndex},
2105      {{al, r1, r2, minus, r11, PostIndex},
2106       "al r1 r2 minus r11 PostIndex",
2107       "NegativePostIndex_al_r1_r2_minus_r11_PostIndex",
2108       ARRAY_SIZE(kNegativePostIndex),
2109       kNegativePostIndex},
2110      {{al, r12, r9, minus, r4, PostIndex},
2111       "al r12 r9 minus r4 PostIndex",
2112       "NegativePostIndex_al_r12_r9_minus_r4_PostIndex",
2113       ARRAY_SIZE(kNegativePostIndex),
2114       kNegativePostIndex},
2115      {{al, r14, r12, minus, r7, PostIndex},
2116       "al r14 r12 minus r7 PostIndex",
2117       "NegativePostIndex_al_r14_r12_minus_r7_PostIndex",
2118       ARRAY_SIZE(kNegativePostIndex),
2119       kNegativePostIndex},
2120      {{al, r5, r2, minus, r4, PostIndex},
2121       "al r5 r2 minus r4 PostIndex",
2122       "NegativePostIndex_al_r5_r2_minus_r4_PostIndex",
2123       ARRAY_SIZE(kNegativePostIndex),
2124       kNegativePostIndex},
2125      {{al, r2, r6, minus, r8, PostIndex},
2126       "al r2 r6 minus r8 PostIndex",
2127       "NegativePostIndex_al_r2_r6_minus_r8_PostIndex",
2128       ARRAY_SIZE(kNegativePostIndex),
2129       kNegativePostIndex},
2130      {{al, r5, r3, minus, r8, PostIndex},
2131       "al r5 r3 minus r8 PostIndex",
2132       "NegativePostIndex_al_r5_r3_minus_r8_PostIndex",
2133       ARRAY_SIZE(kNegativePostIndex),
2134       kNegativePostIndex},
2135      {{al, r6, r11, minus, r3, PostIndex},
2136       "al r6 r11 minus r3 PostIndex",
2137       "NegativePostIndex_al_r6_r11_minus_r3_PostIndex",
2138       ARRAY_SIZE(kNegativePostIndex),
2139       kNegativePostIndex},
2140      {{al, r12, r6, minus, r11, PostIndex},
2141       "al r12 r6 minus r11 PostIndex",
2142       "NegativePostIndex_al_r12_r6_minus_r11_PostIndex",
2143       ARRAY_SIZE(kNegativePostIndex),
2144       kNegativePostIndex},
2145      {{al, r8, r14, minus, r7, PostIndex},
2146       "al r8 r14 minus r7 PostIndex",
2147       "NegativePostIndex_al_r8_r14_minus_r7_PostIndex",
2148       ARRAY_SIZE(kNegativePostIndex),
2149       kNegativePostIndex},
2150      {{al, r2, r6, minus, r5, PostIndex},
2151       "al r2 r6 minus r5 PostIndex",
2152       "NegativePostIndex_al_r2_r6_minus_r5_PostIndex",
2153       ARRAY_SIZE(kNegativePostIndex),
2154       kNegativePostIndex},
2155      {{al, r12, r5, minus, r1, PostIndex},
2156       "al r12 r5 minus r1 PostIndex",
2157       "NegativePostIndex_al_r12_r5_minus_r1_PostIndex",
2158       ARRAY_SIZE(kNegativePostIndex),
2159       kNegativePostIndex},
2160      {{al, r11, r2, minus, r9, PostIndex},
2161       "al r11 r2 minus r9 PostIndex",
2162       "NegativePostIndex_al_r11_r2_minus_r9_PostIndex",
2163       ARRAY_SIZE(kNegativePostIndex),
2164       kNegativePostIndex},
2165      {{al, r12, r4, minus, r0, PostIndex},
2166       "al r12 r4 minus r0 PostIndex",
2167       "NegativePostIndex_al_r12_r4_minus_r0_PostIndex",
2168       ARRAY_SIZE(kNegativePostIndex),
2169       kNegativePostIndex},
2170      {{al, r4, r3, minus, r12, PostIndex},
2171       "al r4 r3 minus r12 PostIndex",
2172       "NegativePostIndex_al_r4_r3_minus_r12_PostIndex",
2173       ARRAY_SIZE(kNegativePostIndex),
2174       kNegativePostIndex},
2175      {{al, r14, r1, minus, r6, PostIndex},
2176       "al r14 r1 minus r6 PostIndex",
2177       "NegativePostIndex_al_r14_r1_minus_r6_PostIndex",
2178       ARRAY_SIZE(kNegativePostIndex),
2179       kNegativePostIndex},
2180      {{al, r12, r4, minus, r7, PostIndex},
2181       "al r12 r4 minus r7 PostIndex",
2182       "NegativePostIndex_al_r12_r4_minus_r7_PostIndex",
2183       ARRAY_SIZE(kNegativePostIndex),
2184       kNegativePostIndex},
2185      {{al, r12, r7, minus, r3, PostIndex},
2186       "al r12 r7 minus r3 PostIndex",
2187       "NegativePostIndex_al_r12_r7_minus_r3_PostIndex",
2188       ARRAY_SIZE(kNegativePostIndex),
2189       kNegativePostIndex},
2190      {{al, r8, r0, minus, r4, PostIndex},
2191       "al r8 r0 minus r4 PostIndex",
2192       "NegativePostIndex_al_r8_r0_minus_r4_PostIndex",
2193       ARRAY_SIZE(kNegativePostIndex),
2194       kNegativePostIndex},
2195      {{al, r10, r0, minus, r5, PostIndex},
2196       "al r10 r0 minus r5 PostIndex",
2197       "NegativePostIndex_al_r10_r0_minus_r5_PostIndex",
2198       ARRAY_SIZE(kNegativePostIndex),
2199       kNegativePostIndex},
2200      {{al, r4, r2, minus, r8, PostIndex},
2201       "al r4 r2 minus r8 PostIndex",
2202       "NegativePostIndex_al_r4_r2_minus_r8_PostIndex",
2203       ARRAY_SIZE(kNegativePostIndex),
2204       kNegativePostIndex},
2205      {{al, r7, r8, minus, r1, PostIndex},
2206       "al r7 r8 minus r1 PostIndex",
2207       "NegativePostIndex_al_r7_r8_minus_r1_PostIndex",
2208       ARRAY_SIZE(kNegativePostIndex),
2209       kNegativePostIndex},
2210      {{al, r8, r2, minus, r10, PostIndex},
2211       "al r8 r2 minus r10 PostIndex",
2212       "NegativePostIndex_al_r8_r2_minus_r10_PostIndex",
2213       ARRAY_SIZE(kNegativePostIndex),
2214       kNegativePostIndex},
2215      {{al, r11, r2, minus, r5, PostIndex},
2216       "al r11 r2 minus r5 PostIndex",
2217       "NegativePostIndex_al_r11_r2_minus_r5_PostIndex",
2218       ARRAY_SIZE(kNegativePostIndex),
2219       kNegativePostIndex},
2220      {{al, r5, r12, minus, r14, PostIndex},
2221       "al r5 r12 minus r14 PostIndex",
2222       "NegativePostIndex_al_r5_r12_minus_r14_PostIndex",
2223       ARRAY_SIZE(kNegativePostIndex),
2224       kNegativePostIndex},
2225      {{al, r8, r1, minus, r14, PostIndex},
2226       "al r8 r1 minus r14 PostIndex",
2227       "NegativePostIndex_al_r8_r1_minus_r14_PostIndex",
2228       ARRAY_SIZE(kNegativePostIndex),
2229       kNegativePostIndex},
2230      {{al, r10, r6, minus, r8, PostIndex},
2231       "al r10 r6 minus r8 PostIndex",
2232       "NegativePostIndex_al_r10_r6_minus_r8_PostIndex",
2233       ARRAY_SIZE(kNegativePostIndex),
2234       kNegativePostIndex},
2235      {{al, r0, r4, minus, r12, PostIndex},
2236       "al r0 r4 minus r12 PostIndex",
2237       "NegativePostIndex_al_r0_r4_minus_r12_PostIndex",
2238       ARRAY_SIZE(kNegativePostIndex),
2239       kNegativePostIndex},
2240      {{al, r6, r0, minus, r11, PostIndex},
2241       "al r6 r0 minus r11 PostIndex",
2242       "NegativePostIndex_al_r6_r0_minus_r11_PostIndex",
2243       ARRAY_SIZE(kNegativePostIndex),
2244       kNegativePostIndex},
2245      {{al, r10, r7, minus, r11, PostIndex},
2246       "al r10 r7 minus r11 PostIndex",
2247       "NegativePostIndex_al_r10_r7_minus_r11_PostIndex",
2248       ARRAY_SIZE(kNegativePostIndex),
2249       kNegativePostIndex},
2250      {{al, r0, r10, minus, r5, PostIndex},
2251       "al r0 r10 minus r5 PostIndex",
2252       "NegativePostIndex_al_r0_r10_minus_r5_PostIndex",
2253       ARRAY_SIZE(kNegativePostIndex),
2254       kNegativePostIndex},
2255      {{al, r4, r7, minus, r12, PostIndex},
2256       "al r4 r7 minus r12 PostIndex",
2257       "NegativePostIndex_al_r4_r7_minus_r12_PostIndex",
2258       ARRAY_SIZE(kNegativePostIndex),
2259       kNegativePostIndex},
2260      {{al, r8, r2, minus, r0, PostIndex},
2261       "al r8 r2 minus r0 PostIndex",
2262       "NegativePostIndex_al_r8_r2_minus_r0_PostIndex",
2263       ARRAY_SIZE(kNegativePostIndex),
2264       kNegativePostIndex},
2265      {{al, r2, r11, minus, r10, PostIndex},
2266       "al r2 r11 minus r10 PostIndex",
2267       "NegativePostIndex_al_r2_r11_minus_r10_PostIndex",
2268       ARRAY_SIZE(kNegativePostIndex),
2269       kNegativePostIndex},
2270      {{al, r8, r10, minus, r5, PostIndex},
2271       "al r8 r10 minus r5 PostIndex",
2272       "NegativePostIndex_al_r8_r10_minus_r5_PostIndex",
2273       ARRAY_SIZE(kNegativePostIndex),
2274       kNegativePostIndex},
2275      {{al, r11, r5, minus, r10, PostIndex},
2276       "al r11 r5 minus r10 PostIndex",
2277       "NegativePostIndex_al_r11_r5_minus_r10_PostIndex",
2278       ARRAY_SIZE(kNegativePostIndex),
2279       kNegativePostIndex},
2280      {{al, r9, r14, minus, r2, PostIndex},
2281       "al r9 r14 minus r2 PostIndex",
2282       "NegativePostIndex_al_r9_r14_minus_r2_PostIndex",
2283       ARRAY_SIZE(kNegativePostIndex),
2284       kNegativePostIndex},
2285      {{al, r7, r12, minus, r3, PostIndex},
2286       "al r7 r12 minus r3 PostIndex",
2287       "NegativePostIndex_al_r7_r12_minus_r3_PostIndex",
2288       ARRAY_SIZE(kNegativePostIndex),
2289       kNegativePostIndex},
2290      {{al, r12, r8, minus, r6, PostIndex},
2291       "al r12 r8 minus r6 PostIndex",
2292       "NegativePostIndex_al_r12_r8_minus_r6_PostIndex",
2293       ARRAY_SIZE(kNegativePostIndex),
2294       kNegativePostIndex},
2295      {{al, r9, r12, minus, r5, PostIndex},
2296       "al r9 r12 minus r5 PostIndex",
2297       "NegativePostIndex_al_r9_r12_minus_r5_PostIndex",
2298       ARRAY_SIZE(kNegativePostIndex),
2299       kNegativePostIndex},
2300      {{al, r4, r8, minus, r10, PostIndex},
2301       "al r4 r8 minus r10 PostIndex",
2302       "NegativePostIndex_al_r4_r8_minus_r10_PostIndex",
2303       ARRAY_SIZE(kNegativePostIndex),
2304       kNegativePostIndex},
2305      {{al, r10, r12, minus, r1, PostIndex},
2306       "al r10 r12 minus r1 PostIndex",
2307       "NegativePostIndex_al_r10_r12_minus_r1_PostIndex",
2308       ARRAY_SIZE(kNegativePostIndex),
2309       kNegativePostIndex},
2310      {{al, r12, r7, minus, r8, PostIndex},
2311       "al r12 r7 minus r8 PostIndex",
2312       "NegativePostIndex_al_r12_r7_minus_r8_PostIndex",
2313       ARRAY_SIZE(kNegativePostIndex),
2314       kNegativePostIndex},
2315      {{al, r8, r6, minus, r0, PostIndex},
2316       "al r8 r6 minus r0 PostIndex",
2317       "NegativePostIndex_al_r8_r6_minus_r0_PostIndex",
2318       ARRAY_SIZE(kNegativePostIndex),
2319       kNegativePostIndex},
2320      {{al, r8, r3, minus, r14, PostIndex},
2321       "al r8 r3 minus r14 PostIndex",
2322       "NegativePostIndex_al_r8_r3_minus_r14_PostIndex",
2323       ARRAY_SIZE(kNegativePostIndex),
2324       kNegativePostIndex},
2325      {{al, r12, r14, minus, r3, PostIndex},
2326       "al r12 r14 minus r3 PostIndex",
2327       "NegativePostIndex_al_r12_r14_minus_r3_PostIndex",
2328       ARRAY_SIZE(kNegativePostIndex),
2329       kNegativePostIndex},
2330      {{al, r10, r2, minus, r7, PostIndex},
2331       "al r10 r2 minus r7 PostIndex",
2332       "NegativePostIndex_al_r10_r2_minus_r7_PostIndex",
2333       ARRAY_SIZE(kNegativePostIndex),
2334       kNegativePostIndex},
2335      {{al, r12, r9, plus, r0, PreIndex},
2336       "al r12 r9 plus r0 PreIndex",
2337       "PositivePreIndex_al_r12_r9_plus_r0_PreIndex",
2338       ARRAY_SIZE(kPositivePreIndex),
2339       kPositivePreIndex},
2340      {{al, r0, r4, plus, r11, PreIndex},
2341       "al r0 r4 plus r11 PreIndex",
2342       "PositivePreIndex_al_r0_r4_plus_r11_PreIndex",
2343       ARRAY_SIZE(kPositivePreIndex),
2344       kPositivePreIndex},
2345      {{al, r14, r8, plus, r7, PreIndex},
2346       "al r14 r8 plus r7 PreIndex",
2347       "PositivePreIndex_al_r14_r8_plus_r7_PreIndex",
2348       ARRAY_SIZE(kPositivePreIndex),
2349       kPositivePreIndex},
2350      {{al, r2, r1, plus, r8, PreIndex},
2351       "al r2 r1 plus r8 PreIndex",
2352       "PositivePreIndex_al_r2_r1_plus_r8_PreIndex",
2353       ARRAY_SIZE(kPositivePreIndex),
2354       kPositivePreIndex},
2355      {{al, r7, r9, plus, r5, PreIndex},
2356       "al r7 r9 plus r5 PreIndex",
2357       "PositivePreIndex_al_r7_r9_plus_r5_PreIndex",
2358       ARRAY_SIZE(kPositivePreIndex),
2359       kPositivePreIndex},
2360      {{al, r11, r12, plus, r3, PreIndex},
2361       "al r11 r12 plus r3 PreIndex",
2362       "PositivePreIndex_al_r11_r12_plus_r3_PreIndex",
2363       ARRAY_SIZE(kPositivePreIndex),
2364       kPositivePreIndex},
2365      {{al, r8, r1, plus, r6, PreIndex},
2366       "al r8 r1 plus r6 PreIndex",
2367       "PositivePreIndex_al_r8_r1_plus_r6_PreIndex",
2368       ARRAY_SIZE(kPositivePreIndex),
2369       kPositivePreIndex},
2370      {{al, r9, r10, plus, r8, PreIndex},
2371       "al r9 r10 plus r8 PreIndex",
2372       "PositivePreIndex_al_r9_r10_plus_r8_PreIndex",
2373       ARRAY_SIZE(kPositivePreIndex),
2374       kPositivePreIndex},
2375      {{al, r12, r1, plus, r0, PreIndex},
2376       "al r12 r1 plus r0 PreIndex",
2377       "PositivePreIndex_al_r12_r1_plus_r0_PreIndex",
2378       ARRAY_SIZE(kPositivePreIndex),
2379       kPositivePreIndex},
2380      {{al, r10, r7, plus, r3, PreIndex},
2381       "al r10 r7 plus r3 PreIndex",
2382       "PositivePreIndex_al_r10_r7_plus_r3_PreIndex",
2383       ARRAY_SIZE(kPositivePreIndex),
2384       kPositivePreIndex},
2385      {{al, r9, r0, plus, r2, PreIndex},
2386       "al r9 r0 plus r2 PreIndex",
2387       "PositivePreIndex_al_r9_r0_plus_r2_PreIndex",
2388       ARRAY_SIZE(kPositivePreIndex),
2389       kPositivePreIndex},
2390      {{al, r9, r5, plus, r3, PreIndex},
2391       "al r9 r5 plus r3 PreIndex",
2392       "PositivePreIndex_al_r9_r5_plus_r3_PreIndex",
2393       ARRAY_SIZE(kPositivePreIndex),
2394       kPositivePreIndex},
2395      {{al, r6, r0, plus, r8, PreIndex},
2396       "al r6 r0 plus r8 PreIndex",
2397       "PositivePreIndex_al_r6_r0_plus_r8_PreIndex",
2398       ARRAY_SIZE(kPositivePreIndex),
2399       kPositivePreIndex},
2400      {{al, r3, r4, plus, r8, PreIndex},
2401       "al r3 r4 plus r8 PreIndex",
2402       "PositivePreIndex_al_r3_r4_plus_r8_PreIndex",
2403       ARRAY_SIZE(kPositivePreIndex),
2404       kPositivePreIndex},
2405      {{al, r1, r7, plus, r6, PreIndex},
2406       "al r1 r7 plus r6 PreIndex",
2407       "PositivePreIndex_al_r1_r7_plus_r6_PreIndex",
2408       ARRAY_SIZE(kPositivePreIndex),
2409       kPositivePreIndex},
2410      {{al, r2, r8, plus, r7, PreIndex},
2411       "al r2 r8 plus r7 PreIndex",
2412       "PositivePreIndex_al_r2_r8_plus_r7_PreIndex",
2413       ARRAY_SIZE(kPositivePreIndex),
2414       kPositivePreIndex},
2415      {{al, r10, r11, plus, r0, PreIndex},
2416       "al r10 r11 plus r0 PreIndex",
2417       "PositivePreIndex_al_r10_r11_plus_r0_PreIndex",
2418       ARRAY_SIZE(kPositivePreIndex),
2419       kPositivePreIndex},
2420      {{al, r10, r9, plus, r11, PreIndex},
2421       "al r10 r9 plus r11 PreIndex",
2422       "PositivePreIndex_al_r10_r9_plus_r11_PreIndex",
2423       ARRAY_SIZE(kPositivePreIndex),
2424       kPositivePreIndex},
2425      {{al, r9, r7, plus, r11, PreIndex},
2426       "al r9 r7 plus r11 PreIndex",
2427       "PositivePreIndex_al_r9_r7_plus_r11_PreIndex",
2428       ARRAY_SIZE(kPositivePreIndex),
2429       kPositivePreIndex},
2430      {{al, r11, r0, plus, r7, PreIndex},
2431       "al r11 r0 plus r7 PreIndex",
2432       "PositivePreIndex_al_r11_r0_plus_r7_PreIndex",
2433       ARRAY_SIZE(kPositivePreIndex),
2434       kPositivePreIndex},
2435      {{al, r9, r0, plus, r4, PreIndex},
2436       "al r9 r0 plus r4 PreIndex",
2437       "PositivePreIndex_al_r9_r0_plus_r4_PreIndex",
2438       ARRAY_SIZE(kPositivePreIndex),
2439       kPositivePreIndex},
2440      {{al, r6, r1, plus, r3, PreIndex},
2441       "al r6 r1 plus r3 PreIndex",
2442       "PositivePreIndex_al_r6_r1_plus_r3_PreIndex",
2443       ARRAY_SIZE(kPositivePreIndex),
2444       kPositivePreIndex},
2445      {{al, r0, r11, plus, r1, PreIndex},
2446       "al r0 r11 plus r1 PreIndex",
2447       "PositivePreIndex_al_r0_r11_plus_r1_PreIndex",
2448       ARRAY_SIZE(kPositivePreIndex),
2449       kPositivePreIndex},
2450      {{al, r5, r10, plus, r7, PreIndex},
2451       "al r5 r10 plus r7 PreIndex",
2452       "PositivePreIndex_al_r5_r10_plus_r7_PreIndex",
2453       ARRAY_SIZE(kPositivePreIndex),
2454       kPositivePreIndex},
2455      {{al, r3, r2, plus, r10, PreIndex},
2456       "al r3 r2 plus r10 PreIndex",
2457       "PositivePreIndex_al_r3_r2_plus_r10_PreIndex",
2458       ARRAY_SIZE(kPositivePreIndex),
2459       kPositivePreIndex},
2460      {{al, r8, r2, plus, r0, PreIndex},
2461       "al r8 r2 plus r0 PreIndex",
2462       "PositivePreIndex_al_r8_r2_plus_r0_PreIndex",
2463       ARRAY_SIZE(kPositivePreIndex),
2464       kPositivePreIndex},
2465      {{al, r3, r0, plus, r9, PreIndex},
2466       "al r3 r0 plus r9 PreIndex",
2467       "PositivePreIndex_al_r3_r0_plus_r9_PreIndex",
2468       ARRAY_SIZE(kPositivePreIndex),
2469       kPositivePreIndex},
2470      {{al, r2, r4, plus, r7, PreIndex},
2471       "al r2 r4 plus r7 PreIndex",
2472       "PositivePreIndex_al_r2_r4_plus_r7_PreIndex",
2473       ARRAY_SIZE(kPositivePreIndex),
2474       kPositivePreIndex},
2475      {{al, r14, r1, plus, r6, PreIndex},
2476       "al r14 r1 plus r6 PreIndex",
2477       "PositivePreIndex_al_r14_r1_plus_r6_PreIndex",
2478       ARRAY_SIZE(kPositivePreIndex),
2479       kPositivePreIndex},
2480      {{al, r9, r8, plus, r14, PreIndex},
2481       "al r9 r8 plus r14 PreIndex",
2482       "PositivePreIndex_al_r9_r8_plus_r14_PreIndex",
2483       ARRAY_SIZE(kPositivePreIndex),
2484       kPositivePreIndex},
2485      {{al, r14, r5, plus, r1, PreIndex},
2486       "al r14 r5 plus r1 PreIndex",
2487       "PositivePreIndex_al_r14_r5_plus_r1_PreIndex",
2488       ARRAY_SIZE(kPositivePreIndex),
2489       kPositivePreIndex},
2490      {{al, r5, r14, plus, r12, PreIndex},
2491       "al r5 r14 plus r12 PreIndex",
2492       "PositivePreIndex_al_r5_r14_plus_r12_PreIndex",
2493       ARRAY_SIZE(kPositivePreIndex),
2494       kPositivePreIndex},
2495      {{al, r0, r8, plus, r14, PreIndex},
2496       "al r0 r8 plus r14 PreIndex",
2497       "PositivePreIndex_al_r0_r8_plus_r14_PreIndex",
2498       ARRAY_SIZE(kPositivePreIndex),
2499       kPositivePreIndex},
2500      {{al, r2, r3, plus, r10, PreIndex},
2501       "al r2 r3 plus r10 PreIndex",
2502       "PositivePreIndex_al_r2_r3_plus_r10_PreIndex",
2503       ARRAY_SIZE(kPositivePreIndex),
2504       kPositivePreIndex},
2505      {{al, r2, r10, plus, r11, PreIndex},
2506       "al r2 r10 plus r11 PreIndex",
2507       "PositivePreIndex_al_r2_r10_plus_r11_PreIndex",
2508       ARRAY_SIZE(kPositivePreIndex),
2509       kPositivePreIndex},
2510      {{al, r7, r9, plus, r14, PreIndex},
2511       "al r7 r9 plus r14 PreIndex",
2512       "PositivePreIndex_al_r7_r9_plus_r14_PreIndex",
2513       ARRAY_SIZE(kPositivePreIndex),
2514       kPositivePreIndex},
2515      {{al, r1, r10, plus, r12, PreIndex},
2516       "al r1 r10 plus r12 PreIndex",
2517       "PositivePreIndex_al_r1_r10_plus_r12_PreIndex",
2518       ARRAY_SIZE(kPositivePreIndex),
2519       kPositivePreIndex},
2520      {{al, r1, r10, plus, r0, PreIndex},
2521       "al r1 r10 plus r0 PreIndex",
2522       "PositivePreIndex_al_r1_r10_plus_r0_PreIndex",
2523       ARRAY_SIZE(kPositivePreIndex),
2524       kPositivePreIndex},
2525      {{al, r12, r11, plus, r9, PreIndex},
2526       "al r12 r11 plus r9 PreIndex",
2527       "PositivePreIndex_al_r12_r11_plus_r9_PreIndex",
2528       ARRAY_SIZE(kPositivePreIndex),
2529       kPositivePreIndex},
2530      {{al, r0, r5, plus, r8, PreIndex},
2531       "al r0 r5 plus r8 PreIndex",
2532       "PositivePreIndex_al_r0_r5_plus_r8_PreIndex",
2533       ARRAY_SIZE(kPositivePreIndex),
2534       kPositivePreIndex},
2535      {{al, r2, r4, plus, r8, PreIndex},
2536       "al r2 r4 plus r8 PreIndex",
2537       "PositivePreIndex_al_r2_r4_plus_r8_PreIndex",
2538       ARRAY_SIZE(kPositivePreIndex),
2539       kPositivePreIndex},
2540      {{al, r14, r11, plus, r12, PreIndex},
2541       "al r14 r11 plus r12 PreIndex",
2542       "PositivePreIndex_al_r14_r11_plus_r12_PreIndex",
2543       ARRAY_SIZE(kPositivePreIndex),
2544       kPositivePreIndex},
2545      {{al, r4, r5, plus, r3, PreIndex},
2546       "al r4 r5 plus r3 PreIndex",
2547       "PositivePreIndex_al_r4_r5_plus_r3_PreIndex",
2548       ARRAY_SIZE(kPositivePreIndex),
2549       kPositivePreIndex},
2550      {{al, r1, r6, plus, r12, PreIndex},
2551       "al r1 r6 plus r12 PreIndex",
2552       "PositivePreIndex_al_r1_r6_plus_r12_PreIndex",
2553       ARRAY_SIZE(kPositivePreIndex),
2554       kPositivePreIndex},
2555      {{al, r4, r8, plus, r3, PreIndex},
2556       "al r4 r8 plus r3 PreIndex",
2557       "PositivePreIndex_al_r4_r8_plus_r3_PreIndex",
2558       ARRAY_SIZE(kPositivePreIndex),
2559       kPositivePreIndex},
2560      {{al, r0, r14, plus, r12, PreIndex},
2561       "al r0 r14 plus r12 PreIndex",
2562       "PositivePreIndex_al_r0_r14_plus_r12_PreIndex",
2563       ARRAY_SIZE(kPositivePreIndex),
2564       kPositivePreIndex},
2565      {{al, r0, r11, plus, r9, PreIndex},
2566       "al r0 r11 plus r9 PreIndex",
2567       "PositivePreIndex_al_r0_r11_plus_r9_PreIndex",
2568       ARRAY_SIZE(kPositivePreIndex),
2569       kPositivePreIndex},
2570      {{al, r11, r10, plus, r2, PreIndex},
2571       "al r11 r10 plus r2 PreIndex",
2572       "PositivePreIndex_al_r11_r10_plus_r2_PreIndex",
2573       ARRAY_SIZE(kPositivePreIndex),
2574       kPositivePreIndex},
2575      {{al, r8, r0, plus, r12, PreIndex},
2576       "al r8 r0 plus r12 PreIndex",
2577       "PositivePreIndex_al_r8_r0_plus_r12_PreIndex",
2578       ARRAY_SIZE(kPositivePreIndex),
2579       kPositivePreIndex},
2580      {{al, r0, r10, plus, r7, PreIndex},
2581       "al r0 r10 plus r7 PreIndex",
2582       "PositivePreIndex_al_r0_r10_plus_r7_PreIndex",
2583       ARRAY_SIZE(kPositivePreIndex),
2584       kPositivePreIndex},
2585      {{al, r2, r6, plus, r9, PreIndex},
2586       "al r2 r6 plus r9 PreIndex",
2587       "PositivePreIndex_al_r2_r6_plus_r9_PreIndex",
2588       ARRAY_SIZE(kPositivePreIndex),
2589       kPositivePreIndex},
2590      {{al, r7, r9, plus, r0, PreIndex},
2591       "al r7 r9 plus r0 PreIndex",
2592       "PositivePreIndex_al_r7_r9_plus_r0_PreIndex",
2593       ARRAY_SIZE(kPositivePreIndex),
2594       kPositivePreIndex},
2595      {{al, r11, r2, plus, r4, PreIndex},
2596       "al r11 r2 plus r4 PreIndex",
2597       "PositivePreIndex_al_r11_r2_plus_r4_PreIndex",
2598       ARRAY_SIZE(kPositivePreIndex),
2599       kPositivePreIndex},
2600      {{al, r2, r3, plus, r4, PreIndex},
2601       "al r2 r3 plus r4 PreIndex",
2602       "PositivePreIndex_al_r2_r3_plus_r4_PreIndex",
2603       ARRAY_SIZE(kPositivePreIndex),
2604       kPositivePreIndex},
2605      {{al, r0, r14, plus, r11, PreIndex},
2606       "al r0 r14 plus r11 PreIndex",
2607       "PositivePreIndex_al_r0_r14_plus_r11_PreIndex",
2608       ARRAY_SIZE(kPositivePreIndex),
2609       kPositivePreIndex},
2610      {{al, r7, r5, plus, r0, PreIndex},
2611       "al r7 r5 plus r0 PreIndex",
2612       "PositivePreIndex_al_r7_r5_plus_r0_PreIndex",
2613       ARRAY_SIZE(kPositivePreIndex),
2614       kPositivePreIndex},
2615      {{al, r6, r12, plus, r9, PreIndex},
2616       "al r6 r12 plus r9 PreIndex",
2617       "PositivePreIndex_al_r6_r12_plus_r9_PreIndex",
2618       ARRAY_SIZE(kPositivePreIndex),
2619       kPositivePreIndex},
2620      {{al, r8, r11, plus, r10, PreIndex},
2621       "al r8 r11 plus r10 PreIndex",
2622       "PositivePreIndex_al_r8_r11_plus_r10_PreIndex",
2623       ARRAY_SIZE(kPositivePreIndex),
2624       kPositivePreIndex},
2625      {{al, r5, r14, plus, r2, PreIndex},
2626       "al r5 r14 plus r2 PreIndex",
2627       "PositivePreIndex_al_r5_r14_plus_r2_PreIndex",
2628       ARRAY_SIZE(kPositivePreIndex),
2629       kPositivePreIndex},
2630      {{al, r4, r7, plus, r5, PreIndex},
2631       "al r4 r7 plus r5 PreIndex",
2632       "PositivePreIndex_al_r4_r7_plus_r5_PreIndex",
2633       ARRAY_SIZE(kPositivePreIndex),
2634       kPositivePreIndex},
2635      {{al, r14, r8, plus, r10, PreIndex},
2636       "al r14 r8 plus r10 PreIndex",
2637       "PositivePreIndex_al_r14_r8_plus_r10_PreIndex",
2638       ARRAY_SIZE(kPositivePreIndex),
2639       kPositivePreIndex},
2640      {{al, r8, r1, plus, r9, PreIndex},
2641       "al r8 r1 plus r9 PreIndex",
2642       "PositivePreIndex_al_r8_r1_plus_r9_PreIndex",
2643       ARRAY_SIZE(kPositivePreIndex),
2644       kPositivePreIndex},
2645      {{al, r4, r9, plus, r1, PreIndex},
2646       "al r4 r9 plus r1 PreIndex",
2647       "PositivePreIndex_al_r4_r9_plus_r1_PreIndex",
2648       ARRAY_SIZE(kPositivePreIndex),
2649       kPositivePreIndex},
2650      {{al, r8, r5, plus, r11, PreIndex},
2651       "al r8 r5 plus r11 PreIndex",
2652       "PositivePreIndex_al_r8_r5_plus_r11_PreIndex",
2653       ARRAY_SIZE(kPositivePreIndex),
2654       kPositivePreIndex},
2655      {{al, r0, r7, plus, r5, PreIndex},
2656       "al r0 r7 plus r5 PreIndex",
2657       "PositivePreIndex_al_r0_r7_plus_r5_PreIndex",
2658       ARRAY_SIZE(kPositivePreIndex),
2659       kPositivePreIndex},
2660      {{al, r8, r3, plus, r11, PreIndex},
2661       "al r8 r3 plus r11 PreIndex",
2662       "PositivePreIndex_al_r8_r3_plus_r11_PreIndex",
2663       ARRAY_SIZE(kPositivePreIndex),
2664       kPositivePreIndex},
2665      {{al, r12, r8, plus, r6, PreIndex},
2666       "al r12 r8 plus r6 PreIndex",
2667       "PositivePreIndex_al_r12_r8_plus_r6_PreIndex",
2668       ARRAY_SIZE(kPositivePreIndex),
2669       kPositivePreIndex},
2670      {{al, r5, r0, plus, r12, PreIndex},
2671       "al r5 r0 plus r12 PreIndex",
2672       "PositivePreIndex_al_r5_r0_plus_r12_PreIndex",
2673       ARRAY_SIZE(kPositivePreIndex),
2674       kPositivePreIndex},
2675      {{al, r12, r2, plus, r8, PreIndex},
2676       "al r12 r2 plus r8 PreIndex",
2677       "PositivePreIndex_al_r12_r2_plus_r8_PreIndex",
2678       ARRAY_SIZE(kPositivePreIndex),
2679       kPositivePreIndex},
2680      {{al, r7, r4, plus, r5, PreIndex},
2681       "al r7 r4 plus r5 PreIndex",
2682       "PositivePreIndex_al_r7_r4_plus_r5_PreIndex",
2683       ARRAY_SIZE(kPositivePreIndex),
2684       kPositivePreIndex},
2685      {{al, r4, r12, plus, r3, PreIndex},
2686       "al r4 r12 plus r3 PreIndex",
2687       "PositivePreIndex_al_r4_r12_plus_r3_PreIndex",
2688       ARRAY_SIZE(kPositivePreIndex),
2689       kPositivePreIndex},
2690      {{al, r7, r11, plus, r1, PreIndex},
2691       "al r7 r11 plus r1 PreIndex",
2692       "PositivePreIndex_al_r7_r11_plus_r1_PreIndex",
2693       ARRAY_SIZE(kPositivePreIndex),
2694       kPositivePreIndex},
2695      {{al, r6, r14, plus, r3, PreIndex},
2696       "al r6 r14 plus r3 PreIndex",
2697       "PositivePreIndex_al_r6_r14_plus_r3_PreIndex",
2698       ARRAY_SIZE(kPositivePreIndex),
2699       kPositivePreIndex},
2700      {{al, r5, r9, plus, r10, PreIndex},
2701       "al r5 r9 plus r10 PreIndex",
2702       "PositivePreIndex_al_r5_r9_plus_r10_PreIndex",
2703       ARRAY_SIZE(kPositivePreIndex),
2704       kPositivePreIndex},
2705      {{al, r6, r11, plus, r12, PreIndex},
2706       "al r6 r11 plus r12 PreIndex",
2707       "PositivePreIndex_al_r6_r11_plus_r12_PreIndex",
2708       ARRAY_SIZE(kPositivePreIndex),
2709       kPositivePreIndex},
2710      {{al, r12, r7, plus, r4, PreIndex},
2711       "al r12 r7 plus r4 PreIndex",
2712       "PositivePreIndex_al_r12_r7_plus_r4_PreIndex",
2713       ARRAY_SIZE(kPositivePreIndex),
2714       kPositivePreIndex},
2715      {{al, r9, r10, plus, r0, PreIndex},
2716       "al r9 r10 plus r0 PreIndex",
2717       "PositivePreIndex_al_r9_r10_plus_r0_PreIndex",
2718       ARRAY_SIZE(kPositivePreIndex),
2719       kPositivePreIndex},
2720      {{al, r12, r11, plus, r10, PreIndex},
2721       "al r12 r11 plus r10 PreIndex",
2722       "PositivePreIndex_al_r12_r11_plus_r10_PreIndex",
2723       ARRAY_SIZE(kPositivePreIndex),
2724       kPositivePreIndex},
2725      {{al, r6, r11, plus, r3, PreIndex},
2726       "al r6 r11 plus r3 PreIndex",
2727       "PositivePreIndex_al_r6_r11_plus_r3_PreIndex",
2728       ARRAY_SIZE(kPositivePreIndex),
2729       kPositivePreIndex},
2730      {{al, r9, r8, plus, r6, PreIndex},
2731       "al r9 r8 plus r6 PreIndex",
2732       "PositivePreIndex_al_r9_r8_plus_r6_PreIndex",
2733       ARRAY_SIZE(kPositivePreIndex),
2734       kPositivePreIndex},
2735      {{al, r11, r7, plus, r8, PreIndex},
2736       "al r11 r7 plus r8 PreIndex",
2737       "PositivePreIndex_al_r11_r7_plus_r8_PreIndex",
2738       ARRAY_SIZE(kPositivePreIndex),
2739       kPositivePreIndex},
2740      {{al, r2, r11, plus, r7, PreIndex},
2741       "al r2 r11 plus r7 PreIndex",
2742       "PositivePreIndex_al_r2_r11_plus_r7_PreIndex",
2743       ARRAY_SIZE(kPositivePreIndex),
2744       kPositivePreIndex},
2745      {{al, r6, r7, plus, r2, PreIndex},
2746       "al r6 r7 plus r2 PreIndex",
2747       "PositivePreIndex_al_r6_r7_plus_r2_PreIndex",
2748       ARRAY_SIZE(kPositivePreIndex),
2749       kPositivePreIndex},
2750      {{al, r8, r5, plus, r4, PreIndex},
2751       "al r8 r5 plus r4 PreIndex",
2752       "PositivePreIndex_al_r8_r5_plus_r4_PreIndex",
2753       ARRAY_SIZE(kPositivePreIndex),
2754       kPositivePreIndex},
2755      {{al, r0, r4, plus, r6, PreIndex},
2756       "al r0 r4 plus r6 PreIndex",
2757       "PositivePreIndex_al_r0_r4_plus_r6_PreIndex",
2758       ARRAY_SIZE(kPositivePreIndex),
2759       kPositivePreIndex},
2760      {{al, r11, r14, plus, r1, PreIndex},
2761       "al r11 r14 plus r1 PreIndex",
2762       "PositivePreIndex_al_r11_r14_plus_r1_PreIndex",
2763       ARRAY_SIZE(kPositivePreIndex),
2764       kPositivePreIndex},
2765      {{al, r7, r3, plus, r12, PreIndex},
2766       "al r7 r3 plus r12 PreIndex",
2767       "PositivePreIndex_al_r7_r3_plus_r12_PreIndex",
2768       ARRAY_SIZE(kPositivePreIndex),
2769       kPositivePreIndex},
2770      {{al, r4, r7, plus, r12, PreIndex},
2771       "al r4 r7 plus r12 PreIndex",
2772       "PositivePreIndex_al_r4_r7_plus_r12_PreIndex",
2773       ARRAY_SIZE(kPositivePreIndex),
2774       kPositivePreIndex},
2775      {{al, r6, r14, plus, r0, PreIndex},
2776       "al r6 r14 plus r0 PreIndex",
2777       "PositivePreIndex_al_r6_r14_plus_r0_PreIndex",
2778       ARRAY_SIZE(kPositivePreIndex),
2779       kPositivePreIndex},
2780      {{al, r11, r5, plus, r7, PreIndex},
2781       "al r11 r5 plus r7 PreIndex",
2782       "PositivePreIndex_al_r11_r5_plus_r7_PreIndex",
2783       ARRAY_SIZE(kPositivePreIndex),
2784       kPositivePreIndex},
2785      {{al, r12, r14, plus, r2, PreIndex},
2786       "al r12 r14 plus r2 PreIndex",
2787       "PositivePreIndex_al_r12_r14_plus_r2_PreIndex",
2788       ARRAY_SIZE(kPositivePreIndex),
2789       kPositivePreIndex},
2790      {{al, r10, r14, plus, r2, PreIndex},
2791       "al r10 r14 plus r2 PreIndex",
2792       "PositivePreIndex_al_r10_r14_plus_r2_PreIndex",
2793       ARRAY_SIZE(kPositivePreIndex),
2794       kPositivePreIndex},
2795      {{al, r5, r2, plus, r3, PreIndex},
2796       "al r5 r2 plus r3 PreIndex",
2797       "PositivePreIndex_al_r5_r2_plus_r3_PreIndex",
2798       ARRAY_SIZE(kPositivePreIndex),
2799       kPositivePreIndex},
2800      {{al, r8, r6, plus, r7, PreIndex},
2801       "al r8 r6 plus r7 PreIndex",
2802       "PositivePreIndex_al_r8_r6_plus_r7_PreIndex",
2803       ARRAY_SIZE(kPositivePreIndex),
2804       kPositivePreIndex},
2805      {{al, r1, r2, plus, r4, PreIndex},
2806       "al r1 r2 plus r4 PreIndex",
2807       "PositivePreIndex_al_r1_r2_plus_r4_PreIndex",
2808       ARRAY_SIZE(kPositivePreIndex),
2809       kPositivePreIndex},
2810      {{al, r2, r6, plus, r5, PreIndex},
2811       "al r2 r6 plus r5 PreIndex",
2812       "PositivePreIndex_al_r2_r6_plus_r5_PreIndex",
2813       ARRAY_SIZE(kPositivePreIndex),
2814       kPositivePreIndex},
2815      {{al, r11, r7, plus, r2, PreIndex},
2816       "al r11 r7 plus r2 PreIndex",
2817       "PositivePreIndex_al_r11_r7_plus_r2_PreIndex",
2818       ARRAY_SIZE(kPositivePreIndex),
2819       kPositivePreIndex},
2820      {{al, r4, r10, plus, r3, PreIndex},
2821       "al r4 r10 plus r3 PreIndex",
2822       "PositivePreIndex_al_r4_r10_plus_r3_PreIndex",
2823       ARRAY_SIZE(kPositivePreIndex),
2824       kPositivePreIndex},
2825      {{al, r1, r8, plus, r4, PreIndex},
2826       "al r1 r8 plus r4 PreIndex",
2827       "PositivePreIndex_al_r1_r8_plus_r4_PreIndex",
2828       ARRAY_SIZE(kPositivePreIndex),
2829       kPositivePreIndex},
2830      {{al, r14, r2, plus, r6, PreIndex},
2831       "al r14 r2 plus r6 PreIndex",
2832       "PositivePreIndex_al_r14_r2_plus_r6_PreIndex",
2833       ARRAY_SIZE(kPositivePreIndex),
2834       kPositivePreIndex},
2835      {{al, r8, r14, minus, r4, PreIndex},
2836       "al r8 r14 minus r4 PreIndex",
2837       "NegativePreIndex_al_r8_r14_minus_r4_PreIndex",
2838       ARRAY_SIZE(kNegativePreIndex),
2839       kNegativePreIndex},
2840      {{al, r11, r12, minus, r8, PreIndex},
2841       "al r11 r12 minus r8 PreIndex",
2842       "NegativePreIndex_al_r11_r12_minus_r8_PreIndex",
2843       ARRAY_SIZE(kNegativePreIndex),
2844       kNegativePreIndex},
2845      {{al, r14, r3, minus, r6, PreIndex},
2846       "al r14 r3 minus r6 PreIndex",
2847       "NegativePreIndex_al_r14_r3_minus_r6_PreIndex",
2848       ARRAY_SIZE(kNegativePreIndex),
2849       kNegativePreIndex},
2850      {{al, r9, r14, minus, r12, PreIndex},
2851       "al r9 r14 minus r12 PreIndex",
2852       "NegativePreIndex_al_r9_r14_minus_r12_PreIndex",
2853       ARRAY_SIZE(kNegativePreIndex),
2854       kNegativePreIndex},
2855      {{al, r12, r10, minus, r9, PreIndex},
2856       "al r12 r10 minus r9 PreIndex",
2857       "NegativePreIndex_al_r12_r10_minus_r9_PreIndex",
2858       ARRAY_SIZE(kNegativePreIndex),
2859       kNegativePreIndex},
2860      {{al, r11, r3, minus, r8, PreIndex},
2861       "al r11 r3 minus r8 PreIndex",
2862       "NegativePreIndex_al_r11_r3_minus_r8_PreIndex",
2863       ARRAY_SIZE(kNegativePreIndex),
2864       kNegativePreIndex},
2865      {{al, r4, r7, minus, r2, PreIndex},
2866       "al r4 r7 minus r2 PreIndex",
2867       "NegativePreIndex_al_r4_r7_minus_r2_PreIndex",
2868       ARRAY_SIZE(kNegativePreIndex),
2869       kNegativePreIndex},
2870      {{al, r0, r5, minus, r1, PreIndex},
2871       "al r0 r5 minus r1 PreIndex",
2872       "NegativePreIndex_al_r0_r5_minus_r1_PreIndex",
2873       ARRAY_SIZE(kNegativePreIndex),
2874       kNegativePreIndex},
2875      {{al, r8, r14, minus, r9, PreIndex},
2876       "al r8 r14 minus r9 PreIndex",
2877       "NegativePreIndex_al_r8_r14_minus_r9_PreIndex",
2878       ARRAY_SIZE(kNegativePreIndex),
2879       kNegativePreIndex},
2880      {{al, r4, r5, minus, r6, PreIndex},
2881       "al r4 r5 minus r6 PreIndex",
2882       "NegativePreIndex_al_r4_r5_minus_r6_PreIndex",
2883       ARRAY_SIZE(kNegativePreIndex),
2884       kNegativePreIndex},
2885      {{al, r8, r5, minus, r12, PreIndex},
2886       "al r8 r5 minus r12 PreIndex",
2887       "NegativePreIndex_al_r8_r5_minus_r12_PreIndex",
2888       ARRAY_SIZE(kNegativePreIndex),
2889       kNegativePreIndex},
2890      {{al, r1, r5, minus, r12, PreIndex},
2891       "al r1 r5 minus r12 PreIndex",
2892       "NegativePreIndex_al_r1_r5_minus_r12_PreIndex",
2893       ARRAY_SIZE(kNegativePreIndex),
2894       kNegativePreIndex},
2895      {{al, r6, r0, minus, r10, PreIndex},
2896       "al r6 r0 minus r10 PreIndex",
2897       "NegativePreIndex_al_r6_r0_minus_r10_PreIndex",
2898       ARRAY_SIZE(kNegativePreIndex),
2899       kNegativePreIndex},
2900      {{al, r12, r2, minus, r10, PreIndex},
2901       "al r12 r2 minus r10 PreIndex",
2902       "NegativePreIndex_al_r12_r2_minus_r10_PreIndex",
2903       ARRAY_SIZE(kNegativePreIndex),
2904       kNegativePreIndex},
2905      {{al, r6, r8, minus, r2, PreIndex},
2906       "al r6 r8 minus r2 PreIndex",
2907       "NegativePreIndex_al_r6_r8_minus_r2_PreIndex",
2908       ARRAY_SIZE(kNegativePreIndex),
2909       kNegativePreIndex},
2910      {{al, r7, r3, minus, r9, PreIndex},
2911       "al r7 r3 minus r9 PreIndex",
2912       "NegativePreIndex_al_r7_r3_minus_r9_PreIndex",
2913       ARRAY_SIZE(kNegativePreIndex),
2914       kNegativePreIndex},
2915      {{al, r11, r9, minus, r10, PreIndex},
2916       "al r11 r9 minus r10 PreIndex",
2917       "NegativePreIndex_al_r11_r9_minus_r10_PreIndex",
2918       ARRAY_SIZE(kNegativePreIndex),
2919       kNegativePreIndex},
2920      {{al, r10, r9, minus, r2, PreIndex},
2921       "al r10 r9 minus r2 PreIndex",
2922       "NegativePreIndex_al_r10_r9_minus_r2_PreIndex",
2923       ARRAY_SIZE(kNegativePreIndex),
2924       kNegativePreIndex},
2925      {{al, r10, r1, minus, r3, PreIndex},
2926       "al r10 r1 minus r3 PreIndex",
2927       "NegativePreIndex_al_r10_r1_minus_r3_PreIndex",
2928       ARRAY_SIZE(kNegativePreIndex),
2929       kNegativePreIndex},
2930      {{al, r3, r1, minus, r7, PreIndex},
2931       "al r3 r1 minus r7 PreIndex",
2932       "NegativePreIndex_al_r3_r1_minus_r7_PreIndex",
2933       ARRAY_SIZE(kNegativePreIndex),
2934       kNegativePreIndex},
2935      {{al, r11, r14, minus, r9, PreIndex},
2936       "al r11 r14 minus r9 PreIndex",
2937       "NegativePreIndex_al_r11_r14_minus_r9_PreIndex",
2938       ARRAY_SIZE(kNegativePreIndex),
2939       kNegativePreIndex},
2940      {{al, r14, r0, minus, r6, PreIndex},
2941       "al r14 r0 minus r6 PreIndex",
2942       "NegativePreIndex_al_r14_r0_minus_r6_PreIndex",
2943       ARRAY_SIZE(kNegativePreIndex),
2944       kNegativePreIndex},
2945      {{al, r6, r3, minus, r2, PreIndex},
2946       "al r6 r3 minus r2 PreIndex",
2947       "NegativePreIndex_al_r6_r3_minus_r2_PreIndex",
2948       ARRAY_SIZE(kNegativePreIndex),
2949       kNegativePreIndex},
2950      {{al, r9, r11, minus, r5, PreIndex},
2951       "al r9 r11 minus r5 PreIndex",
2952       "NegativePreIndex_al_r9_r11_minus_r5_PreIndex",
2953       ARRAY_SIZE(kNegativePreIndex),
2954       kNegativePreIndex},
2955      {{al, r11, r2, minus, r8, PreIndex},
2956       "al r11 r2 minus r8 PreIndex",
2957       "NegativePreIndex_al_r11_r2_minus_r8_PreIndex",
2958       ARRAY_SIZE(kNegativePreIndex),
2959       kNegativePreIndex},
2960      {{al, r8, r1, minus, r6, PreIndex},
2961       "al r8 r1 minus r6 PreIndex",
2962       "NegativePreIndex_al_r8_r1_minus_r6_PreIndex",
2963       ARRAY_SIZE(kNegativePreIndex),
2964       kNegativePreIndex},
2965      {{al, r10, r11, minus, r5, PreIndex},
2966       "al r10 r11 minus r5 PreIndex",
2967       "NegativePreIndex_al_r10_r11_minus_r5_PreIndex",
2968       ARRAY_SIZE(kNegativePreIndex),
2969       kNegativePreIndex},
2970      {{al, r12, r4, minus, r7, PreIndex},
2971       "al r12 r4 minus r7 PreIndex",
2972       "NegativePreIndex_al_r12_r4_minus_r7_PreIndex",
2973       ARRAY_SIZE(kNegativePreIndex),
2974       kNegativePreIndex},
2975      {{al, r14, r4, minus, r8, PreIndex},
2976       "al r14 r4 minus r8 PreIndex",
2977       "NegativePreIndex_al_r14_r4_minus_r8_PreIndex",
2978       ARRAY_SIZE(kNegativePreIndex),
2979       kNegativePreIndex},
2980      {{al, r3, r6, minus, r9, PreIndex},
2981       "al r3 r6 minus r9 PreIndex",
2982       "NegativePreIndex_al_r3_r6_minus_r9_PreIndex",
2983       ARRAY_SIZE(kNegativePreIndex),
2984       kNegativePreIndex},
2985      {{al, r2, r1, minus, r0, PreIndex},
2986       "al r2 r1 minus r0 PreIndex",
2987       "NegativePreIndex_al_r2_r1_minus_r0_PreIndex",
2988       ARRAY_SIZE(kNegativePreIndex),
2989       kNegativePreIndex},
2990      {{al, r3, r12, minus, r9, PreIndex},
2991       "al r3 r12 minus r9 PreIndex",
2992       "NegativePreIndex_al_r3_r12_minus_r9_PreIndex",
2993       ARRAY_SIZE(kNegativePreIndex),
2994       kNegativePreIndex},
2995      {{al, r10, r5, minus, r6, PreIndex},
2996       "al r10 r5 minus r6 PreIndex",
2997       "NegativePreIndex_al_r10_r5_minus_r6_PreIndex",
2998       ARRAY_SIZE(kNegativePreIndex),
2999       kNegativePreIndex},
3000      {{al, r11, r2, minus, r6, PreIndex},
3001       "al r11 r2 minus r6 PreIndex",
3002       "NegativePreIndex_al_r11_r2_minus_r6_PreIndex",
3003       ARRAY_SIZE(kNegativePreIndex),
3004       kNegativePreIndex},
3005      {{al, r1, r4, minus, r10, PreIndex},
3006       "al r1 r4 minus r10 PreIndex",
3007       "NegativePreIndex_al_r1_r4_minus_r10_PreIndex",
3008       ARRAY_SIZE(kNegativePreIndex),
3009       kNegativePreIndex},
3010      {{al, r11, r2, minus, r10, PreIndex},
3011       "al r11 r2 minus r10 PreIndex",
3012       "NegativePreIndex_al_r11_r2_minus_r10_PreIndex",
3013       ARRAY_SIZE(kNegativePreIndex),
3014       kNegativePreIndex},
3015      {{al, r14, r12, minus, r5, PreIndex},
3016       "al r14 r12 minus r5 PreIndex",
3017       "NegativePreIndex_al_r14_r12_minus_r5_PreIndex",
3018       ARRAY_SIZE(kNegativePreIndex),
3019       kNegativePreIndex},
3020      {{al, r2, r12, minus, r5, PreIndex},
3021       "al r2 r12 minus r5 PreIndex",
3022       "NegativePreIndex_al_r2_r12_minus_r5_PreIndex",
3023       ARRAY_SIZE(kNegativePreIndex),
3024       kNegativePreIndex},
3025      {{al, r7, r3, minus, r0, PreIndex},
3026       "al r7 r3 minus r0 PreIndex",
3027       "NegativePreIndex_al_r7_r3_minus_r0_PreIndex",
3028       ARRAY_SIZE(kNegativePreIndex),
3029       kNegativePreIndex},
3030      {{al, r0, r9, minus, r11, PreIndex},
3031       "al r0 r9 minus r11 PreIndex",
3032       "NegativePreIndex_al_r0_r9_minus_r11_PreIndex",
3033       ARRAY_SIZE(kNegativePreIndex),
3034       kNegativePreIndex},
3035      {{al, r0, r6, minus, r9, PreIndex},
3036       "al r0 r6 minus r9 PreIndex",
3037       "NegativePreIndex_al_r0_r6_minus_r9_PreIndex",
3038       ARRAY_SIZE(kNegativePreIndex),
3039       kNegativePreIndex},
3040      {{al, r4, r6, minus, r0, PreIndex},
3041       "al r4 r6 minus r0 PreIndex",
3042       "NegativePreIndex_al_r4_r6_minus_r0_PreIndex",
3043       ARRAY_SIZE(kNegativePreIndex),
3044       kNegativePreIndex},
3045      {{al, r12, r11, minus, r14, PreIndex},
3046       "al r12 r11 minus r14 PreIndex",
3047       "NegativePreIndex_al_r12_r11_minus_r14_PreIndex",
3048       ARRAY_SIZE(kNegativePreIndex),
3049       kNegativePreIndex},
3050      {{al, r6, r2, minus, r10, PreIndex},
3051       "al r6 r2 minus r10 PreIndex",
3052       "NegativePreIndex_al_r6_r2_minus_r10_PreIndex",
3053       ARRAY_SIZE(kNegativePreIndex),
3054       kNegativePreIndex},
3055      {{al, r11, r4, minus, r10, PreIndex},
3056       "al r11 r4 minus r10 PreIndex",
3057       "NegativePreIndex_al_r11_r4_minus_r10_PreIndex",
3058       ARRAY_SIZE(kNegativePreIndex),
3059       kNegativePreIndex},
3060      {{al, r5, r3, minus, r12, PreIndex},
3061       "al r5 r3 minus r12 PreIndex",
3062       "NegativePreIndex_al_r5_r3_minus_r12_PreIndex",
3063       ARRAY_SIZE(kNegativePreIndex),
3064       kNegativePreIndex},
3065      {{al, r0, r9, minus, r3, PreIndex},
3066       "al r0 r9 minus r3 PreIndex",
3067       "NegativePreIndex_al_r0_r9_minus_r3_PreIndex",
3068       ARRAY_SIZE(kNegativePreIndex),
3069       kNegativePreIndex},
3070      {{al, r4, r7, minus, r12, PreIndex},
3071       "al r4 r7 minus r12 PreIndex",
3072       "NegativePreIndex_al_r4_r7_minus_r12_PreIndex",
3073       ARRAY_SIZE(kNegativePreIndex),
3074       kNegativePreIndex},
3075      {{al, r8, r3, minus, r14, PreIndex},
3076       "al r8 r3 minus r14 PreIndex",
3077       "NegativePreIndex_al_r8_r3_minus_r14_PreIndex",
3078       ARRAY_SIZE(kNegativePreIndex),
3079       kNegativePreIndex},
3080      {{al, r8, r12, minus, r10, PreIndex},
3081       "al r8 r12 minus r10 PreIndex",
3082       "NegativePreIndex_al_r8_r12_minus_r10_PreIndex",
3083       ARRAY_SIZE(kNegativePreIndex),
3084       kNegativePreIndex},
3085      {{al, r6, r5, minus, r9, PreIndex},
3086       "al r6 r5 minus r9 PreIndex",
3087       "NegativePreIndex_al_r6_r5_minus_r9_PreIndex",
3088       ARRAY_SIZE(kNegativePreIndex),
3089       kNegativePreIndex},
3090      {{al, r3, r6, minus, r14, PreIndex},
3091       "al r3 r6 minus r14 PreIndex",
3092       "NegativePreIndex_al_r3_r6_minus_r14_PreIndex",
3093       ARRAY_SIZE(kNegativePreIndex),
3094       kNegativePreIndex},
3095      {{al, r0, r8, minus, r4, PreIndex},
3096       "al r0 r8 minus r4 PreIndex",
3097       "NegativePreIndex_al_r0_r8_minus_r4_PreIndex",
3098       ARRAY_SIZE(kNegativePreIndex),
3099       kNegativePreIndex},
3100      {{al, r2, r6, minus, r12, PreIndex},
3101       "al r2 r6 minus r12 PreIndex",
3102       "NegativePreIndex_al_r2_r6_minus_r12_PreIndex",
3103       ARRAY_SIZE(kNegativePreIndex),
3104       kNegativePreIndex},
3105      {{al, r8, r12, minus, r11, PreIndex},
3106       "al r8 r12 minus r11 PreIndex",
3107       "NegativePreIndex_al_r8_r12_minus_r11_PreIndex",
3108       ARRAY_SIZE(kNegativePreIndex),
3109       kNegativePreIndex},
3110      {{al, r5, r10, minus, r11, PreIndex},
3111       "al r5 r10 minus r11 PreIndex",
3112       "NegativePreIndex_al_r5_r10_minus_r11_PreIndex",
3113       ARRAY_SIZE(kNegativePreIndex),
3114       kNegativePreIndex},
3115      {{al, r12, r5, minus, r10, PreIndex},
3116       "al r12 r5 minus r10 PreIndex",
3117       "NegativePreIndex_al_r12_r5_minus_r10_PreIndex",
3118       ARRAY_SIZE(kNegativePreIndex),
3119       kNegativePreIndex},
3120      {{al, r10, r2, minus, r1, PreIndex},
3121       "al r10 r2 minus r1 PreIndex",
3122       "NegativePreIndex_al_r10_r2_minus_r1_PreIndex",
3123       ARRAY_SIZE(kNegativePreIndex),
3124       kNegativePreIndex},
3125      {{al, r10, r6, minus, r7, PreIndex},
3126       "al r10 r6 minus r7 PreIndex",
3127       "NegativePreIndex_al_r10_r6_minus_r7_PreIndex",
3128       ARRAY_SIZE(kNegativePreIndex),
3129       kNegativePreIndex},
3130      {{al, r14, r10, minus, r11, PreIndex},
3131       "al r14 r10 minus r11 PreIndex",
3132       "NegativePreIndex_al_r14_r10_minus_r11_PreIndex",
3133       ARRAY_SIZE(kNegativePreIndex),
3134       kNegativePreIndex},
3135      {{al, r11, r14, minus, r10, PreIndex},
3136       "al r11 r14 minus r10 PreIndex",
3137       "NegativePreIndex_al_r11_r14_minus_r10_PreIndex",
3138       ARRAY_SIZE(kNegativePreIndex),
3139       kNegativePreIndex},
3140      {{al, r9, r7, minus, r11, PreIndex},
3141       "al r9 r7 minus r11 PreIndex",
3142       "NegativePreIndex_al_r9_r7_minus_r11_PreIndex",
3143       ARRAY_SIZE(kNegativePreIndex),
3144       kNegativePreIndex},
3145      {{al, r2, r10, minus, r6, PreIndex},
3146       "al r2 r10 minus r6 PreIndex",
3147       "NegativePreIndex_al_r2_r10_minus_r6_PreIndex",
3148       ARRAY_SIZE(kNegativePreIndex),
3149       kNegativePreIndex},
3150      {{al, r6, r5, minus, r0, PreIndex},
3151       "al r6 r5 minus r0 PreIndex",
3152       "NegativePreIndex_al_r6_r5_minus_r0_PreIndex",
3153       ARRAY_SIZE(kNegativePreIndex),
3154       kNegativePreIndex},
3155      {{al, r0, r6, minus, r2, PreIndex},
3156       "al r0 r6 minus r2 PreIndex",
3157       "NegativePreIndex_al_r0_r6_minus_r2_PreIndex",
3158       ARRAY_SIZE(kNegativePreIndex),
3159       kNegativePreIndex},
3160      {{al, r14, r6, minus, r8, PreIndex},
3161       "al r14 r6 minus r8 PreIndex",
3162       "NegativePreIndex_al_r14_r6_minus_r8_PreIndex",
3163       ARRAY_SIZE(kNegativePreIndex),
3164       kNegativePreIndex},
3165      {{al, r14, r9, minus, r2, PreIndex},
3166       "al r14 r9 minus r2 PreIndex",
3167       "NegativePreIndex_al_r14_r9_minus_r2_PreIndex",
3168       ARRAY_SIZE(kNegativePreIndex),
3169       kNegativePreIndex},
3170      {{al, r6, r5, minus, r3, PreIndex},
3171       "al r6 r5 minus r3 PreIndex",
3172       "NegativePreIndex_al_r6_r5_minus_r3_PreIndex",
3173       ARRAY_SIZE(kNegativePreIndex),
3174       kNegativePreIndex},
3175      {{al, r0, r12, minus, r7, PreIndex},
3176       "al r0 r12 minus r7 PreIndex",
3177       "NegativePreIndex_al_r0_r12_minus_r7_PreIndex",
3178       ARRAY_SIZE(kNegativePreIndex),
3179       kNegativePreIndex},
3180      {{al, r11, r3, minus, r4, PreIndex},
3181       "al r11 r3 minus r4 PreIndex",
3182       "NegativePreIndex_al_r11_r3_minus_r4_PreIndex",
3183       ARRAY_SIZE(kNegativePreIndex),
3184       kNegativePreIndex},
3185      {{al, r10, r4, minus, r5, PreIndex},
3186       "al r10 r4 minus r5 PreIndex",
3187       "NegativePreIndex_al_r10_r4_minus_r5_PreIndex",
3188       ARRAY_SIZE(kNegativePreIndex),
3189       kNegativePreIndex},
3190      {{al, r1, r8, minus, r0, PreIndex},
3191       "al r1 r8 minus r0 PreIndex",
3192       "NegativePreIndex_al_r1_r8_minus_r0_PreIndex",
3193       ARRAY_SIZE(kNegativePreIndex),
3194       kNegativePreIndex},
3195      {{al, r10, r14, minus, r9, PreIndex},
3196       "al r10 r14 minus r9 PreIndex",
3197       "NegativePreIndex_al_r10_r14_minus_r9_PreIndex",
3198       ARRAY_SIZE(kNegativePreIndex),
3199       kNegativePreIndex},
3200      {{al, r12, r3, minus, r9, PreIndex},
3201       "al r12 r3 minus r9 PreIndex",
3202       "NegativePreIndex_al_r12_r3_minus_r9_PreIndex",
3203       ARRAY_SIZE(kNegativePreIndex),
3204       kNegativePreIndex},
3205      {{al, r7, r9, minus, r10, PreIndex},
3206       "al r7 r9 minus r10 PreIndex",
3207       "NegativePreIndex_al_r7_r9_minus_r10_PreIndex",
3208       ARRAY_SIZE(kNegativePreIndex),
3209       kNegativePreIndex},
3210      {{al, r8, r6, minus, r1, PreIndex},
3211       "al r8 r6 minus r1 PreIndex",
3212       "NegativePreIndex_al_r8_r6_minus_r1_PreIndex",
3213       ARRAY_SIZE(kNegativePreIndex),
3214       kNegativePreIndex},
3215      {{al, r12, r10, minus, r8, PreIndex},
3216       "al r12 r10 minus r8 PreIndex",
3217       "NegativePreIndex_al_r12_r10_minus_r8_PreIndex",
3218       ARRAY_SIZE(kNegativePreIndex),
3219       kNegativePreIndex},
3220      {{al, r0, r4, minus, r12, PreIndex},
3221       "al r0 r4 minus r12 PreIndex",
3222       "NegativePreIndex_al_r0_r4_minus_r12_PreIndex",
3223       ARRAY_SIZE(kNegativePreIndex),
3224       kNegativePreIndex},
3225      {{al, r2, r10, minus, r3, PreIndex},
3226       "al r2 r10 minus r3 PreIndex",
3227       "NegativePreIndex_al_r2_r10_minus_r3_PreIndex",
3228       ARRAY_SIZE(kNegativePreIndex),
3229       kNegativePreIndex},
3230      {{al, r5, r11, minus, r14, PreIndex},
3231       "al r5 r11 minus r14 PreIndex",
3232       "NegativePreIndex_al_r5_r11_minus_r14_PreIndex",
3233       ARRAY_SIZE(kNegativePreIndex),
3234       kNegativePreIndex},
3235      {{al, r7, r5, minus, r11, PreIndex},
3236       "al r7 r5 minus r11 PreIndex",
3237       "NegativePreIndex_al_r7_r5_minus_r11_PreIndex",
3238       ARRAY_SIZE(kNegativePreIndex),
3239       kNegativePreIndex},
3240      {{al, r1, r3, minus, r5, PreIndex},
3241       "al r1 r3 minus r5 PreIndex",
3242       "NegativePreIndex_al_r1_r3_minus_r5_PreIndex",
3243       ARRAY_SIZE(kNegativePreIndex),
3244       kNegativePreIndex},
3245      {{al, r6, r11, minus, r1, PreIndex},
3246       "al r6 r11 minus r1 PreIndex",
3247       "NegativePreIndex_al_r6_r11_minus_r1_PreIndex",
3248       ARRAY_SIZE(kNegativePreIndex),
3249       kNegativePreIndex},
3250      {{al, r5, r10, minus, r9, PreIndex},
3251       "al r5 r10 minus r9 PreIndex",
3252       "NegativePreIndex_al_r5_r10_minus_r9_PreIndex",
3253       ARRAY_SIZE(kNegativePreIndex),
3254       kNegativePreIndex},
3255      {{al, r5, r12, minus, r2, PreIndex},
3256       "al r5 r12 minus r2 PreIndex",
3257       "NegativePreIndex_al_r5_r12_minus_r2_PreIndex",
3258       ARRAY_SIZE(kNegativePreIndex),
3259       kNegativePreIndex},
3260      {{al, r4, r2, minus, r12, PreIndex},
3261       "al r4 r2 minus r12 PreIndex",
3262       "NegativePreIndex_al_r4_r2_minus_r12_PreIndex",
3263       ARRAY_SIZE(kNegativePreIndex),
3264       kNegativePreIndex},
3265      {{al, r11, r2, minus, r12, PreIndex},
3266       "al r11 r2 minus r12 PreIndex",
3267       "NegativePreIndex_al_r11_r2_minus_r12_PreIndex",
3268       ARRAY_SIZE(kNegativePreIndex),
3269       kNegativePreIndex},
3270      {{al, r14, r11, minus, r5, PreIndex},
3271       "al r14 r11 minus r5 PreIndex",
3272       "NegativePreIndex_al_r14_r11_minus_r5_PreIndex",
3273       ARRAY_SIZE(kNegativePreIndex),
3274       kNegativePreIndex},
3275      {{al, r11, r14, minus, r3, PreIndex},
3276       "al r11 r14 minus r3 PreIndex",
3277       "NegativePreIndex_al_r11_r14_minus_r3_PreIndex",
3278       ARRAY_SIZE(kNegativePreIndex),
3279       kNegativePreIndex},
3280      {{al, r11, r5, minus, r9, PreIndex},
3281       "al r11 r5 minus r9 PreIndex",
3282       "NegativePreIndex_al_r11_r5_minus_r9_PreIndex",
3283       ARRAY_SIZE(kNegativePreIndex),
3284       kNegativePreIndex},
3285      {{al, r2, r1, minus, r14, PreIndex},
3286       "al r2 r1 minus r14 PreIndex",
3287       "NegativePreIndex_al_r2_r1_minus_r14_PreIndex",
3288       ARRAY_SIZE(kNegativePreIndex),
3289       kNegativePreIndex},
3290      {{al, r8, r7, minus, r12, PreIndex},
3291       "al r8 r7 minus r12 PreIndex",
3292       "NegativePreIndex_al_r8_r7_minus_r12_PreIndex",
3293       ARRAY_SIZE(kNegativePreIndex),
3294       kNegativePreIndex},
3295      {{al, r5, r1, minus, r10, PreIndex},
3296       "al r5 r1 minus r10 PreIndex",
3297       "NegativePreIndex_al_r5_r1_minus_r10_PreIndex",
3298       ARRAY_SIZE(kNegativePreIndex),
3299       kNegativePreIndex},
3300      {{al, r1, r10, minus, r2, PreIndex},
3301       "al r1 r10 minus r2 PreIndex",
3302       "NegativePreIndex_al_r1_r10_minus_r2_PreIndex",
3303       ARRAY_SIZE(kNegativePreIndex),
3304       kNegativePreIndex},
3305      {{al, r7, r3, minus, r2, PreIndex},
3306       "al r7 r3 minus r2 PreIndex",
3307       "NegativePreIndex_al_r7_r3_minus_r2_PreIndex",
3308       ARRAY_SIZE(kNegativePreIndex),
3309       kNegativePreIndex},
3310      {{al, r9, r4, minus, r12, PreIndex},
3311       "al r9 r4 minus r12 PreIndex",
3312       "NegativePreIndex_al_r9_r4_minus_r12_PreIndex",
3313       ARRAY_SIZE(kNegativePreIndex),
3314       kNegativePreIndex},
3315      {{al, r8, r10, minus, r1, PreIndex},
3316       "al r8 r10 minus r1 PreIndex",
3317       "NegativePreIndex_al_r8_r10_minus_r1_PreIndex",
3318       ARRAY_SIZE(kNegativePreIndex),
3319       kNegativePreIndex},
3320      {{al, r5, r0, minus, r4, PreIndex},
3321       "al r5 r0 minus r4 PreIndex",
3322       "NegativePreIndex_al_r5_r0_minus_r4_PreIndex",
3323       ARRAY_SIZE(kNegativePreIndex),
3324       kNegativePreIndex},
3325      {{al, r3, r2, minus, r11, PreIndex},
3326       "al r3 r2 minus r11 PreIndex",
3327       "NegativePreIndex_al_r3_r2_minus_r11_PreIndex",
3328       ARRAY_SIZE(kNegativePreIndex),
3329       kNegativePreIndex},
3330      {{al, r6, r14, minus, r2, PreIndex},
3331       "al r6 r14 minus r2 PreIndex",
3332       "NegativePreIndex_al_r6_r14_minus_r2_PreIndex",
3333       ARRAY_SIZE(kNegativePreIndex),
3334       kNegativePreIndex}};
3335 
3336 // We record all inputs to the instructions as outputs. This way, we also check
3337 // that what shouldn't change didn't change.
3338 struct TestResult {
3339   size_t output_size;
3340   const Inputs* outputs;
3341 };
3342 
3343 // These headers each contain an array of `TestResult` with the reference output
3344 // values. The reference arrays are names `kReference{mnemonic}`.
3345 #include "aarch32/traces/simulator-cond-rd-memop-rs-ldr-a32.h"
3346 #include "aarch32/traces/simulator-cond-rd-memop-rs-ldrb-a32.h"
3347 #include "aarch32/traces/simulator-cond-rd-memop-rs-ldrh-a32.h"
3348 #include "aarch32/traces/simulator-cond-rd-memop-rs-ldrsb-a32.h"
3349 #include "aarch32/traces/simulator-cond-rd-memop-rs-ldrsh-a32.h"
3350 #include "aarch32/traces/simulator-cond-rd-memop-rs-str-a32.h"
3351 #include "aarch32/traces/simulator-cond-rd-memop-rs-strb-a32.h"
3352 #include "aarch32/traces/simulator-cond-rd-memop-rs-strh-a32.h"
3353 
3354 
3355 // The maximum number of errors to report in detail for each test.
3356 const unsigned kErrorReportLimit = 8;
3357 
3358 typedef void (MacroAssembler::*Fn)(Condition cond,
3359                                    Register rd,
3360                                    const MemOperand& memop);
3361 
TestHelper(Fn instruction,const char * mnemonic,const TestResult reference[])3362 void TestHelper(Fn instruction,
3363                 const char* mnemonic,
3364                 const TestResult reference[]) {
3365   SETUP();
3366   masm.UseA32();
3367   START();
3368 
3369   // Data to compare to `reference`.
3370   TestResult* results[ARRAY_SIZE(kTests)];
3371 
3372   // Test cases for memory bound instructions may allocate a buffer and save its
3373   // address in this array.
3374   byte* scratch_memory_buffers[ARRAY_SIZE(kTests)];
3375 
3376   // Generate a loop for each element in `kTests`. Each loop tests one specific
3377   // instruction.
3378   for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
3379     // Allocate results on the heap for this test.
3380     results[i] = new TestResult;
3381     results[i]->outputs = new Inputs[kTests[i].input_size];
3382     results[i]->output_size = kTests[i].input_size;
3383 
3384     size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size;
3385     VIXL_ASSERT(IsUint32(input_stride));
3386 
3387     scratch_memory_buffers[i] = NULL;
3388 
3389     Label loop;
3390     UseScratchRegisterScope scratch_registers(&masm);
3391     // Include all registers from r0 ro r12.
3392     scratch_registers.Include(RegisterList(0x1fff));
3393 
3394     // Values to pass to the macro-assembler.
3395     Condition cond = kTests[i].operands.cond;
3396     Register rd = kTests[i].operands.rd;
3397     Register rn = kTests[i].operands.rn;
3398     Sign sign = kTests[i].operands.sign;
3399     Register rm = kTests[i].operands.rm;
3400     AddrMode addr_mode = kTests[i].operands.addr_mode;
3401     MemOperand memop(rn, sign, rm, addr_mode);
3402     scratch_registers.Exclude(rd);
3403     scratch_registers.Exclude(rn);
3404     scratch_registers.Exclude(rm);
3405 
3406     // Allocate reserved registers for our own use.
3407     Register input_ptr = scratch_registers.Acquire();
3408     Register input_end = scratch_registers.Acquire();
3409     Register result_ptr = scratch_registers.Acquire();
3410 
3411     // Initialize `input_ptr` to the first element and `input_end` the address
3412     // after the array.
3413     __ Mov(input_ptr, Operand::From(kTests[i].inputs));
3414     __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride));
3415     __ Mov(result_ptr, Operand::From(results[i]->outputs));
3416     __ Bind(&loop);
3417 
3418     {
3419       UseScratchRegisterScope temp_registers(&masm);
3420       Register nzcv_bits = temp_registers.Acquire();
3421       Register saved_q_bit = temp_registers.Acquire();
3422       // Save the `Q` bit flag.
3423       __ Mrs(saved_q_bit, APSR);
3424       __ And(saved_q_bit, saved_q_bit, QFlag);
3425       // Set the `NZCV` and `Q` flags together.
3426       __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr)));
3427       __ Orr(nzcv_bits, nzcv_bits, saved_q_bit);
3428       __ Msr(APSR_nzcvq, nzcv_bits);
3429     }
3430     __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd)));
3431     __ Ldr(rm, MemOperand(input_ptr, offsetof(Inputs, rm)));
3432     // Allocate 4 bytes for the instruction to work with.
3433     scratch_memory_buffers[i] = new byte[4];
3434     {
3435       UseScratchRegisterScope temp_registers(&masm);
3436 
3437       Register memop_tmp = temp_registers.Acquire();
3438       Register base_register = memop.GetBaseRegister();
3439 
3440       // Write the expected data into the scratch buffer.
3441       __ Mov(base_register, Operand::From(scratch_memory_buffers[i]));
3442       __ Ldr(memop_tmp, MemOperand(input_ptr, offsetof(Inputs, memop) + 4));
3443       __ Str(memop_tmp, MemOperand(base_register));
3444 
3445       // Compute the address to put into the base register so that the
3446       // `MemOperand` points to the right location.
3447       // TODO: Support more kinds of `MemOperand`.
3448       if (!memop.IsPostIndex()) {
3449         if (memop.IsImmediate()) {
3450           if (memop.GetSign().IsPlus()) {
3451             __ Mov(memop_tmp, memop.GetOffsetImmediate());
3452             __ Sub(base_register, base_register, memop_tmp);
3453           } else {
3454             __ Mov(memop_tmp, -memop.GetOffsetImmediate());
3455             __ Add(base_register, base_register, memop_tmp);
3456           }
3457         } else if (memop.IsShiftedRegister()) {
3458           __ Mov(memop_tmp,
3459                  Operand(memop.GetOffsetRegister(),
3460                          memop.GetShift(),
3461                          memop.GetShiftAmount()));
3462           if (memop.GetSign().IsPlus()) {
3463             __ Sub(base_register, base_register, memop_tmp);
3464           } else {
3465             __ Add(base_register, base_register, memop_tmp);
3466           }
3467         }
3468       }
3469     }
3470 
3471 
3472     (masm.*instruction)(cond, rd, memop);
3473 
3474     {
3475       UseScratchRegisterScope temp_registers(&masm);
3476       Register nzcv_bits = temp_registers.Acquire();
3477       __ Mrs(nzcv_bits, APSR);
3478       // Only record the NZCV bits.
3479       __ And(nzcv_bits, nzcv_bits, NZCVFlag);
3480       __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr)));
3481     }
3482     __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd)));
3483     __ Str(rm, MemOperand(result_ptr, offsetof(Inputs, rm)));
3484     {
3485       UseScratchRegisterScope temp_registers(&masm);
3486       Register memop_tmp = temp_registers.Acquire();
3487       Register base_register = memop.GetBaseRegister();
3488 
3489       // Compute the address of the scratch buffer by from the base register. If
3490       // the instruction has updated the base register, we will be able to
3491       // record it.
3492       if (!memop.IsPostIndex()) {
3493         if (memop.IsImmediate()) {
3494           if (memop.GetSign().IsPlus()) {
3495             __ Mov(memop_tmp, memop.GetOffsetImmediate());
3496             __ Add(base_register, base_register, memop_tmp);
3497           } else {
3498             __ Mov(memop_tmp, -memop.GetOffsetImmediate());
3499             __ Sub(base_register, base_register, memop_tmp);
3500           }
3501         } else if (memop.IsShiftedRegister()) {
3502           __ Mov(memop_tmp,
3503                  Operand(memop.GetOffsetRegister(),
3504                          memop.GetShift(),
3505                          memop.GetShiftAmount()));
3506           if (memop.GetSign().IsPlus()) {
3507             __ Add(base_register, base_register, memop_tmp);
3508           } else {
3509             __ Sub(base_register, base_register, memop_tmp);
3510           }
3511         }
3512       }
3513 
3514       // Record the value of the base register, as an offset from the scratch
3515       // buffer's address.
3516       __ Mov(memop_tmp, Operand::From(scratch_memory_buffers[i]));
3517       __ Sub(base_register, base_register, memop_tmp);
3518       __ Str(base_register, MemOperand(result_ptr, offsetof(Inputs, memop)));
3519 
3520       // Record the 32 bit word from memory.
3521       __ Ldr(memop_tmp, MemOperand(memop_tmp));
3522       __ Str(memop_tmp, MemOperand(result_ptr, offsetof(Inputs, memop) + 4));
3523     }
3524 
3525 
3526     // Advance the result pointer.
3527     __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
3528     // Loop back until `input_ptr` is lower than `input_base`.
3529     __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0])));
3530     __ Cmp(input_ptr, input_end);
3531     __ B(ne, &loop);
3532   }
3533 
3534   END();
3535 
3536   RUN();
3537 
3538   if (Test::generate_test_trace()) {
3539     // Print the results.
3540     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
3541       printf("const Inputs kOutputs_%s_%s[] = {\n",
3542              mnemonic,
3543              kTests[i].identifier);
3544       for (size_t j = 0; j < results[i]->output_size; j++) {
3545         printf("  { ");
3546         printf("0x%08" PRIx32, results[i]->outputs[j].apsr);
3547         printf(", ");
3548         printf("0x%08" PRIx32, results[i]->outputs[j].rd);
3549         printf(", ");
3550         printf("0x%08" PRIx32, results[i]->outputs[j].rm);
3551         printf(", ");
3552         printf("{0x%08" PRIx32 ", 0x%08" PRIx32 "}",
3553                results[i]->outputs[j].memop[0],
3554                results[i]->outputs[j].memop[1]);
3555         printf(" },\n");
3556       }
3557       printf("};\n");
3558     }
3559     printf("const TestResult kReference%s[] = {\n", mnemonic);
3560     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
3561       printf("  {\n");
3562       printf("    ARRAY_SIZE(kOutputs_%s_%s),\n",
3563              mnemonic,
3564              kTests[i].identifier);
3565       printf("    kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier);
3566       printf("  },\n");
3567     }
3568     printf("};\n");
3569   } else if (kCheckSimulatorTestResults) {
3570     // Check the results.
3571     unsigned total_error_count = 0;
3572     for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
3573       bool instruction_has_errors = false;
3574       for (size_t j = 0; j < kTests[i].input_size; j++) {
3575         uint32_t apsr = results[i]->outputs[j].apsr;
3576         uint32_t rd = results[i]->outputs[j].rd;
3577         uint32_t rm = results[i]->outputs[j].rm;
3578         uint32_t memop[2] = {results[i]->outputs[j].memop[0],
3579                              results[i]->outputs[j].memop[1]};
3580 
3581         uint32_t apsr_input = kTests[i].inputs[j].apsr;
3582         uint32_t rd_input = kTests[i].inputs[j].rd;
3583         uint32_t rm_input = kTests[i].inputs[j].rm;
3584         uint32_t memop_input[2] = {kTests[i].inputs[j].memop[0],
3585                                    kTests[i].inputs[j].memop[1]};
3586 
3587         uint32_t apsr_ref = reference[i].outputs[j].apsr;
3588         uint32_t rd_ref = reference[i].outputs[j].rd;
3589         uint32_t rm_ref = reference[i].outputs[j].rm;
3590         uint32_t memop_ref[2] = {results[i]->outputs[j].memop[0],
3591                                  results[i]->outputs[j].memop[1]};
3592 
3593 
3594         if (((apsr != apsr_ref) || (rd != rd_ref) || (rm != rm_ref) ||
3595              ((memop[0] != memop_ref[0]) && (memop[1] != memop_ref[1]))) &&
3596             (++total_error_count <= kErrorReportLimit)) {
3597           // Print the instruction once even if it triggered multiple failures.
3598           if (!instruction_has_errors) {
3599             printf("Error(s) when testing \"%s %s\":\n",
3600                    mnemonic,
3601                    kTests[i].operands_description);
3602             instruction_has_errors = true;
3603           }
3604           // Print subsequent errors.
3605           printf("  Input:    ");
3606           printf("0x%08" PRIx32, apsr_input);
3607           printf(", ");
3608           printf("0x%08" PRIx32, rd_input);
3609           printf(", ");
3610           printf("0x%08" PRIx32, rm_input);
3611           printf(", ");
3612           printf("{0x%08" PRIx32 ", 0x%08" PRIx32 "}",
3613                  memop_input[0],
3614                  memop_input[1]);
3615           printf("\n");
3616           printf("  Expected: ");
3617           printf("0x%08" PRIx32, apsr_ref);
3618           printf(", ");
3619           printf("0x%08" PRIx32, rd_ref);
3620           printf(", ");
3621           printf("0x%08" PRIx32, rm_ref);
3622           printf(", ");
3623           printf("{0x%08" PRIx32 ", 0x%08" PRIx32 "}",
3624                  memop_ref[0],
3625                  memop_ref[1]);
3626           printf("\n");
3627           printf("  Found:    ");
3628           printf("0x%08" PRIx32, apsr);
3629           printf(", ");
3630           printf("0x%08" PRIx32, rd);
3631           printf(", ");
3632           printf("0x%08" PRIx32, rm);
3633           printf(", ");
3634           printf("{0x%08" PRIx32 ", 0x%08" PRIx32 "}", memop[0], memop[1]);
3635           printf("\n\n");
3636         }
3637       }
3638     }
3639 
3640     if (total_error_count > kErrorReportLimit) {
3641       printf("%u other errors follow.\n",
3642              total_error_count - kErrorReportLimit);
3643     }
3644     VIXL_CHECK(total_error_count == 0);
3645   } else {
3646     VIXL_WARNING("Assembled the code, but did not run anything.\n");
3647   }
3648 
3649   for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) {
3650     delete[] results[i]->outputs;
3651     delete results[i];
3652     delete[] scratch_memory_buffers[i];
3653   }
3654 }
3655 
3656 // Instantiate tests for each instruction in the list.
3657 // TODO: Remove this limitation by having a sandboxing mechanism.
3658 #if defined(VIXL_HOST_POINTER_32)
3659 #define TEST(mnemonic)                                                         \
3660   void Test_##mnemonic() {                                                     \
3661     TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic);    \
3662   }                                                                            \
3663   Test test_##mnemonic("AARCH32_SIMULATOR_COND_RD_MEMOP_RS_" #mnemonic "_A32", \
3664                        &Test_##mnemonic);
3665 #else
3666 #define TEST(mnemonic)                                                         \
3667   void Test_##mnemonic() {                                                     \
3668     VIXL_WARNING("This test can only run on a 32-bit host.\n");                \
3669     USE(TestHelper);                                                           \
3670   }                                                                            \
3671   Test test_##mnemonic("AARCH32_SIMULATOR_COND_RD_MEMOP_RS_" #mnemonic "_A32", \
3672                        &Test_##mnemonic);
3673 #endif
3674 
3675 FOREACH_INSTRUCTION(TEST)
3676 #undef TEST
3677 
3678 }  // namespace
3679 #endif
3680 
3681 }  // namespace aarch32
3682 }  // namespace vixl
3683