• 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-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 
47 namespace vixl {
48 namespace 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
63 namespace {
64 
65 // Values to be passed to the assembler to produce the instruction under test.
66 struct 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.
74 struct 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 
89 struct TestResult {
90   size_t size;
91   const byte* encoding;
92 };
93 
94 // Each element of this array produce one instruction encoding.
95 const 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.
999 const unsigned kErrorReportLimit = 8;
1000 
1001 typedef void (MacroAssembler::*Fn)(Condition cond,
1002                                    Register rd,
1003                                    const Operand& op);
1004 
TestHelper(Fn instruction,const char * mnemonic,const TestResult reference[])1005 void 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);
1126 FOREACH_INSTRUCTION(TEST)
1127 #undef TEST
1128 
1129 }  // namespace
1130 #endif
1131 
1132 }  // namespace aarch32
1133 }  // namespace vixl
1134