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-assembler-aarch32.cc.in template file using
31// tools/generate_tests.py.
32//
33// PLEASE DO NOT EDIT.
34// -----------------------------------------------------------------------------
35
36
37#include "test-runner.h"
38
39#include "test-utils.h"
40#include "test-utils-aarch32.h"
41
42#include "aarch32/assembler-aarch32.h"
43#include "aarch32/macro-assembler-aarch32.h"
44
45#define BUF_SIZE (4096)
46
47namespace vixl {
48namespace aarch32 {
49
50// List of instruction mnemonics.
51#define FOREACH_INSTRUCTION(M) \
52  M(cmn)                       \
53  M(tst)
54
55
56// The following definitions are defined again in each generated test, therefore
57// we need to place them in an anomymous namespace. It expresses that they are
58// local to this file only, and the compiler is not allowed to share these types
59// across test files during template instantiation. Specifically, `Operands` has
60// various layouts across generated tests so it absolutely cannot be shared.
61
62#ifdef VIXL_INCLUDE_TARGET_T32
63namespace {
64
65// Values to be passed to the assembler to produce the instruction under test.
66struct Operands {
67  Condition cond;
68  Register rd;
69  Register rn;
70};
71
72// This structure contains all data needed to test one specific
73// instruction.
74struct TestData {
75  // The `operands` field represents what to pass to the assembler to
76  // produce the instruction.
77  Operands operands;
78  // True if we need to generate an IT instruction for this test to be valid.
79  bool in_it_block;
80  // The condition to give the IT instruction, this will be set to "al" by
81  // default.
82  Condition it_condition;
83  // Description of the operands, used for error reporting.
84  const char* operands_description;
85  // Unique identifier, used for generating traces.
86  const char* identifier;
87};
88
89struct TestResult {
90  size_t size;
91  const byte* encoding;
92};
93
94// Each element of this array produce one instruction encoding.
95const TestData kTests[] = {{{eq, r0, r0}, true, eq, "eq r0 r0", "eq_r0_r0"},
96                           {{eq, r0, r1}, true, eq, "eq r0 r1", "eq_r0_r1"},
97                           {{eq, r0, r2}, true, eq, "eq r0 r2", "eq_r0_r2"},
98                           {{eq, r0, r3}, true, eq, "eq r0 r3", "eq_r0_r3"},
99                           {{eq, r0, r4}, true, eq, "eq r0 r4", "eq_r0_r4"},
100                           {{eq, r0, r5}, true, eq, "eq r0 r5", "eq_r0_r5"},
101                           {{eq, r0, r6}, true, eq, "eq r0 r6", "eq_r0_r6"},
102                           {{eq, r0, r7}, true, eq, "eq r0 r7", "eq_r0_r7"},
103                           {{eq, r1, r0}, true, eq, "eq r1 r0", "eq_r1_r0"},
104                           {{eq, r1, r1}, true, eq, "eq r1 r1", "eq_r1_r1"},
105                           {{eq, r1, r2}, true, eq, "eq r1 r2", "eq_r1_r2"},
106                           {{eq, r1, r3}, true, eq, "eq r1 r3", "eq_r1_r3"},
107                           {{eq, r1, r4}, true, eq, "eq r1 r4", "eq_r1_r4"},
108                           {{eq, r1, r5}, true, eq, "eq r1 r5", "eq_r1_r5"},
109                           {{eq, r1, r6}, true, eq, "eq r1 r6", "eq_r1_r6"},
110                           {{eq, r1, r7}, true, eq, "eq r1 r7", "eq_r1_r7"},
111                           {{eq, r2, r0}, true, eq, "eq r2 r0", "eq_r2_r0"},
112                           {{eq, r2, r1}, true, eq, "eq r2 r1", "eq_r2_r1"},
113                           {{eq, r2, r2}, true, eq, "eq r2 r2", "eq_r2_r2"},
114                           {{eq, r2, r3}, true, eq, "eq r2 r3", "eq_r2_r3"},
115                           {{eq, r2, r4}, true, eq, "eq r2 r4", "eq_r2_r4"},
116                           {{eq, r2, r5}, true, eq, "eq r2 r5", "eq_r2_r5"},
117                           {{eq, r2, r6}, true, eq, "eq r2 r6", "eq_r2_r6"},
118                           {{eq, r2, r7}, true, eq, "eq r2 r7", "eq_r2_r7"},
119                           {{eq, r3, r0}, true, eq, "eq r3 r0", "eq_r3_r0"},
120                           {{eq, r3, r1}, true, eq, "eq r3 r1", "eq_r3_r1"},
121                           {{eq, r3, r2}, true, eq, "eq r3 r2", "eq_r3_r2"},
122                           {{eq, r3, r3}, true, eq, "eq r3 r3", "eq_r3_r3"},
123                           {{eq, r3, r4}, true, eq, "eq r3 r4", "eq_r3_r4"},
124                           {{eq, r3, r5}, true, eq, "eq r3 r5", "eq_r3_r5"},
125                           {{eq, r3, r6}, true, eq, "eq r3 r6", "eq_r3_r6"},
126                           {{eq, r3, r7}, true, eq, "eq r3 r7", "eq_r3_r7"},
127                           {{eq, r4, r0}, true, eq, "eq r4 r0", "eq_r4_r0"},
128                           {{eq, r4, r1}, true, eq, "eq r4 r1", "eq_r4_r1"},
129                           {{eq, r4, r2}, true, eq, "eq r4 r2", "eq_r4_r2"},
130                           {{eq, r4, r3}, true, eq, "eq r4 r3", "eq_r4_r3"},
131                           {{eq, r4, r4}, true, eq, "eq r4 r4", "eq_r4_r4"},
132                           {{eq, r4, r5}, true, eq, "eq r4 r5", "eq_r4_r5"},
133                           {{eq, r4, r6}, true, eq, "eq r4 r6", "eq_r4_r6"},
134                           {{eq, r4, r7}, true, eq, "eq r4 r7", "eq_r4_r7"},
135                           {{eq, r5, r0}, true, eq, "eq r5 r0", "eq_r5_r0"},
136                           {{eq, r5, r1}, true, eq, "eq r5 r1", "eq_r5_r1"},
137                           {{eq, r5, r2}, true, eq, "eq r5 r2", "eq_r5_r2"},
138                           {{eq, r5, r3}, true, eq, "eq r5 r3", "eq_r5_r3"},
139                           {{eq, r5, r4}, true, eq, "eq r5 r4", "eq_r5_r4"},
140                           {{eq, r5, r5}, true, eq, "eq r5 r5", "eq_r5_r5"},
141                           {{eq, r5, r6}, true, eq, "eq r5 r6", "eq_r5_r6"},
142                           {{eq, r5, r7}, true, eq, "eq r5 r7", "eq_r5_r7"},
143                           {{eq, r6, r0}, true, eq, "eq r6 r0", "eq_r6_r0"},
144                           {{eq, r6, r1}, true, eq, "eq r6 r1", "eq_r6_r1"},
145                           {{eq, r6, r2}, true, eq, "eq r6 r2", "eq_r6_r2"},
146                           {{eq, r6, r3}, true, eq, "eq r6 r3", "eq_r6_r3"},
147                           {{eq, r6, r4}, true, eq, "eq r6 r4", "eq_r6_r4"},
148                           {{eq, r6, r5}, true, eq, "eq r6 r5", "eq_r6_r5"},
149                           {{eq, r6, r6}, true, eq, "eq r6 r6", "eq_r6_r6"},
150                           {{eq, r6, r7}, true, eq, "eq r6 r7", "eq_r6_r7"},
151                           {{eq, r7, r0}, true, eq, "eq r7 r0", "eq_r7_r0"},
152                           {{eq, r7, r1}, true, eq, "eq r7 r1", "eq_r7_r1"},
153                           {{eq, r7, r2}, true, eq, "eq r7 r2", "eq_r7_r2"},
154                           {{eq, r7, r3}, true, eq, "eq r7 r3", "eq_r7_r3"},
155                           {{eq, r7, r4}, true, eq, "eq r7 r4", "eq_r7_r4"},
156                           {{eq, r7, r5}, true, eq, "eq r7 r5", "eq_r7_r5"},
157                           {{eq, r7, r6}, true, eq, "eq r7 r6", "eq_r7_r6"},
158                           {{eq, r7, r7}, true, eq, "eq r7 r7", "eq_r7_r7"},
159                           {{ne, r0, r0}, true, ne, "ne r0 r0", "ne_r0_r0"},
160                           {{ne, r0, r1}, true, ne, "ne r0 r1", "ne_r0_r1"},
161                           {{ne, r0, r2}, true, ne, "ne r0 r2", "ne_r0_r2"},
162                           {{ne, r0, r3}, true, ne, "ne r0 r3", "ne_r0_r3"},
163                           {{ne, r0, r4}, true, ne, "ne r0 r4", "ne_r0_r4"},
164                           {{ne, r0, r5}, true, ne, "ne r0 r5", "ne_r0_r5"},
165                           {{ne, r0, r6}, true, ne, "ne r0 r6", "ne_r0_r6"},
166                           {{ne, r0, r7}, true, ne, "ne r0 r7", "ne_r0_r7"},
167                           {{ne, r1, r0}, true, ne, "ne r1 r0", "ne_r1_r0"},
168                           {{ne, r1, r1}, true, ne, "ne r1 r1", "ne_r1_r1"},
169                           {{ne, r1, r2}, true, ne, "ne r1 r2", "ne_r1_r2"},
170                           {{ne, r1, r3}, true, ne, "ne r1 r3", "ne_r1_r3"},
171                           {{ne, r1, r4}, true, ne, "ne r1 r4", "ne_r1_r4"},
172                           {{ne, r1, r5}, true, ne, "ne r1 r5", "ne_r1_r5"},
173                           {{ne, r1, r6}, true, ne, "ne r1 r6", "ne_r1_r6"},
174                           {{ne, r1, r7}, true, ne, "ne r1 r7", "ne_r1_r7"},
175                           {{ne, r2, r0}, true, ne, "ne r2 r0", "ne_r2_r0"},
176                           {{ne, r2, r1}, true, ne, "ne r2 r1", "ne_r2_r1"},
177                           {{ne, r2, r2}, true, ne, "ne r2 r2", "ne_r2_r2"},
178                           {{ne, r2, r3}, true, ne, "ne r2 r3", "ne_r2_r3"},
179                           {{ne, r2, r4}, true, ne, "ne r2 r4", "ne_r2_r4"},
180                           {{ne, r2, r5}, true, ne, "ne r2 r5", "ne_r2_r5"},
181                           {{ne, r2, r6}, true, ne, "ne r2 r6", "ne_r2_r6"},
182                           {{ne, r2, r7}, true, ne, "ne r2 r7", "ne_r2_r7"},
183                           {{ne, r3, r0}, true, ne, "ne r3 r0", "ne_r3_r0"},
184                           {{ne, r3, r1}, true, ne, "ne r3 r1", "ne_r3_r1"},
185                           {{ne, r3, r2}, true, ne, "ne r3 r2", "ne_r3_r2"},
186                           {{ne, r3, r3}, true, ne, "ne r3 r3", "ne_r3_r3"},
187                           {{ne, r3, r4}, true, ne, "ne r3 r4", "ne_r3_r4"},
188                           {{ne, r3, r5}, true, ne, "ne r3 r5", "ne_r3_r5"},
189                           {{ne, r3, r6}, true, ne, "ne r3 r6", "ne_r3_r6"},
190                           {{ne, r3, r7}, true, ne, "ne r3 r7", "ne_r3_r7"},
191                           {{ne, r4, r0}, true, ne, "ne r4 r0", "ne_r4_r0"},
192                           {{ne, r4, r1}, true, ne, "ne r4 r1", "ne_r4_r1"},
193                           {{ne, r4, r2}, true, ne, "ne r4 r2", "ne_r4_r2"},
194                           {{ne, r4, r3}, true, ne, "ne r4 r3", "ne_r4_r3"},
195                           {{ne, r4, r4}, true, ne, "ne r4 r4", "ne_r4_r4"},
196                           {{ne, r4, r5}, true, ne, "ne r4 r5", "ne_r4_r5"},
197                           {{ne, r4, r6}, true, ne, "ne r4 r6", "ne_r4_r6"},
198                           {{ne, r4, r7}, true, ne, "ne r4 r7", "ne_r4_r7"},
199                           {{ne, r5, r0}, true, ne, "ne r5 r0", "ne_r5_r0"},
200                           {{ne, r5, r1}, true, ne, "ne r5 r1", "ne_r5_r1"},
201                           {{ne, r5, r2}, true, ne, "ne r5 r2", "ne_r5_r2"},
202                           {{ne, r5, r3}, true, ne, "ne r5 r3", "ne_r5_r3"},
203                           {{ne, r5, r4}, true, ne, "ne r5 r4", "ne_r5_r4"},
204                           {{ne, r5, r5}, true, ne, "ne r5 r5", "ne_r5_r5"},
205                           {{ne, r5, r6}, true, ne, "ne r5 r6", "ne_r5_r6"},
206                           {{ne, r5, r7}, true, ne, "ne r5 r7", "ne_r5_r7"},
207                           {{ne, r6, r0}, true, ne, "ne r6 r0", "ne_r6_r0"},
208                           {{ne, r6, r1}, true, ne, "ne r6 r1", "ne_r6_r1"},
209                           {{ne, r6, r2}, true, ne, "ne r6 r2", "ne_r6_r2"},
210                           {{ne, r6, r3}, true, ne, "ne r6 r3", "ne_r6_r3"},
211                           {{ne, r6, r4}, true, ne, "ne r6 r4", "ne_r6_r4"},
212                           {{ne, r6, r5}, true, ne, "ne r6 r5", "ne_r6_r5"},
213                           {{ne, r6, r6}, true, ne, "ne r6 r6", "ne_r6_r6"},
214                           {{ne, r6, r7}, true, ne, "ne r6 r7", "ne_r6_r7"},
215                           {{ne, r7, r0}, true, ne, "ne r7 r0", "ne_r7_r0"},
216                           {{ne, r7, r1}, true, ne, "ne r7 r1", "ne_r7_r1"},
217                           {{ne, r7, r2}, true, ne, "ne r7 r2", "ne_r7_r2"},
218                           {{ne, r7, r3}, true, ne, "ne r7 r3", "ne_r7_r3"},
219                           {{ne, r7, r4}, true, ne, "ne r7 r4", "ne_r7_r4"},
220                           {{ne, r7, r5}, true, ne, "ne r7 r5", "ne_r7_r5"},
221                           {{ne, r7, r6}, true, ne, "ne r7 r6", "ne_r7_r6"},
222                           {{ne, r7, r7}, true, ne, "ne r7 r7", "ne_r7_r7"},
223                           {{cs, r0, r0}, true, cs, "cs r0 r0", "cs_r0_r0"},
224                           {{cs, r0, r1}, true, cs, "cs r0 r1", "cs_r0_r1"},
225                           {{cs, r0, r2}, true, cs, "cs r0 r2", "cs_r0_r2"},
226                           {{cs, r0, r3}, true, cs, "cs r0 r3", "cs_r0_r3"},
227                           {{cs, r0, r4}, true, cs, "cs r0 r4", "cs_r0_r4"},
228                           {{cs, r0, r5}, true, cs, "cs r0 r5", "cs_r0_r5"},
229                           {{cs, r0, r6}, true, cs, "cs r0 r6", "cs_r0_r6"},
230                           {{cs, r0, r7}, true, cs, "cs r0 r7", "cs_r0_r7"},
231                           {{cs, r1, r0}, true, cs, "cs r1 r0", "cs_r1_r0"},
232                           {{cs, r1, r1}, true, cs, "cs r1 r1", "cs_r1_r1"},
233                           {{cs, r1, r2}, true, cs, "cs r1 r2", "cs_r1_r2"},
234                           {{cs, r1, r3}, true, cs, "cs r1 r3", "cs_r1_r3"},
235                           {{cs, r1, r4}, true, cs, "cs r1 r4", "cs_r1_r4"},
236                           {{cs, r1, r5}, true, cs, "cs r1 r5", "cs_r1_r5"},
237                           {{cs, r1, r6}, true, cs, "cs r1 r6", "cs_r1_r6"},
238                           {{cs, r1, r7}, true, cs, "cs r1 r7", "cs_r1_r7"},
239                           {{cs, r2, r0}, true, cs, "cs r2 r0", "cs_r2_r0"},
240                           {{cs, r2, r1}, true, cs, "cs r2 r1", "cs_r2_r1"},
241                           {{cs, r2, r2}, true, cs, "cs r2 r2", "cs_r2_r2"},
242                           {{cs, r2, r3}, true, cs, "cs r2 r3", "cs_r2_r3"},
243                           {{cs, r2, r4}, true, cs, "cs r2 r4", "cs_r2_r4"},
244                           {{cs, r2, r5}, true, cs, "cs r2 r5", "cs_r2_r5"},
245                           {{cs, r2, r6}, true, cs, "cs r2 r6", "cs_r2_r6"},
246                           {{cs, r2, r7}, true, cs, "cs r2 r7", "cs_r2_r7"},
247                           {{cs, r3, r0}, true, cs, "cs r3 r0", "cs_r3_r0"},
248                           {{cs, r3, r1}, true, cs, "cs r3 r1", "cs_r3_r1"},
249                           {{cs, r3, r2}, true, cs, "cs r3 r2", "cs_r3_r2"},
250                           {{cs, r3, r3}, true, cs, "cs r3 r3", "cs_r3_r3"},
251                           {{cs, r3, r4}, true, cs, "cs r3 r4", "cs_r3_r4"},
252                           {{cs, r3, r5}, true, cs, "cs r3 r5", "cs_r3_r5"},
253                           {{cs, r3, r6}, true, cs, "cs r3 r6", "cs_r3_r6"},
254                           {{cs, r3, r7}, true, cs, "cs r3 r7", "cs_r3_r7"},
255                           {{cs, r4, r0}, true, cs, "cs r4 r0", "cs_r4_r0"},
256                           {{cs, r4, r1}, true, cs, "cs r4 r1", "cs_r4_r1"},
257                           {{cs, r4, r2}, true, cs, "cs r4 r2", "cs_r4_r2"},
258                           {{cs, r4, r3}, true, cs, "cs r4 r3", "cs_r4_r3"},
259                           {{cs, r4, r4}, true, cs, "cs r4 r4", "cs_r4_r4"},
260                           {{cs, r4, r5}, true, cs, "cs r4 r5", "cs_r4_r5"},
261                           {{cs, r4, r6}, true, cs, "cs r4 r6", "cs_r4_r6"},
262                           {{cs, r4, r7}, true, cs, "cs r4 r7", "cs_r4_r7"},
263                           {{cs, r5, r0}, true, cs, "cs r5 r0", "cs_r5_r0"},
264                           {{cs, r5, r1}, true, cs, "cs r5 r1", "cs_r5_r1"},
265                           {{cs, r5, r2}, true, cs, "cs r5 r2", "cs_r5_r2"},
266                           {{cs, r5, r3}, true, cs, "cs r5 r3", "cs_r5_r3"},
267                           {{cs, r5, r4}, true, cs, "cs r5 r4", "cs_r5_r4"},
268                           {{cs, r5, r5}, true, cs, "cs r5 r5", "cs_r5_r5"},
269                           {{cs, r5, r6}, true, cs, "cs r5 r6", "cs_r5_r6"},
270                           {{cs, r5, r7}, true, cs, "cs r5 r7", "cs_r5_r7"},
271                           {{cs, r6, r0}, true, cs, "cs r6 r0", "cs_r6_r0"},
272                           {{cs, r6, r1}, true, cs, "cs r6 r1", "cs_r6_r1"},
273                           {{cs, r6, r2}, true, cs, "cs r6 r2", "cs_r6_r2"},
274                           {{cs, r6, r3}, true, cs, "cs r6 r3", "cs_r6_r3"},
275                           {{cs, r6, r4}, true, cs, "cs r6 r4", "cs_r6_r4"},
276                           {{cs, r6, r5}, true, cs, "cs r6 r5", "cs_r6_r5"},
277                           {{cs, r6, r6}, true, cs, "cs r6 r6", "cs_r6_r6"},
278                           {{cs, r6, r7}, true, cs, "cs r6 r7", "cs_r6_r7"},
279                           {{cs, r7, r0}, true, cs, "cs r7 r0", "cs_r7_r0"},
280                           {{cs, r7, r1}, true, cs, "cs r7 r1", "cs_r7_r1"},
281                           {{cs, r7, r2}, true, cs, "cs r7 r2", "cs_r7_r2"},
282                           {{cs, r7, r3}, true, cs, "cs r7 r3", "cs_r7_r3"},
283                           {{cs, r7, r4}, true, cs, "cs r7 r4", "cs_r7_r4"},
284                           {{cs, r7, r5}, true, cs, "cs r7 r5", "cs_r7_r5"},
285                           {{cs, r7, r6}, true, cs, "cs r7 r6", "cs_r7_r6"},
286                           {{cs, r7, r7}, true, cs, "cs r7 r7", "cs_r7_r7"},
287                           {{cc, r0, r0}, true, cc, "cc r0 r0", "cc_r0_r0"},
288                           {{cc, r0, r1}, true, cc, "cc r0 r1", "cc_r0_r1"},
289                           {{cc, r0, r2}, true, cc, "cc r0 r2", "cc_r0_r2"},
290                           {{cc, r0, r3}, true, cc, "cc r0 r3", "cc_r0_r3"},
291                           {{cc, r0, r4}, true, cc, "cc r0 r4", "cc_r0_r4"},
292                           {{cc, r0, r5}, true, cc, "cc r0 r5", "cc_r0_r5"},
293                           {{cc, r0, r6}, true, cc, "cc r0 r6", "cc_r0_r6"},
294                           {{cc, r0, r7}, true, cc, "cc r0 r7", "cc_r0_r7"},
295                           {{cc, r1, r0}, true, cc, "cc r1 r0", "cc_r1_r0"},
296                           {{cc, r1, r1}, true, cc, "cc r1 r1", "cc_r1_r1"},
297                           {{cc, r1, r2}, true, cc, "cc r1 r2", "cc_r1_r2"},
298                           {{cc, r1, r3}, true, cc, "cc r1 r3", "cc_r1_r3"},
299                           {{cc, r1, r4}, true, cc, "cc r1 r4", "cc_r1_r4"},
300                           {{cc, r1, r5}, true, cc, "cc r1 r5", "cc_r1_r5"},
301                           {{cc, r1, r6}, true, cc, "cc r1 r6", "cc_r1_r6"},
302                           {{cc, r1, r7}, true, cc, "cc r1 r7", "cc_r1_r7"},
303                           {{cc, r2, r0}, true, cc, "cc r2 r0", "cc_r2_r0"},
304                           {{cc, r2, r1}, true, cc, "cc r2 r1", "cc_r2_r1"},
305                           {{cc, r2, r2}, true, cc, "cc r2 r2", "cc_r2_r2"},
306                           {{cc, r2, r3}, true, cc, "cc r2 r3", "cc_r2_r3"},
307                           {{cc, r2, r4}, true, cc, "cc r2 r4", "cc_r2_r4"},
308                           {{cc, r2, r5}, true, cc, "cc r2 r5", "cc_r2_r5"},
309                           {{cc, r2, r6}, true, cc, "cc r2 r6", "cc_r2_r6"},
310                           {{cc, r2, r7}, true, cc, "cc r2 r7", "cc_r2_r7"},
311                           {{cc, r3, r0}, true, cc, "cc r3 r0", "cc_r3_r0"},
312                           {{cc, r3, r1}, true, cc, "cc r3 r1", "cc_r3_r1"},
313                           {{cc, r3, r2}, true, cc, "cc r3 r2", "cc_r3_r2"},
314                           {{cc, r3, r3}, true, cc, "cc r3 r3", "cc_r3_r3"},
315                           {{cc, r3, r4}, true, cc, "cc r3 r4", "cc_r3_r4"},
316                           {{cc, r3, r5}, true, cc, "cc r3 r5", "cc_r3_r5"},
317                           {{cc, r3, r6}, true, cc, "cc r3 r6", "cc_r3_r6"},
318                           {{cc, r3, r7}, true, cc, "cc r3 r7", "cc_r3_r7"},
319                           {{cc, r4, r0}, true, cc, "cc r4 r0", "cc_r4_r0"},
320                           {{cc, r4, r1}, true, cc, "cc r4 r1", "cc_r4_r1"},
321                           {{cc, r4, r2}, true, cc, "cc r4 r2", "cc_r4_r2"},
322                           {{cc, r4, r3}, true, cc, "cc r4 r3", "cc_r4_r3"},
323                           {{cc, r4, r4}, true, cc, "cc r4 r4", "cc_r4_r4"},
324                           {{cc, r4, r5}, true, cc, "cc r4 r5", "cc_r4_r5"},
325                           {{cc, r4, r6}, true, cc, "cc r4 r6", "cc_r4_r6"},
326                           {{cc, r4, r7}, true, cc, "cc r4 r7", "cc_r4_r7"},
327                           {{cc, r5, r0}, true, cc, "cc r5 r0", "cc_r5_r0"},
328                           {{cc, r5, r1}, true, cc, "cc r5 r1", "cc_r5_r1"},
329                           {{cc, r5, r2}, true, cc, "cc r5 r2", "cc_r5_r2"},
330                           {{cc, r5, r3}, true, cc, "cc r5 r3", "cc_r5_r3"},
331                           {{cc, r5, r4}, true, cc, "cc r5 r4", "cc_r5_r4"},
332                           {{cc, r5, r5}, true, cc, "cc r5 r5", "cc_r5_r5"},
333                           {{cc, r5, r6}, true, cc, "cc r5 r6", "cc_r5_r6"},
334                           {{cc, r5, r7}, true, cc, "cc r5 r7", "cc_r5_r7"},
335                           {{cc, r6, r0}, true, cc, "cc r6 r0", "cc_r6_r0"},
336                           {{cc, r6, r1}, true, cc, "cc r6 r1", "cc_r6_r1"},
337                           {{cc, r6, r2}, true, cc, "cc r6 r2", "cc_r6_r2"},
338                           {{cc, r6, r3}, true, cc, "cc r6 r3", "cc_r6_r3"},
339                           {{cc, r6, r4}, true, cc, "cc r6 r4", "cc_r6_r4"},
340                           {{cc, r6, r5}, true, cc, "cc r6 r5", "cc_r6_r5"},
341                           {{cc, r6, r6}, true, cc, "cc r6 r6", "cc_r6_r6"},
342                           {{cc, r6, r7}, true, cc, "cc r6 r7", "cc_r6_r7"},
343                           {{cc, r7, r0}, true, cc, "cc r7 r0", "cc_r7_r0"},
344                           {{cc, r7, r1}, true, cc, "cc r7 r1", "cc_r7_r1"},
345                           {{cc, r7, r2}, true, cc, "cc r7 r2", "cc_r7_r2"},
346                           {{cc, r7, r3}, true, cc, "cc r7 r3", "cc_r7_r3"},
347                           {{cc, r7, r4}, true, cc, "cc r7 r4", "cc_r7_r4"},
348                           {{cc, r7, r5}, true, cc, "cc r7 r5", "cc_r7_r5"},
349                           {{cc, r7, r6}, true, cc, "cc r7 r6", "cc_r7_r6"},
350                           {{cc, r7, r7}, true, cc, "cc r7 r7", "cc_r7_r7"},
351                           {{mi, r0, r0}, true, mi, "mi r0 r0", "mi_r0_r0"},
352                           {{mi, r0, r1}, true, mi, "mi r0 r1", "mi_r0_r1"},
353                           {{mi, r0, r2}, true, mi, "mi r0 r2", "mi_r0_r2"},
354                           {{mi, r0, r3}, true, mi, "mi r0 r3", "mi_r0_r3"},
355                           {{mi, r0, r4}, true, mi, "mi r0 r4", "mi_r0_r4"},
356                           {{mi, r0, r5}, true, mi, "mi r0 r5", "mi_r0_r5"},
357                           {{mi, r0, r6}, true, mi, "mi r0 r6", "mi_r0_r6"},
358                           {{mi, r0, r7}, true, mi, "mi r0 r7", "mi_r0_r7"},
359                           {{mi, r1, r0}, true, mi, "mi r1 r0", "mi_r1_r0"},
360                           {{mi, r1, r1}, true, mi, "mi r1 r1", "mi_r1_r1"},
361                           {{mi, r1, r2}, true, mi, "mi r1 r2", "mi_r1_r2"},
362                           {{mi, r1, r3}, true, mi, "mi r1 r3", "mi_r1_r3"},
363                           {{mi, r1, r4}, true, mi, "mi r1 r4", "mi_r1_r4"},
364                           {{mi, r1, r5}, true, mi, "mi r1 r5", "mi_r1_r5"},
365                           {{mi, r1, r6}, true, mi, "mi r1 r6", "mi_r1_r6"},
366                           {{mi, r1, r7}, true, mi, "mi r1 r7", "mi_r1_r7"},
367                           {{mi, r2, r0}, true, mi, "mi r2 r0", "mi_r2_r0"},
368                           {{mi, r2, r1}, true, mi, "mi r2 r1", "mi_r2_r1"},
369                           {{mi, r2, r2}, true, mi, "mi r2 r2", "mi_r2_r2"},
370                           {{mi, r2, r3}, true, mi, "mi r2 r3", "mi_r2_r3"},
371                           {{mi, r2, r4}, true, mi, "mi r2 r4", "mi_r2_r4"},
372                           {{mi, r2, r5}, true, mi, "mi r2 r5", "mi_r2_r5"},
373                           {{mi, r2, r6}, true, mi, "mi r2 r6", "mi_r2_r6"},
374                           {{mi, r2, r7}, true, mi, "mi r2 r7", "mi_r2_r7"},
375                           {{mi, r3, r0}, true, mi, "mi r3 r0", "mi_r3_r0"},
376                           {{mi, r3, r1}, true, mi, "mi r3 r1", "mi_r3_r1"},
377                           {{mi, r3, r2}, true, mi, "mi r3 r2", "mi_r3_r2"},
378                           {{mi, r3, r3}, true, mi, "mi r3 r3", "mi_r3_r3"},
379                           {{mi, r3, r4}, true, mi, "mi r3 r4", "mi_r3_r4"},
380                           {{mi, r3, r5}, true, mi, "mi r3 r5", "mi_r3_r5"},
381                           {{mi, r3, r6}, true, mi, "mi r3 r6", "mi_r3_r6"},
382                           {{mi, r3, r7}, true, mi, "mi r3 r7", "mi_r3_r7"},
383                           {{mi, r4, r0}, true, mi, "mi r4 r0", "mi_r4_r0"},
384                           {{mi, r4, r1}, true, mi, "mi r4 r1", "mi_r4_r1"},
385                           {{mi, r4, r2}, true, mi, "mi r4 r2", "mi_r4_r2"},
386                           {{mi, r4, r3}, true, mi, "mi r4 r3", "mi_r4_r3"},
387                           {{mi, r4, r4}, true, mi, "mi r4 r4", "mi_r4_r4"},
388                           {{mi, r4, r5}, true, mi, "mi r4 r5", "mi_r4_r5"},
389                           {{mi, r4, r6}, true, mi, "mi r4 r6", "mi_r4_r6"},
390                           {{mi, r4, r7}, true, mi, "mi r4 r7", "mi_r4_r7"},
391                           {{mi, r5, r0}, true, mi, "mi r5 r0", "mi_r5_r0"},
392                           {{mi, r5, r1}, true, mi, "mi r5 r1", "mi_r5_r1"},
393                           {{mi, r5, r2}, true, mi, "mi r5 r2", "mi_r5_r2"},
394                           {{mi, r5, r3}, true, mi, "mi r5 r3", "mi_r5_r3"},
395                           {{mi, r5, r4}, true, mi, "mi r5 r4", "mi_r5_r4"},
396                           {{mi, r5, r5}, true, mi, "mi r5 r5", "mi_r5_r5"},
397                           {{mi, r5, r6}, true, mi, "mi r5 r6", "mi_r5_r6"},
398                           {{mi, r5, r7}, true, mi, "mi r5 r7", "mi_r5_r7"},
399                           {{mi, r6, r0}, true, mi, "mi r6 r0", "mi_r6_r0"},
400                           {{mi, r6, r1}, true, mi, "mi r6 r1", "mi_r6_r1"},
401                           {{mi, r6, r2}, true, mi, "mi r6 r2", "mi_r6_r2"},
402                           {{mi, r6, r3}, true, mi, "mi r6 r3", "mi_r6_r3"},
403                           {{mi, r6, r4}, true, mi, "mi r6 r4", "mi_r6_r4"},
404                           {{mi, r6, r5}, true, mi, "mi r6 r5", "mi_r6_r5"},
405                           {{mi, r6, r6}, true, mi, "mi r6 r6", "mi_r6_r6"},
406                           {{mi, r6, r7}, true, mi, "mi r6 r7", "mi_r6_r7"},
407                           {{mi, r7, r0}, true, mi, "mi r7 r0", "mi_r7_r0"},
408                           {{mi, r7, r1}, true, mi, "mi r7 r1", "mi_r7_r1"},
409                           {{mi, r7, r2}, true, mi, "mi r7 r2", "mi_r7_r2"},
410                           {{mi, r7, r3}, true, mi, "mi r7 r3", "mi_r7_r3"},
411                           {{mi, r7, r4}, true, mi, "mi r7 r4", "mi_r7_r4"},
412                           {{mi, r7, r5}, true, mi, "mi r7 r5", "mi_r7_r5"},
413                           {{mi, r7, r6}, true, mi, "mi r7 r6", "mi_r7_r6"},
414                           {{mi, r7, r7}, true, mi, "mi r7 r7", "mi_r7_r7"},
415                           {{pl, r0, r0}, true, pl, "pl r0 r0", "pl_r0_r0"},
416                           {{pl, r0, r1}, true, pl, "pl r0 r1", "pl_r0_r1"},
417                           {{pl, r0, r2}, true, pl, "pl r0 r2", "pl_r0_r2"},
418                           {{pl, r0, r3}, true, pl, "pl r0 r3", "pl_r0_r3"},
419                           {{pl, r0, r4}, true, pl, "pl r0 r4", "pl_r0_r4"},
420                           {{pl, r0, r5}, true, pl, "pl r0 r5", "pl_r0_r5"},
421                           {{pl, r0, r6}, true, pl, "pl r0 r6", "pl_r0_r6"},
422                           {{pl, r0, r7}, true, pl, "pl r0 r7", "pl_r0_r7"},
423                           {{pl, r1, r0}, true, pl, "pl r1 r0", "pl_r1_r0"},
424                           {{pl, r1, r1}, true, pl, "pl r1 r1", "pl_r1_r1"},
425                           {{pl, r1, r2}, true, pl, "pl r1 r2", "pl_r1_r2"},
426                           {{pl, r1, r3}, true, pl, "pl r1 r3", "pl_r1_r3"},
427                           {{pl, r1, r4}, true, pl, "pl r1 r4", "pl_r1_r4"},
428                           {{pl, r1, r5}, true, pl, "pl r1 r5", "pl_r1_r5"},
429                           {{pl, r1, r6}, true, pl, "pl r1 r6", "pl_r1_r6"},
430                           {{pl, r1, r7}, true, pl, "pl r1 r7", "pl_r1_r7"},
431                           {{pl, r2, r0}, true, pl, "pl r2 r0", "pl_r2_r0"},
432                           {{pl, r2, r1}, true, pl, "pl r2 r1", "pl_r2_r1"},
433                           {{pl, r2, r2}, true, pl, "pl r2 r2", "pl_r2_r2"},
434                           {{pl, r2, r3}, true, pl, "pl r2 r3", "pl_r2_r3"},
435                           {{pl, r2, r4}, true, pl, "pl r2 r4", "pl_r2_r4"},
436                           {{pl, r2, r5}, true, pl, "pl r2 r5", "pl_r2_r5"},
437                           {{pl, r2, r6}, true, pl, "pl r2 r6", "pl_r2_r6"},
438                           {{pl, r2, r7}, true, pl, "pl r2 r7", "pl_r2_r7"},
439                           {{pl, r3, r0}, true, pl, "pl r3 r0", "pl_r3_r0"},
440                           {{pl, r3, r1}, true, pl, "pl r3 r1", "pl_r3_r1"},
441                           {{pl, r3, r2}, true, pl, "pl r3 r2", "pl_r3_r2"},
442                           {{pl, r3, r3}, true, pl, "pl r3 r3", "pl_r3_r3"},
443                           {{pl, r3, r4}, true, pl, "pl r3 r4", "pl_r3_r4"},
444                           {{pl, r3, r5}, true, pl, "pl r3 r5", "pl_r3_r5"},
445                           {{pl, r3, r6}, true, pl, "pl r3 r6", "pl_r3_r6"},
446                           {{pl, r3, r7}, true, pl, "pl r3 r7", "pl_r3_r7"},
447                           {{pl, r4, r0}, true, pl, "pl r4 r0", "pl_r4_r0"},
448                           {{pl, r4, r1}, true, pl, "pl r4 r1", "pl_r4_r1"},
449                           {{pl, r4, r2}, true, pl, "pl r4 r2", "pl_r4_r2"},
450                           {{pl, r4, r3}, true, pl, "pl r4 r3", "pl_r4_r3"},
451                           {{pl, r4, r4}, true, pl, "pl r4 r4", "pl_r4_r4"},
452                           {{pl, r4, r5}, true, pl, "pl r4 r5", "pl_r4_r5"},
453                           {{pl, r4, r6}, true, pl, "pl r4 r6", "pl_r4_r6"},
454                           {{pl, r4, r7}, true, pl, "pl r4 r7", "pl_r4_r7"},
455                           {{pl, r5, r0}, true, pl, "pl r5 r0", "pl_r5_r0"},
456                           {{pl, r5, r1}, true, pl, "pl r5 r1", "pl_r5_r1"},
457                           {{pl, r5, r2}, true, pl, "pl r5 r2", "pl_r5_r2"},
458                           {{pl, r5, r3}, true, pl, "pl r5 r3", "pl_r5_r3"},
459                           {{pl, r5, r4}, true, pl, "pl r5 r4", "pl_r5_r4"},
460                           {{pl, r5, r5}, true, pl, "pl r5 r5", "pl_r5_r5"},
461                           {{pl, r5, r6}, true, pl, "pl r5 r6", "pl_r5_r6"},
462                           {{pl, r5, r7}, true, pl, "pl r5 r7", "pl_r5_r7"},
463                           {{pl, r6, r0}, true, pl, "pl r6 r0", "pl_r6_r0"},
464                           {{pl, r6, r1}, true, pl, "pl r6 r1", "pl_r6_r1"},
465                           {{pl, r6, r2}, true, pl, "pl r6 r2", "pl_r6_r2"},
466                           {{pl, r6, r3}, true, pl, "pl r6 r3", "pl_r6_r3"},
467                           {{pl, r6, r4}, true, pl, "pl r6 r4", "pl_r6_r4"},
468                           {{pl, r6, r5}, true, pl, "pl r6 r5", "pl_r6_r5"},
469                           {{pl, r6, r6}, true, pl, "pl r6 r6", "pl_r6_r6"},
470                           {{pl, r6, r7}, true, pl, "pl r6 r7", "pl_r6_r7"},
471                           {{pl, r7, r0}, true, pl, "pl r7 r0", "pl_r7_r0"},
472                           {{pl, r7, r1}, true, pl, "pl r7 r1", "pl_r7_r1"},
473                           {{pl, r7, r2}, true, pl, "pl r7 r2", "pl_r7_r2"},
474                           {{pl, r7, r3}, true, pl, "pl r7 r3", "pl_r7_r3"},
475                           {{pl, r7, r4}, true, pl, "pl r7 r4", "pl_r7_r4"},
476                           {{pl, r7, r5}, true, pl, "pl r7 r5", "pl_r7_r5"},
477                           {{pl, r7, r6}, true, pl, "pl r7 r6", "pl_r7_r6"},
478                           {{pl, r7, r7}, true, pl, "pl r7 r7", "pl_r7_r7"},
479                           {{vs, r0, r0}, true, vs, "vs r0 r0", "vs_r0_r0"},
480                           {{vs, r0, r1}, true, vs, "vs r0 r1", "vs_r0_r1"},
481                           {{vs, r0, r2}, true, vs, "vs r0 r2", "vs_r0_r2"},
482                           {{vs, r0, r3}, true, vs, "vs r0 r3", "vs_r0_r3"},
483                           {{vs, r0, r4}, true, vs, "vs r0 r4", "vs_r0_r4"},
484                           {{vs, r0, r5}, true, vs, "vs r0 r5", "vs_r0_r5"},
485                           {{vs, r0, r6}, true, vs, "vs r0 r6", "vs_r0_r6"},
486                           {{vs, r0, r7}, true, vs, "vs r0 r7", "vs_r0_r7"},
487                           {{vs, r1, r0}, true, vs, "vs r1 r0", "vs_r1_r0"},
488                           {{vs, r1, r1}, true, vs, "vs r1 r1", "vs_r1_r1"},
489                           {{vs, r1, r2}, true, vs, "vs r1 r2", "vs_r1_r2"},
490                           {{vs, r1, r3}, true, vs, "vs r1 r3", "vs_r1_r3"},
491                           {{vs, r1, r4}, true, vs, "vs r1 r4", "vs_r1_r4"},
492                           {{vs, r1, r5}, true, vs, "vs r1 r5", "vs_r1_r5"},
493                           {{vs, r1, r6}, true, vs, "vs r1 r6", "vs_r1_r6"},
494                           {{vs, r1, r7}, true, vs, "vs r1 r7", "vs_r1_r7"},
495                           {{vs, r2, r0}, true, vs, "vs r2 r0", "vs_r2_r0"},
496                           {{vs, r2, r1}, true, vs, "vs r2 r1", "vs_r2_r1"},
497                           {{vs, r2, r2}, true, vs, "vs r2 r2", "vs_r2_r2"},
498                           {{vs, r2, r3}, true, vs, "vs r2 r3", "vs_r2_r3"},
499                           {{vs, r2, r4}, true, vs, "vs r2 r4", "vs_r2_r4"},
500                           {{vs, r2, r5}, true, vs, "vs r2 r5", "vs_r2_r5"},
501                           {{vs, r2, r6}, true, vs, "vs r2 r6", "vs_r2_r6"},
502                           {{vs, r2, r7}, true, vs, "vs r2 r7", "vs_r2_r7"},
503                           {{vs, r3, r0}, true, vs, "vs r3 r0", "vs_r3_r0"},
504                           {{vs, r3, r1}, true, vs, "vs r3 r1", "vs_r3_r1"},
505                           {{vs, r3, r2}, true, vs, "vs r3 r2", "vs_r3_r2"},
506                           {{vs, r3, r3}, true, vs, "vs r3 r3", "vs_r3_r3"},
507                           {{vs, r3, r4}, true, vs, "vs r3 r4", "vs_r3_r4"},
508                           {{vs, r3, r5}, true, vs, "vs r3 r5", "vs_r3_r5"},
509                           {{vs, r3, r6}, true, vs, "vs r3 r6", "vs_r3_r6"},
510                           {{vs, r3, r7}, true, vs, "vs r3 r7", "vs_r3_r7"},
511                           {{vs, r4, r0}, true, vs, "vs r4 r0", "vs_r4_r0"},
512                           {{vs, r4, r1}, true, vs, "vs r4 r1", "vs_r4_r1"},
513                           {{vs, r4, r2}, true, vs, "vs r4 r2", "vs_r4_r2"},
514                           {{vs, r4, r3}, true, vs, "vs r4 r3", "vs_r4_r3"},
515                           {{vs, r4, r4}, true, vs, "vs r4 r4", "vs_r4_r4"},
516                           {{vs, r4, r5}, true, vs, "vs r4 r5", "vs_r4_r5"},
517                           {{vs, r4, r6}, true, vs, "vs r4 r6", "vs_r4_r6"},
518                           {{vs, r4, r7}, true, vs, "vs r4 r7", "vs_r4_r7"},
519                           {{vs, r5, r0}, true, vs, "vs r5 r0", "vs_r5_r0"},
520                           {{vs, r5, r1}, true, vs, "vs r5 r1", "vs_r5_r1"},
521                           {{vs, r5, r2}, true, vs, "vs r5 r2", "vs_r5_r2"},
522                           {{vs, r5, r3}, true, vs, "vs r5 r3", "vs_r5_r3"},
523                           {{vs, r5, r4}, true, vs, "vs r5 r4", "vs_r5_r4"},
524                           {{vs, r5, r5}, true, vs, "vs r5 r5", "vs_r5_r5"},
525                           {{vs, r5, r6}, true, vs, "vs r5 r6", "vs_r5_r6"},
526                           {{vs, r5, r7}, true, vs, "vs r5 r7", "vs_r5_r7"},
527                           {{vs, r6, r0}, true, vs, "vs r6 r0", "vs_r6_r0"},
528                           {{vs, r6, r1}, true, vs, "vs r6 r1", "vs_r6_r1"},
529                           {{vs, r6, r2}, true, vs, "vs r6 r2", "vs_r6_r2"},
530                           {{vs, r6, r3}, true, vs, "vs r6 r3", "vs_r6_r3"},
531                           {{vs, r6, r4}, true, vs, "vs r6 r4", "vs_r6_r4"},
532                           {{vs, r6, r5}, true, vs, "vs r6 r5", "vs_r6_r5"},
533                           {{vs, r6, r6}, true, vs, "vs r6 r6", "vs_r6_r6"},
534                           {{vs, r6, r7}, true, vs, "vs r6 r7", "vs_r6_r7"},
535                           {{vs, r7, r0}, true, vs, "vs r7 r0", "vs_r7_r0"},
536                           {{vs, r7, r1}, true, vs, "vs r7 r1", "vs_r7_r1"},
537                           {{vs, r7, r2}, true, vs, "vs r7 r2", "vs_r7_r2"},
538                           {{vs, r7, r3}, true, vs, "vs r7 r3", "vs_r7_r3"},
539                           {{vs, r7, r4}, true, vs, "vs r7 r4", "vs_r7_r4"},
540                           {{vs, r7, r5}, true, vs, "vs r7 r5", "vs_r7_r5"},
541                           {{vs, r7, r6}, true, vs, "vs r7 r6", "vs_r7_r6"},
542                           {{vs, r7, r7}, true, vs, "vs r7 r7", "vs_r7_r7"},
543                           {{vc, r0, r0}, true, vc, "vc r0 r0", "vc_r0_r0"},
544                           {{vc, r0, r1}, true, vc, "vc r0 r1", "vc_r0_r1"},
545                           {{vc, r0, r2}, true, vc, "vc r0 r2", "vc_r0_r2"},
546                           {{vc, r0, r3}, true, vc, "vc r0 r3", "vc_r0_r3"},
547                           {{vc, r0, r4}, true, vc, "vc r0 r4", "vc_r0_r4"},
548                           {{vc, r0, r5}, true, vc, "vc r0 r5", "vc_r0_r5"},
549                           {{vc, r0, r6}, true, vc, "vc r0 r6", "vc_r0_r6"},
550                           {{vc, r0, r7}, true, vc, "vc r0 r7", "vc_r0_r7"},
551                           {{vc, r1, r0}, true, vc, "vc r1 r0", "vc_r1_r0"},
552                           {{vc, r1, r1}, true, vc, "vc r1 r1", "vc_r1_r1"},
553                           {{vc, r1, r2}, true, vc, "vc r1 r2", "vc_r1_r2"},
554                           {{vc, r1, r3}, true, vc, "vc r1 r3", "vc_r1_r3"},
555                           {{vc, r1, r4}, true, vc, "vc r1 r4", "vc_r1_r4"},
556                           {{vc, r1, r5}, true, vc, "vc r1 r5", "vc_r1_r5"},
557                           {{vc, r1, r6}, true, vc, "vc r1 r6", "vc_r1_r6"},
558                           {{vc, r1, r7}, true, vc, "vc r1 r7", "vc_r1_r7"},
559                           {{vc, r2, r0}, true, vc, "vc r2 r0", "vc_r2_r0"},
560                           {{vc, r2, r1}, true, vc, "vc r2 r1", "vc_r2_r1"},
561                           {{vc, r2, r2}, true, vc, "vc r2 r2", "vc_r2_r2"},
562                           {{vc, r2, r3}, true, vc, "vc r2 r3", "vc_r2_r3"},
563                           {{vc, r2, r4}, true, vc, "vc r2 r4", "vc_r2_r4"},
564                           {{vc, r2, r5}, true, vc, "vc r2 r5", "vc_r2_r5"},
565                           {{vc, r2, r6}, true, vc, "vc r2 r6", "vc_r2_r6"},
566                           {{vc, r2, r7}, true, vc, "vc r2 r7", "vc_r2_r7"},
567                           {{vc, r3, r0}, true, vc, "vc r3 r0", "vc_r3_r0"},
568                           {{vc, r3, r1}, true, vc, "vc r3 r1", "vc_r3_r1"},
569                           {{vc, r3, r2}, true, vc, "vc r3 r2", "vc_r3_r2"},
570                           {{vc, r3, r3}, true, vc, "vc r3 r3", "vc_r3_r3"},
571                           {{vc, r3, r4}, true, vc, "vc r3 r4", "vc_r3_r4"},
572                           {{vc, r3, r5}, true, vc, "vc r3 r5", "vc_r3_r5"},
573                           {{vc, r3, r6}, true, vc, "vc r3 r6", "vc_r3_r6"},
574                           {{vc, r3, r7}, true, vc, "vc r3 r7", "vc_r3_r7"},
575                           {{vc, r4, r0}, true, vc, "vc r4 r0", "vc_r4_r0"},
576                           {{vc, r4, r1}, true, vc, "vc r4 r1", "vc_r4_r1"},
577                           {{vc, r4, r2}, true, vc, "vc r4 r2", "vc_r4_r2"},
578                           {{vc, r4, r3}, true, vc, "vc r4 r3", "vc_r4_r3"},
579                           {{vc, r4, r4}, true, vc, "vc r4 r4", "vc_r4_r4"},
580                           {{vc, r4, r5}, true, vc, "vc r4 r5", "vc_r4_r5"},
581                           {{vc, r4, r6}, true, vc, "vc r4 r6", "vc_r4_r6"},
582                           {{vc, r4, r7}, true, vc, "vc r4 r7", "vc_r4_r7"},
583                           {{vc, r5, r0}, true, vc, "vc r5 r0", "vc_r5_r0"},
584                           {{vc, r5, r1}, true, vc, "vc r5 r1", "vc_r5_r1"},
585                           {{vc, r5, r2}, true, vc, "vc r5 r2", "vc_r5_r2"},
586                           {{vc, r5, r3}, true, vc, "vc r5 r3", "vc_r5_r3"},
587                           {{vc, r5, r4}, true, vc, "vc r5 r4", "vc_r5_r4"},
588                           {{vc, r5, r5}, true, vc, "vc r5 r5", "vc_r5_r5"},
589                           {{vc, r5, r6}, true, vc, "vc r5 r6", "vc_r5_r6"},
590                           {{vc, r5, r7}, true, vc, "vc r5 r7", "vc_r5_r7"},
591                           {{vc, r6, r0}, true, vc, "vc r6 r0", "vc_r6_r0"},
592                           {{vc, r6, r1}, true, vc, "vc r6 r1", "vc_r6_r1"},
593                           {{vc, r6, r2}, true, vc, "vc r6 r2", "vc_r6_r2"},
594                           {{vc, r6, r3}, true, vc, "vc r6 r3", "vc_r6_r3"},
595                           {{vc, r6, r4}, true, vc, "vc r6 r4", "vc_r6_r4"},
596                           {{vc, r6, r5}, true, vc, "vc r6 r5", "vc_r6_r5"},
597                           {{vc, r6, r6}, true, vc, "vc r6 r6", "vc_r6_r6"},
598                           {{vc, r6, r7}, true, vc, "vc r6 r7", "vc_r6_r7"},
599                           {{vc, r7, r0}, true, vc, "vc r7 r0", "vc_r7_r0"},
600                           {{vc, r7, r1}, true, vc, "vc r7 r1", "vc_r7_r1"},
601                           {{vc, r7, r2}, true, vc, "vc r7 r2", "vc_r7_r2"},
602                           {{vc, r7, r3}, true, vc, "vc r7 r3", "vc_r7_r3"},
603                           {{vc, r7, r4}, true, vc, "vc r7 r4", "vc_r7_r4"},
604                           {{vc, r7, r5}, true, vc, "vc r7 r5", "vc_r7_r5"},
605                           {{vc, r7, r6}, true, vc, "vc r7 r6", "vc_r7_r6"},
606                           {{vc, r7, r7}, true, vc, "vc r7 r7", "vc_r7_r7"},
607                           {{hi, r0, r0}, true, hi, "hi r0 r0", "hi_r0_r0"},
608                           {{hi, r0, r1}, true, hi, "hi r0 r1", "hi_r0_r1"},
609                           {{hi, r0, r2}, true, hi, "hi r0 r2", "hi_r0_r2"},
610                           {{hi, r0, r3}, true, hi, "hi r0 r3", "hi_r0_r3"},
611                           {{hi, r0, r4}, true, hi, "hi r0 r4", "hi_r0_r4"},
612                           {{hi, r0, r5}, true, hi, "hi r0 r5", "hi_r0_r5"},
613                           {{hi, r0, r6}, true, hi, "hi r0 r6", "hi_r0_r6"},
614                           {{hi, r0, r7}, true, hi, "hi r0 r7", "hi_r0_r7"},
615                           {{hi, r1, r0}, true, hi, "hi r1 r0", "hi_r1_r0"},
616                           {{hi, r1, r1}, true, hi, "hi r1 r1", "hi_r1_r1"},
617                           {{hi, r1, r2}, true, hi, "hi r1 r2", "hi_r1_r2"},
618                           {{hi, r1, r3}, true, hi, "hi r1 r3", "hi_r1_r3"},
619                           {{hi, r1, r4}, true, hi, "hi r1 r4", "hi_r1_r4"},
620                           {{hi, r1, r5}, true, hi, "hi r1 r5", "hi_r1_r5"},
621                           {{hi, r1, r6}, true, hi, "hi r1 r6", "hi_r1_r6"},
622                           {{hi, r1, r7}, true, hi, "hi r1 r7", "hi_r1_r7"},
623                           {{hi, r2, r0}, true, hi, "hi r2 r0", "hi_r2_r0"},
624                           {{hi, r2, r1}, true, hi, "hi r2 r1", "hi_r2_r1"},
625                           {{hi, r2, r2}, true, hi, "hi r2 r2", "hi_r2_r2"},
626                           {{hi, r2, r3}, true, hi, "hi r2 r3", "hi_r2_r3"},
627                           {{hi, r2, r4}, true, hi, "hi r2 r4", "hi_r2_r4"},
628                           {{hi, r2, r5}, true, hi, "hi r2 r5", "hi_r2_r5"},
629                           {{hi, r2, r6}, true, hi, "hi r2 r6", "hi_r2_r6"},
630                           {{hi, r2, r7}, true, hi, "hi r2 r7", "hi_r2_r7"},
631                           {{hi, r3, r0}, true, hi, "hi r3 r0", "hi_r3_r0"},
632                           {{hi, r3, r1}, true, hi, "hi r3 r1", "hi_r3_r1"},
633                           {{hi, r3, r2}, true, hi, "hi r3 r2", "hi_r3_r2"},
634                           {{hi, r3, r3}, true, hi, "hi r3 r3", "hi_r3_r3"},
635                           {{hi, r3, r4}, true, hi, "hi r3 r4", "hi_r3_r4"},
636                           {{hi, r3, r5}, true, hi, "hi r3 r5", "hi_r3_r5"},
637                           {{hi, r3, r6}, true, hi, "hi r3 r6", "hi_r3_r6"},
638                           {{hi, r3, r7}, true, hi, "hi r3 r7", "hi_r3_r7"},
639                           {{hi, r4, r0}, true, hi, "hi r4 r0", "hi_r4_r0"},
640                           {{hi, r4, r1}, true, hi, "hi r4 r1", "hi_r4_r1"},
641                           {{hi, r4, r2}, true, hi, "hi r4 r2", "hi_r4_r2"},
642                           {{hi, r4, r3}, true, hi, "hi r4 r3", "hi_r4_r3"},
643                           {{hi, r4, r4}, true, hi, "hi r4 r4", "hi_r4_r4"},
644                           {{hi, r4, r5}, true, hi, "hi r4 r5", "hi_r4_r5"},
645                           {{hi, r4, r6}, true, hi, "hi r4 r6", "hi_r4_r6"},
646                           {{hi, r4, r7}, true, hi, "hi r4 r7", "hi_r4_r7"},
647                           {{hi, r5, r0}, true, hi, "hi r5 r0", "hi_r5_r0"},
648                           {{hi, r5, r1}, true, hi, "hi r5 r1", "hi_r5_r1"},
649                           {{hi, r5, r2}, true, hi, "hi r5 r2", "hi_r5_r2"},
650                           {{hi, r5, r3}, true, hi, "hi r5 r3", "hi_r5_r3"},
651                           {{hi, r5, r4}, true, hi, "hi r5 r4", "hi_r5_r4"},
652                           {{hi, r5, r5}, true, hi, "hi r5 r5", "hi_r5_r5"},
653                           {{hi, r5, r6}, true, hi, "hi r5 r6", "hi_r5_r6"},
654                           {{hi, r5, r7}, true, hi, "hi r5 r7", "hi_r5_r7"},
655                           {{hi, r6, r0}, true, hi, "hi r6 r0", "hi_r6_r0"},
656                           {{hi, r6, r1}, true, hi, "hi r6 r1", "hi_r6_r1"},
657                           {{hi, r6, r2}, true, hi, "hi r6 r2", "hi_r6_r2"},
658                           {{hi, r6, r3}, true, hi, "hi r6 r3", "hi_r6_r3"},
659                           {{hi, r6, r4}, true, hi, "hi r6 r4", "hi_r6_r4"},
660                           {{hi, r6, r5}, true, hi, "hi r6 r5", "hi_r6_r5"},
661                           {{hi, r6, r6}, true, hi, "hi r6 r6", "hi_r6_r6"},
662                           {{hi, r6, r7}, true, hi, "hi r6 r7", "hi_r6_r7"},
663                           {{hi, r7, r0}, true, hi, "hi r7 r0", "hi_r7_r0"},
664                           {{hi, r7, r1}, true, hi, "hi r7 r1", "hi_r7_r1"},
665                           {{hi, r7, r2}, true, hi, "hi r7 r2", "hi_r7_r2"},
666                           {{hi, r7, r3}, true, hi, "hi r7 r3", "hi_r7_r3"},
667                           {{hi, r7, r4}, true, hi, "hi r7 r4", "hi_r7_r4"},
668                           {{hi, r7, r5}, true, hi, "hi r7 r5", "hi_r7_r5"},
669                           {{hi, r7, r6}, true, hi, "hi r7 r6", "hi_r7_r6"},
670                           {{hi, r7, r7}, true, hi, "hi r7 r7", "hi_r7_r7"},
671                           {{ls, r0, r0}, true, ls, "ls r0 r0", "ls_r0_r0"},
672                           {{ls, r0, r1}, true, ls, "ls r0 r1", "ls_r0_r1"},
673                           {{ls, r0, r2}, true, ls, "ls r0 r2", "ls_r0_r2"},
674                           {{ls, r0, r3}, true, ls, "ls r0 r3", "ls_r0_r3"},
675                           {{ls, r0, r4}, true, ls, "ls r0 r4", "ls_r0_r4"},
676                           {{ls, r0, r5}, true, ls, "ls r0 r5", "ls_r0_r5"},
677                           {{ls, r0, r6}, true, ls, "ls r0 r6", "ls_r0_r6"},
678                           {{ls, r0, r7}, true, ls, "ls r0 r7", "ls_r0_r7"},
679                           {{ls, r1, r0}, true, ls, "ls r1 r0", "ls_r1_r0"},
680                           {{ls, r1, r1}, true, ls, "ls r1 r1", "ls_r1_r1"},
681                           {{ls, r1, r2}, true, ls, "ls r1 r2", "ls_r1_r2"},
682                           {{ls, r1, r3}, true, ls, "ls r1 r3", "ls_r1_r3"},
683                           {{ls, r1, r4}, true, ls, "ls r1 r4", "ls_r1_r4"},
684                           {{ls, r1, r5}, true, ls, "ls r1 r5", "ls_r1_r5"},
685                           {{ls, r1, r6}, true, ls, "ls r1 r6", "ls_r1_r6"},
686                           {{ls, r1, r7}, true, ls, "ls r1 r7", "ls_r1_r7"},
687                           {{ls, r2, r0}, true, ls, "ls r2 r0", "ls_r2_r0"},
688                           {{ls, r2, r1}, true, ls, "ls r2 r1", "ls_r2_r1"},
689                           {{ls, r2, r2}, true, ls, "ls r2 r2", "ls_r2_r2"},
690                           {{ls, r2, r3}, true, ls, "ls r2 r3", "ls_r2_r3"},
691                           {{ls, r2, r4}, true, ls, "ls r2 r4", "ls_r2_r4"},
692                           {{ls, r2, r5}, true, ls, "ls r2 r5", "ls_r2_r5"},
693                           {{ls, r2, r6}, true, ls, "ls r2 r6", "ls_r2_r6"},
694                           {{ls, r2, r7}, true, ls, "ls r2 r7", "ls_r2_r7"},
695                           {{ls, r3, r0}, true, ls, "ls r3 r0", "ls_r3_r0"},
696                           {{ls, r3, r1}, true, ls, "ls r3 r1", "ls_r3_r1"},
697                           {{ls, r3, r2}, true, ls, "ls r3 r2", "ls_r3_r2"},
698                           {{ls, r3, r3}, true, ls, "ls r3 r3", "ls_r3_r3"},
699                           {{ls, r3, r4}, true, ls, "ls r3 r4", "ls_r3_r4"},
700                           {{ls, r3, r5}, true, ls, "ls r3 r5", "ls_r3_r5"},
701                           {{ls, r3, r6}, true, ls, "ls r3 r6", "ls_r3_r6"},
702                           {{ls, r3, r7}, true, ls, "ls r3 r7", "ls_r3_r7"},
703                           {{ls, r4, r0}, true, ls, "ls r4 r0", "ls_r4_r0"},
704                           {{ls, r4, r1}, true, ls, "ls r4 r1", "ls_r4_r1"},
705                           {{ls, r4, r2}, true, ls, "ls r4 r2", "ls_r4_r2"},
706                           {{ls, r4, r3}, true, ls, "ls r4 r3", "ls_r4_r3"},
707                           {{ls, r4, r4}, true, ls, "ls r4 r4", "ls_r4_r4"},
708                           {{ls, r4, r5}, true, ls, "ls r4 r5", "ls_r4_r5"},
709                           {{ls, r4, r6}, true, ls, "ls r4 r6", "ls_r4_r6"},
710                           {{ls, r4, r7}, true, ls, "ls r4 r7", "ls_r4_r7"},
711                           {{ls, r5, r0}, true, ls, "ls r5 r0", "ls_r5_r0"},
712                           {{ls, r5, r1}, true, ls, "ls r5 r1", "ls_r5_r1"},
713                           {{ls, r5, r2}, true, ls, "ls r5 r2", "ls_r5_r2"},
714                           {{ls, r5, r3}, true, ls, "ls r5 r3", "ls_r5_r3"},
715                           {{ls, r5, r4}, true, ls, "ls r5 r4", "ls_r5_r4"},
716                           {{ls, r5, r5}, true, ls, "ls r5 r5", "ls_r5_r5"},
717                           {{ls, r5, r6}, true, ls, "ls r5 r6", "ls_r5_r6"},
718                           {{ls, r5, r7}, true, ls, "ls r5 r7", "ls_r5_r7"},
719                           {{ls, r6, r0}, true, ls, "ls r6 r0", "ls_r6_r0"},
720                           {{ls, r6, r1}, true, ls, "ls r6 r1", "ls_r6_r1"},
721                           {{ls, r6, r2}, true, ls, "ls r6 r2", "ls_r6_r2"},
722                           {{ls, r6, r3}, true, ls, "ls r6 r3", "ls_r6_r3"},
723                           {{ls, r6, r4}, true, ls, "ls r6 r4", "ls_r6_r4"},
724                           {{ls, r6, r5}, true, ls, "ls r6 r5", "ls_r6_r5"},
725                           {{ls, r6, r6}, true, ls, "ls r6 r6", "ls_r6_r6"},
726                           {{ls, r6, r7}, true, ls, "ls r6 r7", "ls_r6_r7"},
727                           {{ls, r7, r0}, true, ls, "ls r7 r0", "ls_r7_r0"},
728                           {{ls, r7, r1}, true, ls, "ls r7 r1", "ls_r7_r1"},
729                           {{ls, r7, r2}, true, ls, "ls r7 r2", "ls_r7_r2"},
730                           {{ls, r7, r3}, true, ls, "ls r7 r3", "ls_r7_r3"},
731                           {{ls, r7, r4}, true, ls, "ls r7 r4", "ls_r7_r4"},
732                           {{ls, r7, r5}, true, ls, "ls r7 r5", "ls_r7_r5"},
733                           {{ls, r7, r6}, true, ls, "ls r7 r6", "ls_r7_r6"},
734                           {{ls, r7, r7}, true, ls, "ls r7 r7", "ls_r7_r7"},
735                           {{ge, r0, r0}, true, ge, "ge r0 r0", "ge_r0_r0"},
736                           {{ge, r0, r1}, true, ge, "ge r0 r1", "ge_r0_r1"},
737                           {{ge, r0, r2}, true, ge, "ge r0 r2", "ge_r0_r2"},
738                           {{ge, r0, r3}, true, ge, "ge r0 r3", "ge_r0_r3"},
739                           {{ge, r0, r4}, true, ge, "ge r0 r4", "ge_r0_r4"},
740                           {{ge, r0, r5}, true, ge, "ge r0 r5", "ge_r0_r5"},
741                           {{ge, r0, r6}, true, ge, "ge r0 r6", "ge_r0_r6"},
742                           {{ge, r0, r7}, true, ge, "ge r0 r7", "ge_r0_r7"},
743                           {{ge, r1, r0}, true, ge, "ge r1 r0", "ge_r1_r0"},
744                           {{ge, r1, r1}, true, ge, "ge r1 r1", "ge_r1_r1"},
745                           {{ge, r1, r2}, true, ge, "ge r1 r2", "ge_r1_r2"},
746                           {{ge, r1, r3}, true, ge, "ge r1 r3", "ge_r1_r3"},
747                           {{ge, r1, r4}, true, ge, "ge r1 r4", "ge_r1_r4"},
748                           {{ge, r1, r5}, true, ge, "ge r1 r5", "ge_r1_r5"},
749                           {{ge, r1, r6}, true, ge, "ge r1 r6", "ge_r1_r6"},
750                           {{ge, r1, r7}, true, ge, "ge r1 r7", "ge_r1_r7"},
751                           {{ge, r2, r0}, true, ge, "ge r2 r0", "ge_r2_r0"},
752                           {{ge, r2, r1}, true, ge, "ge r2 r1", "ge_r2_r1"},
753                           {{ge, r2, r2}, true, ge, "ge r2 r2", "ge_r2_r2"},
754                           {{ge, r2, r3}, true, ge, "ge r2 r3", "ge_r2_r3"},
755                           {{ge, r2, r4}, true, ge, "ge r2 r4", "ge_r2_r4"},
756                           {{ge, r2, r5}, true, ge, "ge r2 r5", "ge_r2_r5"},
757                           {{ge, r2, r6}, true, ge, "ge r2 r6", "ge_r2_r6"},
758                           {{ge, r2, r7}, true, ge, "ge r2 r7", "ge_r2_r7"},
759                           {{ge, r3, r0}, true, ge, "ge r3 r0", "ge_r3_r0"},
760                           {{ge, r3, r1}, true, ge, "ge r3 r1", "ge_r3_r1"},
761                           {{ge, r3, r2}, true, ge, "ge r3 r2", "ge_r3_r2"},
762                           {{ge, r3, r3}, true, ge, "ge r3 r3", "ge_r3_r3"},
763                           {{ge, r3, r4}, true, ge, "ge r3 r4", "ge_r3_r4"},
764                           {{ge, r3, r5}, true, ge, "ge r3 r5", "ge_r3_r5"},
765                           {{ge, r3, r6}, true, ge, "ge r3 r6", "ge_r3_r6"},
766                           {{ge, r3, r7}, true, ge, "ge r3 r7", "ge_r3_r7"},
767                           {{ge, r4, r0}, true, ge, "ge r4 r0", "ge_r4_r0"},
768                           {{ge, r4, r1}, true, ge, "ge r4 r1", "ge_r4_r1"},
769                           {{ge, r4, r2}, true, ge, "ge r4 r2", "ge_r4_r2"},
770                           {{ge, r4, r3}, true, ge, "ge r4 r3", "ge_r4_r3"},
771                           {{ge, r4, r4}, true, ge, "ge r4 r4", "ge_r4_r4"},
772                           {{ge, r4, r5}, true, ge, "ge r4 r5", "ge_r4_r5"},
773                           {{ge, r4, r6}, true, ge, "ge r4 r6", "ge_r4_r6"},
774                           {{ge, r4, r7}, true, ge, "ge r4 r7", "ge_r4_r7"},
775                           {{ge, r5, r0}, true, ge, "ge r5 r0", "ge_r5_r0"},
776                           {{ge, r5, r1}, true, ge, "ge r5 r1", "ge_r5_r1"},
777                           {{ge, r5, r2}, true, ge, "ge r5 r2", "ge_r5_r2"},
778                           {{ge, r5, r3}, true, ge, "ge r5 r3", "ge_r5_r3"},
779                           {{ge, r5, r4}, true, ge, "ge r5 r4", "ge_r5_r4"},
780                           {{ge, r5, r5}, true, ge, "ge r5 r5", "ge_r5_r5"},
781                           {{ge, r5, r6}, true, ge, "ge r5 r6", "ge_r5_r6"},
782                           {{ge, r5, r7}, true, ge, "ge r5 r7", "ge_r5_r7"},
783                           {{ge, r6, r0}, true, ge, "ge r6 r0", "ge_r6_r0"},
784                           {{ge, r6, r1}, true, ge, "ge r6 r1", "ge_r6_r1"},
785                           {{ge, r6, r2}, true, ge, "ge r6 r2", "ge_r6_r2"},
786                           {{ge, r6, r3}, true, ge, "ge r6 r3", "ge_r6_r3"},
787                           {{ge, r6, r4}, true, ge, "ge r6 r4", "ge_r6_r4"},
788                           {{ge, r6, r5}, true, ge, "ge r6 r5", "ge_r6_r5"},
789                           {{ge, r6, r6}, true, ge, "ge r6 r6", "ge_r6_r6"},
790                           {{ge, r6, r7}, true, ge, "ge r6 r7", "ge_r6_r7"},
791                           {{ge, r7, r0}, true, ge, "ge r7 r0", "ge_r7_r0"},
792                           {{ge, r7, r1}, true, ge, "ge r7 r1", "ge_r7_r1"},
793                           {{ge, r7, r2}, true, ge, "ge r7 r2", "ge_r7_r2"},
794                           {{ge, r7, r3}, true, ge, "ge r7 r3", "ge_r7_r3"},
795                           {{ge, r7, r4}, true, ge, "ge r7 r4", "ge_r7_r4"},
796                           {{ge, r7, r5}, true, ge, "ge r7 r5", "ge_r7_r5"},
797                           {{ge, r7, r6}, true, ge, "ge r7 r6", "ge_r7_r6"},
798                           {{ge, r7, r7}, true, ge, "ge r7 r7", "ge_r7_r7"},
799                           {{lt, r0, r0}, true, lt, "lt r0 r0", "lt_r0_r0"},
800                           {{lt, r0, r1}, true, lt, "lt r0 r1", "lt_r0_r1"},
801                           {{lt, r0, r2}, true, lt, "lt r0 r2", "lt_r0_r2"},
802                           {{lt, r0, r3}, true, lt, "lt r0 r3", "lt_r0_r3"},
803                           {{lt, r0, r4}, true, lt, "lt r0 r4", "lt_r0_r4"},
804                           {{lt, r0, r5}, true, lt, "lt r0 r5", "lt_r0_r5"},
805                           {{lt, r0, r6}, true, lt, "lt r0 r6", "lt_r0_r6"},
806                           {{lt, r0, r7}, true, lt, "lt r0 r7", "lt_r0_r7"},
807                           {{lt, r1, r0}, true, lt, "lt r1 r0", "lt_r1_r0"},
808                           {{lt, r1, r1}, true, lt, "lt r1 r1", "lt_r1_r1"},
809                           {{lt, r1, r2}, true, lt, "lt r1 r2", "lt_r1_r2"},
810                           {{lt, r1, r3}, true, lt, "lt r1 r3", "lt_r1_r3"},
811                           {{lt, r1, r4}, true, lt, "lt r1 r4", "lt_r1_r4"},
812                           {{lt, r1, r5}, true, lt, "lt r1 r5", "lt_r1_r5"},
813                           {{lt, r1, r6}, true, lt, "lt r1 r6", "lt_r1_r6"},
814                           {{lt, r1, r7}, true, lt, "lt r1 r7", "lt_r1_r7"},
815                           {{lt, r2, r0}, true, lt, "lt r2 r0", "lt_r2_r0"},
816                           {{lt, r2, r1}, true, lt, "lt r2 r1", "lt_r2_r1"},
817                           {{lt, r2, r2}, true, lt, "lt r2 r2", "lt_r2_r2"},
818                           {{lt, r2, r3}, true, lt, "lt r2 r3", "lt_r2_r3"},
819                           {{lt, r2, r4}, true, lt, "lt r2 r4", "lt_r2_r4"},
820                           {{lt, r2, r5}, true, lt, "lt r2 r5", "lt_r2_r5"},
821                           {{lt, r2, r6}, true, lt, "lt r2 r6", "lt_r2_r6"},
822                           {{lt, r2, r7}, true, lt, "lt r2 r7", "lt_r2_r7"},
823                           {{lt, r3, r0}, true, lt, "lt r3 r0", "lt_r3_r0"},
824                           {{lt, r3, r1}, true, lt, "lt r3 r1", "lt_r3_r1"},
825                           {{lt, r3, r2}, true, lt, "lt r3 r2", "lt_r3_r2"},
826                           {{lt, r3, r3}, true, lt, "lt r3 r3", "lt_r3_r3"},
827                           {{lt, r3, r4}, true, lt, "lt r3 r4", "lt_r3_r4"},
828                           {{lt, r3, r5}, true, lt, "lt r3 r5", "lt_r3_r5"},
829                           {{lt, r3, r6}, true, lt, "lt r3 r6", "lt_r3_r6"},
830                           {{lt, r3, r7}, true, lt, "lt r3 r7", "lt_r3_r7"},
831                           {{lt, r4, r0}, true, lt, "lt r4 r0", "lt_r4_r0"},
832                           {{lt, r4, r1}, true, lt, "lt r4 r1", "lt_r4_r1"},
833                           {{lt, r4, r2}, true, lt, "lt r4 r2", "lt_r4_r2"},
834                           {{lt, r4, r3}, true, lt, "lt r4 r3", "lt_r4_r3"},
835                           {{lt, r4, r4}, true, lt, "lt r4 r4", "lt_r4_r4"},
836                           {{lt, r4, r5}, true, lt, "lt r4 r5", "lt_r4_r5"},
837                           {{lt, r4, r6}, true, lt, "lt r4 r6", "lt_r4_r6"},
838                           {{lt, r4, r7}, true, lt, "lt r4 r7", "lt_r4_r7"},
839                           {{lt, r5, r0}, true, lt, "lt r5 r0", "lt_r5_r0"},
840                           {{lt, r5, r1}, true, lt, "lt r5 r1", "lt_r5_r1"},
841                           {{lt, r5, r2}, true, lt, "lt r5 r2", "lt_r5_r2"},
842                           {{lt, r5, r3}, true, lt, "lt r5 r3", "lt_r5_r3"},
843                           {{lt, r5, r4}, true, lt, "lt r5 r4", "lt_r5_r4"},
844                           {{lt, r5, r5}, true, lt, "lt r5 r5", "lt_r5_r5"},
845                           {{lt, r5, r6}, true, lt, "lt r5 r6", "lt_r5_r6"},
846                           {{lt, r5, r7}, true, lt, "lt r5 r7", "lt_r5_r7"},
847                           {{lt, r6, r0}, true, lt, "lt r6 r0", "lt_r6_r0"},
848                           {{lt, r6, r1}, true, lt, "lt r6 r1", "lt_r6_r1"},
849                           {{lt, r6, r2}, true, lt, "lt r6 r2", "lt_r6_r2"},
850                           {{lt, r6, r3}, true, lt, "lt r6 r3", "lt_r6_r3"},
851                           {{lt, r6, r4}, true, lt, "lt r6 r4", "lt_r6_r4"},
852                           {{lt, r6, r5}, true, lt, "lt r6 r5", "lt_r6_r5"},
853                           {{lt, r6, r6}, true, lt, "lt r6 r6", "lt_r6_r6"},
854                           {{lt, r6, r7}, true, lt, "lt r6 r7", "lt_r6_r7"},
855                           {{lt, r7, r0}, true, lt, "lt r7 r0", "lt_r7_r0"},
856                           {{lt, r7, r1}, true, lt, "lt r7 r1", "lt_r7_r1"},
857                           {{lt, r7, r2}, true, lt, "lt r7 r2", "lt_r7_r2"},
858                           {{lt, r7, r3}, true, lt, "lt r7 r3", "lt_r7_r3"},
859                           {{lt, r7, r4}, true, lt, "lt r7 r4", "lt_r7_r4"},
860                           {{lt, r7, r5}, true, lt, "lt r7 r5", "lt_r7_r5"},
861                           {{lt, r7, r6}, true, lt, "lt r7 r6", "lt_r7_r6"},
862                           {{lt, r7, r7}, true, lt, "lt r7 r7", "lt_r7_r7"},
863                           {{gt, r0, r0}, true, gt, "gt r0 r0", "gt_r0_r0"},
864                           {{gt, r0, r1}, true, gt, "gt r0 r1", "gt_r0_r1"},
865                           {{gt, r0, r2}, true, gt, "gt r0 r2", "gt_r0_r2"},
866                           {{gt, r0, r3}, true, gt, "gt r0 r3", "gt_r0_r3"},
867                           {{gt, r0, r4}, true, gt, "gt r0 r4", "gt_r0_r4"},
868                           {{gt, r0, r5}, true, gt, "gt r0 r5", "gt_r0_r5"},
869                           {{gt, r0, r6}, true, gt, "gt r0 r6", "gt_r0_r6"},
870                           {{gt, r0, r7}, true, gt, "gt r0 r7", "gt_r0_r7"},
871                           {{gt, r1, r0}, true, gt, "gt r1 r0", "gt_r1_r0"},
872                           {{gt, r1, r1}, true, gt, "gt r1 r1", "gt_r1_r1"},
873                           {{gt, r1, r2}, true, gt, "gt r1 r2", "gt_r1_r2"},
874                           {{gt, r1, r3}, true, gt, "gt r1 r3", "gt_r1_r3"},
875                           {{gt, r1, r4}, true, gt, "gt r1 r4", "gt_r1_r4"},
876                           {{gt, r1, r5}, true, gt, "gt r1 r5", "gt_r1_r5"},
877                           {{gt, r1, r6}, true, gt, "gt r1 r6", "gt_r1_r6"},
878                           {{gt, r1, r7}, true, gt, "gt r1 r7", "gt_r1_r7"},
879                           {{gt, r2, r0}, true, gt, "gt r2 r0", "gt_r2_r0"},
880                           {{gt, r2, r1}, true, gt, "gt r2 r1", "gt_r2_r1"},
881                           {{gt, r2, r2}, true, gt, "gt r2 r2", "gt_r2_r2"},
882                           {{gt, r2, r3}, true, gt, "gt r2 r3", "gt_r2_r3"},
883                           {{gt, r2, r4}, true, gt, "gt r2 r4", "gt_r2_r4"},
884                           {{gt, r2, r5}, true, gt, "gt r2 r5", "gt_r2_r5"},
885                           {{gt, r2, r6}, true, gt, "gt r2 r6", "gt_r2_r6"},
886                           {{gt, r2, r7}, true, gt, "gt r2 r7", "gt_r2_r7"},
887                           {{gt, r3, r0}, true, gt, "gt r3 r0", "gt_r3_r0"},
888                           {{gt, r3, r1}, true, gt, "gt r3 r1", "gt_r3_r1"},
889                           {{gt, r3, r2}, true, gt, "gt r3 r2", "gt_r3_r2"},
890                           {{gt, r3, r3}, true, gt, "gt r3 r3", "gt_r3_r3"},
891                           {{gt, r3, r4}, true, gt, "gt r3 r4", "gt_r3_r4"},
892                           {{gt, r3, r5}, true, gt, "gt r3 r5", "gt_r3_r5"},
893                           {{gt, r3, r6}, true, gt, "gt r3 r6", "gt_r3_r6"},
894                           {{gt, r3, r7}, true, gt, "gt r3 r7", "gt_r3_r7"},
895                           {{gt, r4, r0}, true, gt, "gt r4 r0", "gt_r4_r0"},
896                           {{gt, r4, r1}, true, gt, "gt r4 r1", "gt_r4_r1"},
897                           {{gt, r4, r2}, true, gt, "gt r4 r2", "gt_r4_r2"},
898                           {{gt, r4, r3}, true, gt, "gt r4 r3", "gt_r4_r3"},
899                           {{gt, r4, r4}, true, gt, "gt r4 r4", "gt_r4_r4"},
900                           {{gt, r4, r5}, true, gt, "gt r4 r5", "gt_r4_r5"},
901                           {{gt, r4, r6}, true, gt, "gt r4 r6", "gt_r4_r6"},
902                           {{gt, r4, r7}, true, gt, "gt r4 r7", "gt_r4_r7"},
903                           {{gt, r5, r0}, true, gt, "gt r5 r0", "gt_r5_r0"},
904                           {{gt, r5, r1}, true, gt, "gt r5 r1", "gt_r5_r1"},
905                           {{gt, r5, r2}, true, gt, "gt r5 r2", "gt_r5_r2"},
906                           {{gt, r5, r3}, true, gt, "gt r5 r3", "gt_r5_r3"},
907                           {{gt, r5, r4}, true, gt, "gt r5 r4", "gt_r5_r4"},
908                           {{gt, r5, r5}, true, gt, "gt r5 r5", "gt_r5_r5"},
909                           {{gt, r5, r6}, true, gt, "gt r5 r6", "gt_r5_r6"},
910                           {{gt, r5, r7}, true, gt, "gt r5 r7", "gt_r5_r7"},
911                           {{gt, r6, r0}, true, gt, "gt r6 r0", "gt_r6_r0"},
912                           {{gt, r6, r1}, true, gt, "gt r6 r1", "gt_r6_r1"},
913                           {{gt, r6, r2}, true, gt, "gt r6 r2", "gt_r6_r2"},
914                           {{gt, r6, r3}, true, gt, "gt r6 r3", "gt_r6_r3"},
915                           {{gt, r6, r4}, true, gt, "gt r6 r4", "gt_r6_r4"},
916                           {{gt, r6, r5}, true, gt, "gt r6 r5", "gt_r6_r5"},
917                           {{gt, r6, r6}, true, gt, "gt r6 r6", "gt_r6_r6"},
918                           {{gt, r6, r7}, true, gt, "gt r6 r7", "gt_r6_r7"},
919                           {{gt, r7, r0}, true, gt, "gt r7 r0", "gt_r7_r0"},
920                           {{gt, r7, r1}, true, gt, "gt r7 r1", "gt_r7_r1"},
921                           {{gt, r7, r2}, true, gt, "gt r7 r2", "gt_r7_r2"},
922                           {{gt, r7, r3}, true, gt, "gt r7 r3", "gt_r7_r3"},
923                           {{gt, r7, r4}, true, gt, "gt r7 r4", "gt_r7_r4"},
924                           {{gt, r7, r5}, true, gt, "gt r7 r5", "gt_r7_r5"},
925                           {{gt, r7, r6}, true, gt, "gt r7 r6", "gt_r7_r6"},
926                           {{gt, r7, r7}, true, gt, "gt r7 r7", "gt_r7_r7"},
927                           {{le, r0, r0}, true, le, "le r0 r0", "le_r0_r0"},
928                           {{le, r0, r1}, true, le, "le r0 r1", "le_r0_r1"},
929                           {{le, r0, r2}, true, le, "le r0 r2", "le_r0_r2"},
930                           {{le, r0, r3}, true, le, "le r0 r3", "le_r0_r3"},
931                           {{le, r0, r4}, true, le, "le r0 r4", "le_r0_r4"},
932                           {{le, r0, r5}, true, le, "le r0 r5", "le_r0_r5"},
933                           {{le, r0, r6}, true, le, "le r0 r6", "le_r0_r6"},
934                           {{le, r0, r7}, true, le, "le r0 r7", "le_r0_r7"},
935                           {{le, r1, r0}, true, le, "le r1 r0", "le_r1_r0"},
936                           {{le, r1, r1}, true, le, "le r1 r1", "le_r1_r1"},
937                           {{le, r1, r2}, true, le, "le r1 r2", "le_r1_r2"},
938                           {{le, r1, r3}, true, le, "le r1 r3", "le_r1_r3"},
939                           {{le, r1, r4}, true, le, "le r1 r4", "le_r1_r4"},
940                           {{le, r1, r5}, true, le, "le r1 r5", "le_r1_r5"},
941                           {{le, r1, r6}, true, le, "le r1 r6", "le_r1_r6"},
942                           {{le, r1, r7}, true, le, "le r1 r7", "le_r1_r7"},
943                           {{le, r2, r0}, true, le, "le r2 r0", "le_r2_r0"},
944                           {{le, r2, r1}, true, le, "le r2 r1", "le_r2_r1"},
945                           {{le, r2, r2}, true, le, "le r2 r2", "le_r2_r2"},
946                           {{le, r2, r3}, true, le, "le r2 r3", "le_r2_r3"},
947                           {{le, r2, r4}, true, le, "le r2 r4", "le_r2_r4"},
948                           {{le, r2, r5}, true, le, "le r2 r5", "le_r2_r5"},
949                           {{le, r2, r6}, true, le, "le r2 r6", "le_r2_r6"},
950                           {{le, r2, r7}, true, le, "le r2 r7", "le_r2_r7"},
951                           {{le, r3, r0}, true, le, "le r3 r0", "le_r3_r0"},
952                           {{le, r3, r1}, true, le, "le r3 r1", "le_r3_r1"},
953                           {{le, r3, r2}, true, le, "le r3 r2", "le_r3_r2"},
954                           {{le, r3, r3}, true, le, "le r3 r3", "le_r3_r3"},
955                           {{le, r3, r4}, true, le, "le r3 r4", "le_r3_r4"},
956                           {{le, r3, r5}, true, le, "le r3 r5", "le_r3_r5"},
957                           {{le, r3, r6}, true, le, "le r3 r6", "le_r3_r6"},
958                           {{le, r3, r7}, true, le, "le r3 r7", "le_r3_r7"},
959                           {{le, r4, r0}, true, le, "le r4 r0", "le_r4_r0"},
960                           {{le, r4, r1}, true, le, "le r4 r1", "le_r4_r1"},
961                           {{le, r4, r2}, true, le, "le r4 r2", "le_r4_r2"},
962                           {{le, r4, r3}, true, le, "le r4 r3", "le_r4_r3"},
963                           {{le, r4, r4}, true, le, "le r4 r4", "le_r4_r4"},
964                           {{le, r4, r5}, true, le, "le r4 r5", "le_r4_r5"},
965                           {{le, r4, r6}, true, le, "le r4 r6", "le_r4_r6"},
966                           {{le, r4, r7}, true, le, "le r4 r7", "le_r4_r7"},
967                           {{le, r5, r0}, true, le, "le r5 r0", "le_r5_r0"},
968                           {{le, r5, r1}, true, le, "le r5 r1", "le_r5_r1"},
969                           {{le, r5, r2}, true, le, "le r5 r2", "le_r5_r2"},
970                           {{le, r5, r3}, true, le, "le r5 r3", "le_r5_r3"},
971                           {{le, r5, r4}, true, le, "le r5 r4", "le_r5_r4"},
972                           {{le, r5, r5}, true, le, "le r5 r5", "le_r5_r5"},
973                           {{le, r5, r6}, true, le, "le r5 r6", "le_r5_r6"},
974                           {{le, r5, r7}, true, le, "le r5 r7", "le_r5_r7"},
975                           {{le, r6, r0}, true, le, "le r6 r0", "le_r6_r0"},
976                           {{le, r6, r1}, true, le, "le r6 r1", "le_r6_r1"},
977                           {{le, r6, r2}, true, le, "le r6 r2", "le_r6_r2"},
978                           {{le, r6, r3}, true, le, "le r6 r3", "le_r6_r3"},
979                           {{le, r6, r4}, true, le, "le r6 r4", "le_r6_r4"},
980                           {{le, r6, r5}, true, le, "le r6 r5", "le_r6_r5"},
981                           {{le, r6, r6}, true, le, "le r6 r6", "le_r6_r6"},
982                           {{le, r6, r7}, true, le, "le r6 r7", "le_r6_r7"},
983                           {{le, r7, r0}, true, le, "le r7 r0", "le_r7_r0"},
984                           {{le, r7, r1}, true, le, "le r7 r1", "le_r7_r1"},
985                           {{le, r7, r2}, true, le, "le r7 r2", "le_r7_r2"},
986                           {{le, r7, r3}, true, le, "le r7 r3", "le_r7_r3"},
987                           {{le, r7, r4}, true, le, "le r7 r4", "le_r7_r4"},
988                           {{le, r7, r5}, true, le, "le r7 r5", "le_r7_r5"},
989                           {{le, r7, r6}, true, le, "le r7 r6", "le_r7_r6"},
990                           {{le, r7, r7}, true, le, "le r7 r7", "le_r7_r7"}};
991
992// These headers each contain an array of `TestResult` with the reference output
993// values. The reference arrays are names `kReference{mnemonic}`.
994#include "aarch32/traces/assembler-cond-rd-operand-rn-low-registers-in-it-block-cmn-t32.h"
995#include "aarch32/traces/assembler-cond-rd-operand-rn-low-registers-in-it-block-tst-t32.h"
996
997
998// The maximum number of errors to report in detail for each test.
999const unsigned kErrorReportLimit = 8;
1000
1001typedef void (MacroAssembler::*Fn)(Condition cond,
1002                                   Register rd,
1003                                   const Operand& op);
1004
1005void TestHelper(Fn instruction,
1006                const char* mnemonic,
1007                const TestResult reference[]) {
1008  unsigned total_error_count = 0;
1009  MacroAssembler masm(BUF_SIZE);
1010
1011  masm.UseT32();
1012
1013  for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
1014    // Values to pass to the macro-assembler.
1015    Condition cond = kTests[i].operands.cond;
1016    Register rd = kTests[i].operands.rd;
1017    Register rn = kTests[i].operands.rn;
1018    Operand op(rn);
1019
1020    int32_t start = masm.GetCursorOffset();
1021    {
1022      // We never generate more that 4 bytes, as IT instructions are only
1023      // allowed for narrow encodings.
1024      ExactAssemblyScope scope(&masm, 4, ExactAssemblyScope::kMaximumSize);
1025      if (kTests[i].in_it_block) {
1026        masm.it(kTests[i].it_condition);
1027      }
1028      (masm.*instruction)(cond, rd, op);
1029    }
1030    int32_t end = masm.GetCursorOffset();
1031
1032    const byte* result_ptr =
1033        masm.GetBuffer()->GetOffsetAddress<const byte*>(start);
1034    VIXL_ASSERT(start < end);
1035    uint32_t result_size = end - start;
1036
1037    if (Test::generate_test_trace()) {
1038      // Print the result bytes.
1039      printf("const byte kInstruction_%s_%s[] = {\n",
1040             mnemonic,
1041             kTests[i].identifier);
1042      for (uint32_t j = 0; j < result_size; j++) {
1043        if (j == 0) {
1044          printf("  0x%02" PRIx8, result_ptr[j]);
1045        } else {
1046          printf(", 0x%02" PRIx8, result_ptr[j]);
1047        }
1048      }
1049      // This comment is meant to be used by external tools to validate
1050      // the encoding. We can parse the comment to figure out what
1051      // instruction this corresponds to.
1052      if (kTests[i].in_it_block) {
1053        printf(" // It %s; %s %s\n};\n",
1054               kTests[i].it_condition.GetName(),
1055               mnemonic,
1056               kTests[i].operands_description);
1057      } else {
1058        printf(" // %s %s\n};\n", mnemonic, kTests[i].operands_description);
1059      }
1060    } else {
1061      // Check we've emitted the exact same encoding as present in the
1062      // trace file. Only print up to `kErrorReportLimit` errors.
1063      if (((result_size != reference[i].size) ||
1064           (memcmp(result_ptr, reference[i].encoding, reference[i].size) !=
1065            0)) &&
1066          (++total_error_count <= kErrorReportLimit)) {
1067        printf("Error when testing \"%s\" with operands \"%s\":\n",
1068               mnemonic,
1069               kTests[i].operands_description);
1070        printf("  Expected: ");
1071        for (uint32_t j = 0; j < reference[i].size; j++) {
1072          if (j == 0) {
1073            printf("0x%02" PRIx8, reference[i].encoding[j]);
1074          } else {
1075            printf(", 0x%02" PRIx8, reference[i].encoding[j]);
1076          }
1077        }
1078        printf("\n");
1079        printf("  Found:    ");
1080        for (uint32_t j = 0; j < result_size; j++) {
1081          if (j == 0) {
1082            printf("0x%02" PRIx8, result_ptr[j]);
1083          } else {
1084            printf(", 0x%02" PRIx8, result_ptr[j]);
1085          }
1086        }
1087        printf("\n");
1088      }
1089    }
1090  }
1091
1092  masm.FinalizeCode();
1093
1094  if (Test::generate_test_trace()) {
1095    // Finalize the trace file by writing the final `TestResult` array
1096    // which links all generated instruction encodings.
1097    printf("const TestResult kReference%s[] = {\n", mnemonic);
1098    for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
1099      printf("  {\n");
1100      printf("    ARRAY_SIZE(kInstruction_%s_%s),\n",
1101             mnemonic,
1102             kTests[i].identifier);
1103      printf("    kInstruction_%s_%s,\n", mnemonic, kTests[i].identifier);
1104      printf("  },\n");
1105    }
1106    printf("};\n");
1107  } else {
1108    if (total_error_count > kErrorReportLimit) {
1109      printf("%u other errors follow.\n",
1110             total_error_count - kErrorReportLimit);
1111    }
1112    // Crash if the test failed.
1113    VIXL_CHECK(total_error_count == 0);
1114  }
1115}
1116
1117// Instantiate tests for each instruction in the list.
1118#define TEST(mnemonic)                                                      \
1119  void Test_##mnemonic() {                                                  \
1120    TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \
1121  }                                                                         \
1122  Test test_##mnemonic(                                                     \
1123      "AARCH32_ASSEMBLER_COND_RD_OPERAND_RN_LOW_REGISTERS_IN_IT_"           \
1124      "BLOCK_" #mnemonic "_T32",                                            \
1125      &Test_##mnemonic);
1126FOREACH_INSTRUCTION(TEST)
1127#undef TEST
1128
1129}  // namespace
1130#endif
1131
1132}  // namespace aarch32
1133}  // namespace vixl
1134