• 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) M(mul)
52 
53 
54 // The following definitions are defined again in each generated test, therefore
55 // we need to place them in an anomymous namespace. It expresses that they are
56 // local to this file only, and the compiler is not allowed to share these types
57 // across test files during template instantiation. Specifically, `Operands` has
58 // various layouts across generated tests so it absolutely cannot be shared.
59 
60 #ifdef VIXL_INCLUDE_TARGET_T32
61 namespace {
62 
63 // Values to be passed to the assembler to produce the instruction under test.
64 struct Operands {
65   Condition cond;
66   Register rd;
67   Register rn;
68   Register rm;
69 };
70 
71 // This structure contains all data needed to test one specific
72 // instruction.
73 struct TestData {
74   // The `operands` field represents what to pass to the assembler to
75   // produce the instruction.
76   Operands operands;
77   // True if we need to generate an IT instruction for this test to be valid.
78   bool in_it_block;
79   // The condition to give the IT instruction, this will be set to "al" by
80   // default.
81   Condition it_condition;
82   // Description of the operands, used for error reporting.
83   const char* operands_description;
84   // Unique identifier, used for generating traces.
85   const char* identifier;
86 };
87 
88 struct TestResult {
89   size_t size;
90   const byte* encoding;
91 };
92 
93 // Each element of this array produce one instruction encoding.
94 const TestData kTests[] =
95     {{{eq, r0, r0, r0}, true, eq, "eq r0 r0 r0", "eq_r0_r0_r0"},
96      {{eq, r0, r1, r0}, true, eq, "eq r0 r1 r0", "eq_r0_r1_r0"},
97      {{eq, r0, r2, r0}, true, eq, "eq r0 r2 r0", "eq_r0_r2_r0"},
98      {{eq, r0, r3, r0}, true, eq, "eq r0 r3 r0", "eq_r0_r3_r0"},
99      {{eq, r0, r4, r0}, true, eq, "eq r0 r4 r0", "eq_r0_r4_r0"},
100      {{eq, r0, r5, r0}, true, eq, "eq r0 r5 r0", "eq_r0_r5_r0"},
101      {{eq, r0, r6, r0}, true, eq, "eq r0 r6 r0", "eq_r0_r6_r0"},
102      {{eq, r0, r7, r0}, true, eq, "eq r0 r7 r0", "eq_r0_r7_r0"},
103      {{eq, r1, r0, r1}, true, eq, "eq r1 r0 r1", "eq_r1_r0_r1"},
104      {{eq, r1, r1, r1}, true, eq, "eq r1 r1 r1", "eq_r1_r1_r1"},
105      {{eq, r1, r2, r1}, true, eq, "eq r1 r2 r1", "eq_r1_r2_r1"},
106      {{eq, r1, r3, r1}, true, eq, "eq r1 r3 r1", "eq_r1_r3_r1"},
107      {{eq, r1, r4, r1}, true, eq, "eq r1 r4 r1", "eq_r1_r4_r1"},
108      {{eq, r1, r5, r1}, true, eq, "eq r1 r5 r1", "eq_r1_r5_r1"},
109      {{eq, r1, r6, r1}, true, eq, "eq r1 r6 r1", "eq_r1_r6_r1"},
110      {{eq, r1, r7, r1}, true, eq, "eq r1 r7 r1", "eq_r1_r7_r1"},
111      {{eq, r2, r0, r2}, true, eq, "eq r2 r0 r2", "eq_r2_r0_r2"},
112      {{eq, r2, r1, r2}, true, eq, "eq r2 r1 r2", "eq_r2_r1_r2"},
113      {{eq, r2, r2, r2}, true, eq, "eq r2 r2 r2", "eq_r2_r2_r2"},
114      {{eq, r2, r3, r2}, true, eq, "eq r2 r3 r2", "eq_r2_r3_r2"},
115      {{eq, r2, r4, r2}, true, eq, "eq r2 r4 r2", "eq_r2_r4_r2"},
116      {{eq, r2, r5, r2}, true, eq, "eq r2 r5 r2", "eq_r2_r5_r2"},
117      {{eq, r2, r6, r2}, true, eq, "eq r2 r6 r2", "eq_r2_r6_r2"},
118      {{eq, r2, r7, r2}, true, eq, "eq r2 r7 r2", "eq_r2_r7_r2"},
119      {{eq, r3, r0, r3}, true, eq, "eq r3 r0 r3", "eq_r3_r0_r3"},
120      {{eq, r3, r1, r3}, true, eq, "eq r3 r1 r3", "eq_r3_r1_r3"},
121      {{eq, r3, r2, r3}, true, eq, "eq r3 r2 r3", "eq_r3_r2_r3"},
122      {{eq, r3, r3, r3}, true, eq, "eq r3 r3 r3", "eq_r3_r3_r3"},
123      {{eq, r3, r4, r3}, true, eq, "eq r3 r4 r3", "eq_r3_r4_r3"},
124      {{eq, r3, r5, r3}, true, eq, "eq r3 r5 r3", "eq_r3_r5_r3"},
125      {{eq, r3, r6, r3}, true, eq, "eq r3 r6 r3", "eq_r3_r6_r3"},
126      {{eq, r3, r7, r3}, true, eq, "eq r3 r7 r3", "eq_r3_r7_r3"},
127      {{eq, r4, r0, r4}, true, eq, "eq r4 r0 r4", "eq_r4_r0_r4"},
128      {{eq, r4, r1, r4}, true, eq, "eq r4 r1 r4", "eq_r4_r1_r4"},
129      {{eq, r4, r2, r4}, true, eq, "eq r4 r2 r4", "eq_r4_r2_r4"},
130      {{eq, r4, r3, r4}, true, eq, "eq r4 r3 r4", "eq_r4_r3_r4"},
131      {{eq, r4, r4, r4}, true, eq, "eq r4 r4 r4", "eq_r4_r4_r4"},
132      {{eq, r4, r5, r4}, true, eq, "eq r4 r5 r4", "eq_r4_r5_r4"},
133      {{eq, r4, r6, r4}, true, eq, "eq r4 r6 r4", "eq_r4_r6_r4"},
134      {{eq, r4, r7, r4}, true, eq, "eq r4 r7 r4", "eq_r4_r7_r4"},
135      {{eq, r5, r0, r5}, true, eq, "eq r5 r0 r5", "eq_r5_r0_r5"},
136      {{eq, r5, r1, r5}, true, eq, "eq r5 r1 r5", "eq_r5_r1_r5"},
137      {{eq, r5, r2, r5}, true, eq, "eq r5 r2 r5", "eq_r5_r2_r5"},
138      {{eq, r5, r3, r5}, true, eq, "eq r5 r3 r5", "eq_r5_r3_r5"},
139      {{eq, r5, r4, r5}, true, eq, "eq r5 r4 r5", "eq_r5_r4_r5"},
140      {{eq, r5, r5, r5}, true, eq, "eq r5 r5 r5", "eq_r5_r5_r5"},
141      {{eq, r5, r6, r5}, true, eq, "eq r5 r6 r5", "eq_r5_r6_r5"},
142      {{eq, r5, r7, r5}, true, eq, "eq r5 r7 r5", "eq_r5_r7_r5"},
143      {{eq, r6, r0, r6}, true, eq, "eq r6 r0 r6", "eq_r6_r0_r6"},
144      {{eq, r6, r1, r6}, true, eq, "eq r6 r1 r6", "eq_r6_r1_r6"},
145      {{eq, r6, r2, r6}, true, eq, "eq r6 r2 r6", "eq_r6_r2_r6"},
146      {{eq, r6, r3, r6}, true, eq, "eq r6 r3 r6", "eq_r6_r3_r6"},
147      {{eq, r6, r4, r6}, true, eq, "eq r6 r4 r6", "eq_r6_r4_r6"},
148      {{eq, r6, r5, r6}, true, eq, "eq r6 r5 r6", "eq_r6_r5_r6"},
149      {{eq, r6, r6, r6}, true, eq, "eq r6 r6 r6", "eq_r6_r6_r6"},
150      {{eq, r6, r7, r6}, true, eq, "eq r6 r7 r6", "eq_r6_r7_r6"},
151      {{eq, r7, r0, r7}, true, eq, "eq r7 r0 r7", "eq_r7_r0_r7"},
152      {{eq, r7, r1, r7}, true, eq, "eq r7 r1 r7", "eq_r7_r1_r7"},
153      {{eq, r7, r2, r7}, true, eq, "eq r7 r2 r7", "eq_r7_r2_r7"},
154      {{eq, r7, r3, r7}, true, eq, "eq r7 r3 r7", "eq_r7_r3_r7"},
155      {{eq, r7, r4, r7}, true, eq, "eq r7 r4 r7", "eq_r7_r4_r7"},
156      {{eq, r7, r5, r7}, true, eq, "eq r7 r5 r7", "eq_r7_r5_r7"},
157      {{eq, r7, r6, r7}, true, eq, "eq r7 r6 r7", "eq_r7_r6_r7"},
158      {{eq, r7, r7, r7}, true, eq, "eq r7 r7 r7", "eq_r7_r7_r7"},
159      {{ne, r0, r0, r0}, true, ne, "ne r0 r0 r0", "ne_r0_r0_r0"},
160      {{ne, r0, r1, r0}, true, ne, "ne r0 r1 r0", "ne_r0_r1_r0"},
161      {{ne, r0, r2, r0}, true, ne, "ne r0 r2 r0", "ne_r0_r2_r0"},
162      {{ne, r0, r3, r0}, true, ne, "ne r0 r3 r0", "ne_r0_r3_r0"},
163      {{ne, r0, r4, r0}, true, ne, "ne r0 r4 r0", "ne_r0_r4_r0"},
164      {{ne, r0, r5, r0}, true, ne, "ne r0 r5 r0", "ne_r0_r5_r0"},
165      {{ne, r0, r6, r0}, true, ne, "ne r0 r6 r0", "ne_r0_r6_r0"},
166      {{ne, r0, r7, r0}, true, ne, "ne r0 r7 r0", "ne_r0_r7_r0"},
167      {{ne, r1, r0, r1}, true, ne, "ne r1 r0 r1", "ne_r1_r0_r1"},
168      {{ne, r1, r1, r1}, true, ne, "ne r1 r1 r1", "ne_r1_r1_r1"},
169      {{ne, r1, r2, r1}, true, ne, "ne r1 r2 r1", "ne_r1_r2_r1"},
170      {{ne, r1, r3, r1}, true, ne, "ne r1 r3 r1", "ne_r1_r3_r1"},
171      {{ne, r1, r4, r1}, true, ne, "ne r1 r4 r1", "ne_r1_r4_r1"},
172      {{ne, r1, r5, r1}, true, ne, "ne r1 r5 r1", "ne_r1_r5_r1"},
173      {{ne, r1, r6, r1}, true, ne, "ne r1 r6 r1", "ne_r1_r6_r1"},
174      {{ne, r1, r7, r1}, true, ne, "ne r1 r7 r1", "ne_r1_r7_r1"},
175      {{ne, r2, r0, r2}, true, ne, "ne r2 r0 r2", "ne_r2_r0_r2"},
176      {{ne, r2, r1, r2}, true, ne, "ne r2 r1 r2", "ne_r2_r1_r2"},
177      {{ne, r2, r2, r2}, true, ne, "ne r2 r2 r2", "ne_r2_r2_r2"},
178      {{ne, r2, r3, r2}, true, ne, "ne r2 r3 r2", "ne_r2_r3_r2"},
179      {{ne, r2, r4, r2}, true, ne, "ne r2 r4 r2", "ne_r2_r4_r2"},
180      {{ne, r2, r5, r2}, true, ne, "ne r2 r5 r2", "ne_r2_r5_r2"},
181      {{ne, r2, r6, r2}, true, ne, "ne r2 r6 r2", "ne_r2_r6_r2"},
182      {{ne, r2, r7, r2}, true, ne, "ne r2 r7 r2", "ne_r2_r7_r2"},
183      {{ne, r3, r0, r3}, true, ne, "ne r3 r0 r3", "ne_r3_r0_r3"},
184      {{ne, r3, r1, r3}, true, ne, "ne r3 r1 r3", "ne_r3_r1_r3"},
185      {{ne, r3, r2, r3}, true, ne, "ne r3 r2 r3", "ne_r3_r2_r3"},
186      {{ne, r3, r3, r3}, true, ne, "ne r3 r3 r3", "ne_r3_r3_r3"},
187      {{ne, r3, r4, r3}, true, ne, "ne r3 r4 r3", "ne_r3_r4_r3"},
188      {{ne, r3, r5, r3}, true, ne, "ne r3 r5 r3", "ne_r3_r5_r3"},
189      {{ne, r3, r6, r3}, true, ne, "ne r3 r6 r3", "ne_r3_r6_r3"},
190      {{ne, r3, r7, r3}, true, ne, "ne r3 r7 r3", "ne_r3_r7_r3"},
191      {{ne, r4, r0, r4}, true, ne, "ne r4 r0 r4", "ne_r4_r0_r4"},
192      {{ne, r4, r1, r4}, true, ne, "ne r4 r1 r4", "ne_r4_r1_r4"},
193      {{ne, r4, r2, r4}, true, ne, "ne r4 r2 r4", "ne_r4_r2_r4"},
194      {{ne, r4, r3, r4}, true, ne, "ne r4 r3 r4", "ne_r4_r3_r4"},
195      {{ne, r4, r4, r4}, true, ne, "ne r4 r4 r4", "ne_r4_r4_r4"},
196      {{ne, r4, r5, r4}, true, ne, "ne r4 r5 r4", "ne_r4_r5_r4"},
197      {{ne, r4, r6, r4}, true, ne, "ne r4 r6 r4", "ne_r4_r6_r4"},
198      {{ne, r4, r7, r4}, true, ne, "ne r4 r7 r4", "ne_r4_r7_r4"},
199      {{ne, r5, r0, r5}, true, ne, "ne r5 r0 r5", "ne_r5_r0_r5"},
200      {{ne, r5, r1, r5}, true, ne, "ne r5 r1 r5", "ne_r5_r1_r5"},
201      {{ne, r5, r2, r5}, true, ne, "ne r5 r2 r5", "ne_r5_r2_r5"},
202      {{ne, r5, r3, r5}, true, ne, "ne r5 r3 r5", "ne_r5_r3_r5"},
203      {{ne, r5, r4, r5}, true, ne, "ne r5 r4 r5", "ne_r5_r4_r5"},
204      {{ne, r5, r5, r5}, true, ne, "ne r5 r5 r5", "ne_r5_r5_r5"},
205      {{ne, r5, r6, r5}, true, ne, "ne r5 r6 r5", "ne_r5_r6_r5"},
206      {{ne, r5, r7, r5}, true, ne, "ne r5 r7 r5", "ne_r5_r7_r5"},
207      {{ne, r6, r0, r6}, true, ne, "ne r6 r0 r6", "ne_r6_r0_r6"},
208      {{ne, r6, r1, r6}, true, ne, "ne r6 r1 r6", "ne_r6_r1_r6"},
209      {{ne, r6, r2, r6}, true, ne, "ne r6 r2 r6", "ne_r6_r2_r6"},
210      {{ne, r6, r3, r6}, true, ne, "ne r6 r3 r6", "ne_r6_r3_r6"},
211      {{ne, r6, r4, r6}, true, ne, "ne r6 r4 r6", "ne_r6_r4_r6"},
212      {{ne, r6, r5, r6}, true, ne, "ne r6 r5 r6", "ne_r6_r5_r6"},
213      {{ne, r6, r6, r6}, true, ne, "ne r6 r6 r6", "ne_r6_r6_r6"},
214      {{ne, r6, r7, r6}, true, ne, "ne r6 r7 r6", "ne_r6_r7_r6"},
215      {{ne, r7, r0, r7}, true, ne, "ne r7 r0 r7", "ne_r7_r0_r7"},
216      {{ne, r7, r1, r7}, true, ne, "ne r7 r1 r7", "ne_r7_r1_r7"},
217      {{ne, r7, r2, r7}, true, ne, "ne r7 r2 r7", "ne_r7_r2_r7"},
218      {{ne, r7, r3, r7}, true, ne, "ne r7 r3 r7", "ne_r7_r3_r7"},
219      {{ne, r7, r4, r7}, true, ne, "ne r7 r4 r7", "ne_r7_r4_r7"},
220      {{ne, r7, r5, r7}, true, ne, "ne r7 r5 r7", "ne_r7_r5_r7"},
221      {{ne, r7, r6, r7}, true, ne, "ne r7 r6 r7", "ne_r7_r6_r7"},
222      {{ne, r7, r7, r7}, true, ne, "ne r7 r7 r7", "ne_r7_r7_r7"},
223      {{cs, r0, r0, r0}, true, cs, "cs r0 r0 r0", "cs_r0_r0_r0"},
224      {{cs, r0, r1, r0}, true, cs, "cs r0 r1 r0", "cs_r0_r1_r0"},
225      {{cs, r0, r2, r0}, true, cs, "cs r0 r2 r0", "cs_r0_r2_r0"},
226      {{cs, r0, r3, r0}, true, cs, "cs r0 r3 r0", "cs_r0_r3_r0"},
227      {{cs, r0, r4, r0}, true, cs, "cs r0 r4 r0", "cs_r0_r4_r0"},
228      {{cs, r0, r5, r0}, true, cs, "cs r0 r5 r0", "cs_r0_r5_r0"},
229      {{cs, r0, r6, r0}, true, cs, "cs r0 r6 r0", "cs_r0_r6_r0"},
230      {{cs, r0, r7, r0}, true, cs, "cs r0 r7 r0", "cs_r0_r7_r0"},
231      {{cs, r1, r0, r1}, true, cs, "cs r1 r0 r1", "cs_r1_r0_r1"},
232      {{cs, r1, r1, r1}, true, cs, "cs r1 r1 r1", "cs_r1_r1_r1"},
233      {{cs, r1, r2, r1}, true, cs, "cs r1 r2 r1", "cs_r1_r2_r1"},
234      {{cs, r1, r3, r1}, true, cs, "cs r1 r3 r1", "cs_r1_r3_r1"},
235      {{cs, r1, r4, r1}, true, cs, "cs r1 r4 r1", "cs_r1_r4_r1"},
236      {{cs, r1, r5, r1}, true, cs, "cs r1 r5 r1", "cs_r1_r5_r1"},
237      {{cs, r1, r6, r1}, true, cs, "cs r1 r6 r1", "cs_r1_r6_r1"},
238      {{cs, r1, r7, r1}, true, cs, "cs r1 r7 r1", "cs_r1_r7_r1"},
239      {{cs, r2, r0, r2}, true, cs, "cs r2 r0 r2", "cs_r2_r0_r2"},
240      {{cs, r2, r1, r2}, true, cs, "cs r2 r1 r2", "cs_r2_r1_r2"},
241      {{cs, r2, r2, r2}, true, cs, "cs r2 r2 r2", "cs_r2_r2_r2"},
242      {{cs, r2, r3, r2}, true, cs, "cs r2 r3 r2", "cs_r2_r3_r2"},
243      {{cs, r2, r4, r2}, true, cs, "cs r2 r4 r2", "cs_r2_r4_r2"},
244      {{cs, r2, r5, r2}, true, cs, "cs r2 r5 r2", "cs_r2_r5_r2"},
245      {{cs, r2, r6, r2}, true, cs, "cs r2 r6 r2", "cs_r2_r6_r2"},
246      {{cs, r2, r7, r2}, true, cs, "cs r2 r7 r2", "cs_r2_r7_r2"},
247      {{cs, r3, r0, r3}, true, cs, "cs r3 r0 r3", "cs_r3_r0_r3"},
248      {{cs, r3, r1, r3}, true, cs, "cs r3 r1 r3", "cs_r3_r1_r3"},
249      {{cs, r3, r2, r3}, true, cs, "cs r3 r2 r3", "cs_r3_r2_r3"},
250      {{cs, r3, r3, r3}, true, cs, "cs r3 r3 r3", "cs_r3_r3_r3"},
251      {{cs, r3, r4, r3}, true, cs, "cs r3 r4 r3", "cs_r3_r4_r3"},
252      {{cs, r3, r5, r3}, true, cs, "cs r3 r5 r3", "cs_r3_r5_r3"},
253      {{cs, r3, r6, r3}, true, cs, "cs r3 r6 r3", "cs_r3_r6_r3"},
254      {{cs, r3, r7, r3}, true, cs, "cs r3 r7 r3", "cs_r3_r7_r3"},
255      {{cs, r4, r0, r4}, true, cs, "cs r4 r0 r4", "cs_r4_r0_r4"},
256      {{cs, r4, r1, r4}, true, cs, "cs r4 r1 r4", "cs_r4_r1_r4"},
257      {{cs, r4, r2, r4}, true, cs, "cs r4 r2 r4", "cs_r4_r2_r4"},
258      {{cs, r4, r3, r4}, true, cs, "cs r4 r3 r4", "cs_r4_r3_r4"},
259      {{cs, r4, r4, r4}, true, cs, "cs r4 r4 r4", "cs_r4_r4_r4"},
260      {{cs, r4, r5, r4}, true, cs, "cs r4 r5 r4", "cs_r4_r5_r4"},
261      {{cs, r4, r6, r4}, true, cs, "cs r4 r6 r4", "cs_r4_r6_r4"},
262      {{cs, r4, r7, r4}, true, cs, "cs r4 r7 r4", "cs_r4_r7_r4"},
263      {{cs, r5, r0, r5}, true, cs, "cs r5 r0 r5", "cs_r5_r0_r5"},
264      {{cs, r5, r1, r5}, true, cs, "cs r5 r1 r5", "cs_r5_r1_r5"},
265      {{cs, r5, r2, r5}, true, cs, "cs r5 r2 r5", "cs_r5_r2_r5"},
266      {{cs, r5, r3, r5}, true, cs, "cs r5 r3 r5", "cs_r5_r3_r5"},
267      {{cs, r5, r4, r5}, true, cs, "cs r5 r4 r5", "cs_r5_r4_r5"},
268      {{cs, r5, r5, r5}, true, cs, "cs r5 r5 r5", "cs_r5_r5_r5"},
269      {{cs, r5, r6, r5}, true, cs, "cs r5 r6 r5", "cs_r5_r6_r5"},
270      {{cs, r5, r7, r5}, true, cs, "cs r5 r7 r5", "cs_r5_r7_r5"},
271      {{cs, r6, r0, r6}, true, cs, "cs r6 r0 r6", "cs_r6_r0_r6"},
272      {{cs, r6, r1, r6}, true, cs, "cs r6 r1 r6", "cs_r6_r1_r6"},
273      {{cs, r6, r2, r6}, true, cs, "cs r6 r2 r6", "cs_r6_r2_r6"},
274      {{cs, r6, r3, r6}, true, cs, "cs r6 r3 r6", "cs_r6_r3_r6"},
275      {{cs, r6, r4, r6}, true, cs, "cs r6 r4 r6", "cs_r6_r4_r6"},
276      {{cs, r6, r5, r6}, true, cs, "cs r6 r5 r6", "cs_r6_r5_r6"},
277      {{cs, r6, r6, r6}, true, cs, "cs r6 r6 r6", "cs_r6_r6_r6"},
278      {{cs, r6, r7, r6}, true, cs, "cs r6 r7 r6", "cs_r6_r7_r6"},
279      {{cs, r7, r0, r7}, true, cs, "cs r7 r0 r7", "cs_r7_r0_r7"},
280      {{cs, r7, r1, r7}, true, cs, "cs r7 r1 r7", "cs_r7_r1_r7"},
281      {{cs, r7, r2, r7}, true, cs, "cs r7 r2 r7", "cs_r7_r2_r7"},
282      {{cs, r7, r3, r7}, true, cs, "cs r7 r3 r7", "cs_r7_r3_r7"},
283      {{cs, r7, r4, r7}, true, cs, "cs r7 r4 r7", "cs_r7_r4_r7"},
284      {{cs, r7, r5, r7}, true, cs, "cs r7 r5 r7", "cs_r7_r5_r7"},
285      {{cs, r7, r6, r7}, true, cs, "cs r7 r6 r7", "cs_r7_r6_r7"},
286      {{cs, r7, r7, r7}, true, cs, "cs r7 r7 r7", "cs_r7_r7_r7"},
287      {{cc, r0, r0, r0}, true, cc, "cc r0 r0 r0", "cc_r0_r0_r0"},
288      {{cc, r0, r1, r0}, true, cc, "cc r0 r1 r0", "cc_r0_r1_r0"},
289      {{cc, r0, r2, r0}, true, cc, "cc r0 r2 r0", "cc_r0_r2_r0"},
290      {{cc, r0, r3, r0}, true, cc, "cc r0 r3 r0", "cc_r0_r3_r0"},
291      {{cc, r0, r4, r0}, true, cc, "cc r0 r4 r0", "cc_r0_r4_r0"},
292      {{cc, r0, r5, r0}, true, cc, "cc r0 r5 r0", "cc_r0_r5_r0"},
293      {{cc, r0, r6, r0}, true, cc, "cc r0 r6 r0", "cc_r0_r6_r0"},
294      {{cc, r0, r7, r0}, true, cc, "cc r0 r7 r0", "cc_r0_r7_r0"},
295      {{cc, r1, r0, r1}, true, cc, "cc r1 r0 r1", "cc_r1_r0_r1"},
296      {{cc, r1, r1, r1}, true, cc, "cc r1 r1 r1", "cc_r1_r1_r1"},
297      {{cc, r1, r2, r1}, true, cc, "cc r1 r2 r1", "cc_r1_r2_r1"},
298      {{cc, r1, r3, r1}, true, cc, "cc r1 r3 r1", "cc_r1_r3_r1"},
299      {{cc, r1, r4, r1}, true, cc, "cc r1 r4 r1", "cc_r1_r4_r1"},
300      {{cc, r1, r5, r1}, true, cc, "cc r1 r5 r1", "cc_r1_r5_r1"},
301      {{cc, r1, r6, r1}, true, cc, "cc r1 r6 r1", "cc_r1_r6_r1"},
302      {{cc, r1, r7, r1}, true, cc, "cc r1 r7 r1", "cc_r1_r7_r1"},
303      {{cc, r2, r0, r2}, true, cc, "cc r2 r0 r2", "cc_r2_r0_r2"},
304      {{cc, r2, r1, r2}, true, cc, "cc r2 r1 r2", "cc_r2_r1_r2"},
305      {{cc, r2, r2, r2}, true, cc, "cc r2 r2 r2", "cc_r2_r2_r2"},
306      {{cc, r2, r3, r2}, true, cc, "cc r2 r3 r2", "cc_r2_r3_r2"},
307      {{cc, r2, r4, r2}, true, cc, "cc r2 r4 r2", "cc_r2_r4_r2"},
308      {{cc, r2, r5, r2}, true, cc, "cc r2 r5 r2", "cc_r2_r5_r2"},
309      {{cc, r2, r6, r2}, true, cc, "cc r2 r6 r2", "cc_r2_r6_r2"},
310      {{cc, r2, r7, r2}, true, cc, "cc r2 r7 r2", "cc_r2_r7_r2"},
311      {{cc, r3, r0, r3}, true, cc, "cc r3 r0 r3", "cc_r3_r0_r3"},
312      {{cc, r3, r1, r3}, true, cc, "cc r3 r1 r3", "cc_r3_r1_r3"},
313      {{cc, r3, r2, r3}, true, cc, "cc r3 r2 r3", "cc_r3_r2_r3"},
314      {{cc, r3, r3, r3}, true, cc, "cc r3 r3 r3", "cc_r3_r3_r3"},
315      {{cc, r3, r4, r3}, true, cc, "cc r3 r4 r3", "cc_r3_r4_r3"},
316      {{cc, r3, r5, r3}, true, cc, "cc r3 r5 r3", "cc_r3_r5_r3"},
317      {{cc, r3, r6, r3}, true, cc, "cc r3 r6 r3", "cc_r3_r6_r3"},
318      {{cc, r3, r7, r3}, true, cc, "cc r3 r7 r3", "cc_r3_r7_r3"},
319      {{cc, r4, r0, r4}, true, cc, "cc r4 r0 r4", "cc_r4_r0_r4"},
320      {{cc, r4, r1, r4}, true, cc, "cc r4 r1 r4", "cc_r4_r1_r4"},
321      {{cc, r4, r2, r4}, true, cc, "cc r4 r2 r4", "cc_r4_r2_r4"},
322      {{cc, r4, r3, r4}, true, cc, "cc r4 r3 r4", "cc_r4_r3_r4"},
323      {{cc, r4, r4, r4}, true, cc, "cc r4 r4 r4", "cc_r4_r4_r4"},
324      {{cc, r4, r5, r4}, true, cc, "cc r4 r5 r4", "cc_r4_r5_r4"},
325      {{cc, r4, r6, r4}, true, cc, "cc r4 r6 r4", "cc_r4_r6_r4"},
326      {{cc, r4, r7, r4}, true, cc, "cc r4 r7 r4", "cc_r4_r7_r4"},
327      {{cc, r5, r0, r5}, true, cc, "cc r5 r0 r5", "cc_r5_r0_r5"},
328      {{cc, r5, r1, r5}, true, cc, "cc r5 r1 r5", "cc_r5_r1_r5"},
329      {{cc, r5, r2, r5}, true, cc, "cc r5 r2 r5", "cc_r5_r2_r5"},
330      {{cc, r5, r3, r5}, true, cc, "cc r5 r3 r5", "cc_r5_r3_r5"},
331      {{cc, r5, r4, r5}, true, cc, "cc r5 r4 r5", "cc_r5_r4_r5"},
332      {{cc, r5, r5, r5}, true, cc, "cc r5 r5 r5", "cc_r5_r5_r5"},
333      {{cc, r5, r6, r5}, true, cc, "cc r5 r6 r5", "cc_r5_r6_r5"},
334      {{cc, r5, r7, r5}, true, cc, "cc r5 r7 r5", "cc_r5_r7_r5"},
335      {{cc, r6, r0, r6}, true, cc, "cc r6 r0 r6", "cc_r6_r0_r6"},
336      {{cc, r6, r1, r6}, true, cc, "cc r6 r1 r6", "cc_r6_r1_r6"},
337      {{cc, r6, r2, r6}, true, cc, "cc r6 r2 r6", "cc_r6_r2_r6"},
338      {{cc, r6, r3, r6}, true, cc, "cc r6 r3 r6", "cc_r6_r3_r6"},
339      {{cc, r6, r4, r6}, true, cc, "cc r6 r4 r6", "cc_r6_r4_r6"},
340      {{cc, r6, r5, r6}, true, cc, "cc r6 r5 r6", "cc_r6_r5_r6"},
341      {{cc, r6, r6, r6}, true, cc, "cc r6 r6 r6", "cc_r6_r6_r6"},
342      {{cc, r6, r7, r6}, true, cc, "cc r6 r7 r6", "cc_r6_r7_r6"},
343      {{cc, r7, r0, r7}, true, cc, "cc r7 r0 r7", "cc_r7_r0_r7"},
344      {{cc, r7, r1, r7}, true, cc, "cc r7 r1 r7", "cc_r7_r1_r7"},
345      {{cc, r7, r2, r7}, true, cc, "cc r7 r2 r7", "cc_r7_r2_r7"},
346      {{cc, r7, r3, r7}, true, cc, "cc r7 r3 r7", "cc_r7_r3_r7"},
347      {{cc, r7, r4, r7}, true, cc, "cc r7 r4 r7", "cc_r7_r4_r7"},
348      {{cc, r7, r5, r7}, true, cc, "cc r7 r5 r7", "cc_r7_r5_r7"},
349      {{cc, r7, r6, r7}, true, cc, "cc r7 r6 r7", "cc_r7_r6_r7"},
350      {{cc, r7, r7, r7}, true, cc, "cc r7 r7 r7", "cc_r7_r7_r7"},
351      {{mi, r0, r0, r0}, true, mi, "mi r0 r0 r0", "mi_r0_r0_r0"},
352      {{mi, r0, r1, r0}, true, mi, "mi r0 r1 r0", "mi_r0_r1_r0"},
353      {{mi, r0, r2, r0}, true, mi, "mi r0 r2 r0", "mi_r0_r2_r0"},
354      {{mi, r0, r3, r0}, true, mi, "mi r0 r3 r0", "mi_r0_r3_r0"},
355      {{mi, r0, r4, r0}, true, mi, "mi r0 r4 r0", "mi_r0_r4_r0"},
356      {{mi, r0, r5, r0}, true, mi, "mi r0 r5 r0", "mi_r0_r5_r0"},
357      {{mi, r0, r6, r0}, true, mi, "mi r0 r6 r0", "mi_r0_r6_r0"},
358      {{mi, r0, r7, r0}, true, mi, "mi r0 r7 r0", "mi_r0_r7_r0"},
359      {{mi, r1, r0, r1}, true, mi, "mi r1 r0 r1", "mi_r1_r0_r1"},
360      {{mi, r1, r1, r1}, true, mi, "mi r1 r1 r1", "mi_r1_r1_r1"},
361      {{mi, r1, r2, r1}, true, mi, "mi r1 r2 r1", "mi_r1_r2_r1"},
362      {{mi, r1, r3, r1}, true, mi, "mi r1 r3 r1", "mi_r1_r3_r1"},
363      {{mi, r1, r4, r1}, true, mi, "mi r1 r4 r1", "mi_r1_r4_r1"},
364      {{mi, r1, r5, r1}, true, mi, "mi r1 r5 r1", "mi_r1_r5_r1"},
365      {{mi, r1, r6, r1}, true, mi, "mi r1 r6 r1", "mi_r1_r6_r1"},
366      {{mi, r1, r7, r1}, true, mi, "mi r1 r7 r1", "mi_r1_r7_r1"},
367      {{mi, r2, r0, r2}, true, mi, "mi r2 r0 r2", "mi_r2_r0_r2"},
368      {{mi, r2, r1, r2}, true, mi, "mi r2 r1 r2", "mi_r2_r1_r2"},
369      {{mi, r2, r2, r2}, true, mi, "mi r2 r2 r2", "mi_r2_r2_r2"},
370      {{mi, r2, r3, r2}, true, mi, "mi r2 r3 r2", "mi_r2_r3_r2"},
371      {{mi, r2, r4, r2}, true, mi, "mi r2 r4 r2", "mi_r2_r4_r2"},
372      {{mi, r2, r5, r2}, true, mi, "mi r2 r5 r2", "mi_r2_r5_r2"},
373      {{mi, r2, r6, r2}, true, mi, "mi r2 r6 r2", "mi_r2_r6_r2"},
374      {{mi, r2, r7, r2}, true, mi, "mi r2 r7 r2", "mi_r2_r7_r2"},
375      {{mi, r3, r0, r3}, true, mi, "mi r3 r0 r3", "mi_r3_r0_r3"},
376      {{mi, r3, r1, r3}, true, mi, "mi r3 r1 r3", "mi_r3_r1_r3"},
377      {{mi, r3, r2, r3}, true, mi, "mi r3 r2 r3", "mi_r3_r2_r3"},
378      {{mi, r3, r3, r3}, true, mi, "mi r3 r3 r3", "mi_r3_r3_r3"},
379      {{mi, r3, r4, r3}, true, mi, "mi r3 r4 r3", "mi_r3_r4_r3"},
380      {{mi, r3, r5, r3}, true, mi, "mi r3 r5 r3", "mi_r3_r5_r3"},
381      {{mi, r3, r6, r3}, true, mi, "mi r3 r6 r3", "mi_r3_r6_r3"},
382      {{mi, r3, r7, r3}, true, mi, "mi r3 r7 r3", "mi_r3_r7_r3"},
383      {{mi, r4, r0, r4}, true, mi, "mi r4 r0 r4", "mi_r4_r0_r4"},
384      {{mi, r4, r1, r4}, true, mi, "mi r4 r1 r4", "mi_r4_r1_r4"},
385      {{mi, r4, r2, r4}, true, mi, "mi r4 r2 r4", "mi_r4_r2_r4"},
386      {{mi, r4, r3, r4}, true, mi, "mi r4 r3 r4", "mi_r4_r3_r4"},
387      {{mi, r4, r4, r4}, true, mi, "mi r4 r4 r4", "mi_r4_r4_r4"},
388      {{mi, r4, r5, r4}, true, mi, "mi r4 r5 r4", "mi_r4_r5_r4"},
389      {{mi, r4, r6, r4}, true, mi, "mi r4 r6 r4", "mi_r4_r6_r4"},
390      {{mi, r4, r7, r4}, true, mi, "mi r4 r7 r4", "mi_r4_r7_r4"},
391      {{mi, r5, r0, r5}, true, mi, "mi r5 r0 r5", "mi_r5_r0_r5"},
392      {{mi, r5, r1, r5}, true, mi, "mi r5 r1 r5", "mi_r5_r1_r5"},
393      {{mi, r5, r2, r5}, true, mi, "mi r5 r2 r5", "mi_r5_r2_r5"},
394      {{mi, r5, r3, r5}, true, mi, "mi r5 r3 r5", "mi_r5_r3_r5"},
395      {{mi, r5, r4, r5}, true, mi, "mi r5 r4 r5", "mi_r5_r4_r5"},
396      {{mi, r5, r5, r5}, true, mi, "mi r5 r5 r5", "mi_r5_r5_r5"},
397      {{mi, r5, r6, r5}, true, mi, "mi r5 r6 r5", "mi_r5_r6_r5"},
398      {{mi, r5, r7, r5}, true, mi, "mi r5 r7 r5", "mi_r5_r7_r5"},
399      {{mi, r6, r0, r6}, true, mi, "mi r6 r0 r6", "mi_r6_r0_r6"},
400      {{mi, r6, r1, r6}, true, mi, "mi r6 r1 r6", "mi_r6_r1_r6"},
401      {{mi, r6, r2, r6}, true, mi, "mi r6 r2 r6", "mi_r6_r2_r6"},
402      {{mi, r6, r3, r6}, true, mi, "mi r6 r3 r6", "mi_r6_r3_r6"},
403      {{mi, r6, r4, r6}, true, mi, "mi r6 r4 r6", "mi_r6_r4_r6"},
404      {{mi, r6, r5, r6}, true, mi, "mi r6 r5 r6", "mi_r6_r5_r6"},
405      {{mi, r6, r6, r6}, true, mi, "mi r6 r6 r6", "mi_r6_r6_r6"},
406      {{mi, r6, r7, r6}, true, mi, "mi r6 r7 r6", "mi_r6_r7_r6"},
407      {{mi, r7, r0, r7}, true, mi, "mi r7 r0 r7", "mi_r7_r0_r7"},
408      {{mi, r7, r1, r7}, true, mi, "mi r7 r1 r7", "mi_r7_r1_r7"},
409      {{mi, r7, r2, r7}, true, mi, "mi r7 r2 r7", "mi_r7_r2_r7"},
410      {{mi, r7, r3, r7}, true, mi, "mi r7 r3 r7", "mi_r7_r3_r7"},
411      {{mi, r7, r4, r7}, true, mi, "mi r7 r4 r7", "mi_r7_r4_r7"},
412      {{mi, r7, r5, r7}, true, mi, "mi r7 r5 r7", "mi_r7_r5_r7"},
413      {{mi, r7, r6, r7}, true, mi, "mi r7 r6 r7", "mi_r7_r6_r7"},
414      {{mi, r7, r7, r7}, true, mi, "mi r7 r7 r7", "mi_r7_r7_r7"},
415      {{pl, r0, r0, r0}, true, pl, "pl r0 r0 r0", "pl_r0_r0_r0"},
416      {{pl, r0, r1, r0}, true, pl, "pl r0 r1 r0", "pl_r0_r1_r0"},
417      {{pl, r0, r2, r0}, true, pl, "pl r0 r2 r0", "pl_r0_r2_r0"},
418      {{pl, r0, r3, r0}, true, pl, "pl r0 r3 r0", "pl_r0_r3_r0"},
419      {{pl, r0, r4, r0}, true, pl, "pl r0 r4 r0", "pl_r0_r4_r0"},
420      {{pl, r0, r5, r0}, true, pl, "pl r0 r5 r0", "pl_r0_r5_r0"},
421      {{pl, r0, r6, r0}, true, pl, "pl r0 r6 r0", "pl_r0_r6_r0"},
422      {{pl, r0, r7, r0}, true, pl, "pl r0 r7 r0", "pl_r0_r7_r0"},
423      {{pl, r1, r0, r1}, true, pl, "pl r1 r0 r1", "pl_r1_r0_r1"},
424      {{pl, r1, r1, r1}, true, pl, "pl r1 r1 r1", "pl_r1_r1_r1"},
425      {{pl, r1, r2, r1}, true, pl, "pl r1 r2 r1", "pl_r1_r2_r1"},
426      {{pl, r1, r3, r1}, true, pl, "pl r1 r3 r1", "pl_r1_r3_r1"},
427      {{pl, r1, r4, r1}, true, pl, "pl r1 r4 r1", "pl_r1_r4_r1"},
428      {{pl, r1, r5, r1}, true, pl, "pl r1 r5 r1", "pl_r1_r5_r1"},
429      {{pl, r1, r6, r1}, true, pl, "pl r1 r6 r1", "pl_r1_r6_r1"},
430      {{pl, r1, r7, r1}, true, pl, "pl r1 r7 r1", "pl_r1_r7_r1"},
431      {{pl, r2, r0, r2}, true, pl, "pl r2 r0 r2", "pl_r2_r0_r2"},
432      {{pl, r2, r1, r2}, true, pl, "pl r2 r1 r2", "pl_r2_r1_r2"},
433      {{pl, r2, r2, r2}, true, pl, "pl r2 r2 r2", "pl_r2_r2_r2"},
434      {{pl, r2, r3, r2}, true, pl, "pl r2 r3 r2", "pl_r2_r3_r2"},
435      {{pl, r2, r4, r2}, true, pl, "pl r2 r4 r2", "pl_r2_r4_r2"},
436      {{pl, r2, r5, r2}, true, pl, "pl r2 r5 r2", "pl_r2_r5_r2"},
437      {{pl, r2, r6, r2}, true, pl, "pl r2 r6 r2", "pl_r2_r6_r2"},
438      {{pl, r2, r7, r2}, true, pl, "pl r2 r7 r2", "pl_r2_r7_r2"},
439      {{pl, r3, r0, r3}, true, pl, "pl r3 r0 r3", "pl_r3_r0_r3"},
440      {{pl, r3, r1, r3}, true, pl, "pl r3 r1 r3", "pl_r3_r1_r3"},
441      {{pl, r3, r2, r3}, true, pl, "pl r3 r2 r3", "pl_r3_r2_r3"},
442      {{pl, r3, r3, r3}, true, pl, "pl r3 r3 r3", "pl_r3_r3_r3"},
443      {{pl, r3, r4, r3}, true, pl, "pl r3 r4 r3", "pl_r3_r4_r3"},
444      {{pl, r3, r5, r3}, true, pl, "pl r3 r5 r3", "pl_r3_r5_r3"},
445      {{pl, r3, r6, r3}, true, pl, "pl r3 r6 r3", "pl_r3_r6_r3"},
446      {{pl, r3, r7, r3}, true, pl, "pl r3 r7 r3", "pl_r3_r7_r3"},
447      {{pl, r4, r0, r4}, true, pl, "pl r4 r0 r4", "pl_r4_r0_r4"},
448      {{pl, r4, r1, r4}, true, pl, "pl r4 r1 r4", "pl_r4_r1_r4"},
449      {{pl, r4, r2, r4}, true, pl, "pl r4 r2 r4", "pl_r4_r2_r4"},
450      {{pl, r4, r3, r4}, true, pl, "pl r4 r3 r4", "pl_r4_r3_r4"},
451      {{pl, r4, r4, r4}, true, pl, "pl r4 r4 r4", "pl_r4_r4_r4"},
452      {{pl, r4, r5, r4}, true, pl, "pl r4 r5 r4", "pl_r4_r5_r4"},
453      {{pl, r4, r6, r4}, true, pl, "pl r4 r6 r4", "pl_r4_r6_r4"},
454      {{pl, r4, r7, r4}, true, pl, "pl r4 r7 r4", "pl_r4_r7_r4"},
455      {{pl, r5, r0, r5}, true, pl, "pl r5 r0 r5", "pl_r5_r0_r5"},
456      {{pl, r5, r1, r5}, true, pl, "pl r5 r1 r5", "pl_r5_r1_r5"},
457      {{pl, r5, r2, r5}, true, pl, "pl r5 r2 r5", "pl_r5_r2_r5"},
458      {{pl, r5, r3, r5}, true, pl, "pl r5 r3 r5", "pl_r5_r3_r5"},
459      {{pl, r5, r4, r5}, true, pl, "pl r5 r4 r5", "pl_r5_r4_r5"},
460      {{pl, r5, r5, r5}, true, pl, "pl r5 r5 r5", "pl_r5_r5_r5"},
461      {{pl, r5, r6, r5}, true, pl, "pl r5 r6 r5", "pl_r5_r6_r5"},
462      {{pl, r5, r7, r5}, true, pl, "pl r5 r7 r5", "pl_r5_r7_r5"},
463      {{pl, r6, r0, r6}, true, pl, "pl r6 r0 r6", "pl_r6_r0_r6"},
464      {{pl, r6, r1, r6}, true, pl, "pl r6 r1 r6", "pl_r6_r1_r6"},
465      {{pl, r6, r2, r6}, true, pl, "pl r6 r2 r6", "pl_r6_r2_r6"},
466      {{pl, r6, r3, r6}, true, pl, "pl r6 r3 r6", "pl_r6_r3_r6"},
467      {{pl, r6, r4, r6}, true, pl, "pl r6 r4 r6", "pl_r6_r4_r6"},
468      {{pl, r6, r5, r6}, true, pl, "pl r6 r5 r6", "pl_r6_r5_r6"},
469      {{pl, r6, r6, r6}, true, pl, "pl r6 r6 r6", "pl_r6_r6_r6"},
470      {{pl, r6, r7, r6}, true, pl, "pl r6 r7 r6", "pl_r6_r7_r6"},
471      {{pl, r7, r0, r7}, true, pl, "pl r7 r0 r7", "pl_r7_r0_r7"},
472      {{pl, r7, r1, r7}, true, pl, "pl r7 r1 r7", "pl_r7_r1_r7"},
473      {{pl, r7, r2, r7}, true, pl, "pl r7 r2 r7", "pl_r7_r2_r7"},
474      {{pl, r7, r3, r7}, true, pl, "pl r7 r3 r7", "pl_r7_r3_r7"},
475      {{pl, r7, r4, r7}, true, pl, "pl r7 r4 r7", "pl_r7_r4_r7"},
476      {{pl, r7, r5, r7}, true, pl, "pl r7 r5 r7", "pl_r7_r5_r7"},
477      {{pl, r7, r6, r7}, true, pl, "pl r7 r6 r7", "pl_r7_r6_r7"},
478      {{pl, r7, r7, r7}, true, pl, "pl r7 r7 r7", "pl_r7_r7_r7"},
479      {{vs, r0, r0, r0}, true, vs, "vs r0 r0 r0", "vs_r0_r0_r0"},
480      {{vs, r0, r1, r0}, true, vs, "vs r0 r1 r0", "vs_r0_r1_r0"},
481      {{vs, r0, r2, r0}, true, vs, "vs r0 r2 r0", "vs_r0_r2_r0"},
482      {{vs, r0, r3, r0}, true, vs, "vs r0 r3 r0", "vs_r0_r3_r0"},
483      {{vs, r0, r4, r0}, true, vs, "vs r0 r4 r0", "vs_r0_r4_r0"},
484      {{vs, r0, r5, r0}, true, vs, "vs r0 r5 r0", "vs_r0_r5_r0"},
485      {{vs, r0, r6, r0}, true, vs, "vs r0 r6 r0", "vs_r0_r6_r0"},
486      {{vs, r0, r7, r0}, true, vs, "vs r0 r7 r0", "vs_r0_r7_r0"},
487      {{vs, r1, r0, r1}, true, vs, "vs r1 r0 r1", "vs_r1_r0_r1"},
488      {{vs, r1, r1, r1}, true, vs, "vs r1 r1 r1", "vs_r1_r1_r1"},
489      {{vs, r1, r2, r1}, true, vs, "vs r1 r2 r1", "vs_r1_r2_r1"},
490      {{vs, r1, r3, r1}, true, vs, "vs r1 r3 r1", "vs_r1_r3_r1"},
491      {{vs, r1, r4, r1}, true, vs, "vs r1 r4 r1", "vs_r1_r4_r1"},
492      {{vs, r1, r5, r1}, true, vs, "vs r1 r5 r1", "vs_r1_r5_r1"},
493      {{vs, r1, r6, r1}, true, vs, "vs r1 r6 r1", "vs_r1_r6_r1"},
494      {{vs, r1, r7, r1}, true, vs, "vs r1 r7 r1", "vs_r1_r7_r1"},
495      {{vs, r2, r0, r2}, true, vs, "vs r2 r0 r2", "vs_r2_r0_r2"},
496      {{vs, r2, r1, r2}, true, vs, "vs r2 r1 r2", "vs_r2_r1_r2"},
497      {{vs, r2, r2, r2}, true, vs, "vs r2 r2 r2", "vs_r2_r2_r2"},
498      {{vs, r2, r3, r2}, true, vs, "vs r2 r3 r2", "vs_r2_r3_r2"},
499      {{vs, r2, r4, r2}, true, vs, "vs r2 r4 r2", "vs_r2_r4_r2"},
500      {{vs, r2, r5, r2}, true, vs, "vs r2 r5 r2", "vs_r2_r5_r2"},
501      {{vs, r2, r6, r2}, true, vs, "vs r2 r6 r2", "vs_r2_r6_r2"},
502      {{vs, r2, r7, r2}, true, vs, "vs r2 r7 r2", "vs_r2_r7_r2"},
503      {{vs, r3, r0, r3}, true, vs, "vs r3 r0 r3", "vs_r3_r0_r3"},
504      {{vs, r3, r1, r3}, true, vs, "vs r3 r1 r3", "vs_r3_r1_r3"},
505      {{vs, r3, r2, r3}, true, vs, "vs r3 r2 r3", "vs_r3_r2_r3"},
506      {{vs, r3, r3, r3}, true, vs, "vs r3 r3 r3", "vs_r3_r3_r3"},
507      {{vs, r3, r4, r3}, true, vs, "vs r3 r4 r3", "vs_r3_r4_r3"},
508      {{vs, r3, r5, r3}, true, vs, "vs r3 r5 r3", "vs_r3_r5_r3"},
509      {{vs, r3, r6, r3}, true, vs, "vs r3 r6 r3", "vs_r3_r6_r3"},
510      {{vs, r3, r7, r3}, true, vs, "vs r3 r7 r3", "vs_r3_r7_r3"},
511      {{vs, r4, r0, r4}, true, vs, "vs r4 r0 r4", "vs_r4_r0_r4"},
512      {{vs, r4, r1, r4}, true, vs, "vs r4 r1 r4", "vs_r4_r1_r4"},
513      {{vs, r4, r2, r4}, true, vs, "vs r4 r2 r4", "vs_r4_r2_r4"},
514      {{vs, r4, r3, r4}, true, vs, "vs r4 r3 r4", "vs_r4_r3_r4"},
515      {{vs, r4, r4, r4}, true, vs, "vs r4 r4 r4", "vs_r4_r4_r4"},
516      {{vs, r4, r5, r4}, true, vs, "vs r4 r5 r4", "vs_r4_r5_r4"},
517      {{vs, r4, r6, r4}, true, vs, "vs r4 r6 r4", "vs_r4_r6_r4"},
518      {{vs, r4, r7, r4}, true, vs, "vs r4 r7 r4", "vs_r4_r7_r4"},
519      {{vs, r5, r0, r5}, true, vs, "vs r5 r0 r5", "vs_r5_r0_r5"},
520      {{vs, r5, r1, r5}, true, vs, "vs r5 r1 r5", "vs_r5_r1_r5"},
521      {{vs, r5, r2, r5}, true, vs, "vs r5 r2 r5", "vs_r5_r2_r5"},
522      {{vs, r5, r3, r5}, true, vs, "vs r5 r3 r5", "vs_r5_r3_r5"},
523      {{vs, r5, r4, r5}, true, vs, "vs r5 r4 r5", "vs_r5_r4_r5"},
524      {{vs, r5, r5, r5}, true, vs, "vs r5 r5 r5", "vs_r5_r5_r5"},
525      {{vs, r5, r6, r5}, true, vs, "vs r5 r6 r5", "vs_r5_r6_r5"},
526      {{vs, r5, r7, r5}, true, vs, "vs r5 r7 r5", "vs_r5_r7_r5"},
527      {{vs, r6, r0, r6}, true, vs, "vs r6 r0 r6", "vs_r6_r0_r6"},
528      {{vs, r6, r1, r6}, true, vs, "vs r6 r1 r6", "vs_r6_r1_r6"},
529      {{vs, r6, r2, r6}, true, vs, "vs r6 r2 r6", "vs_r6_r2_r6"},
530      {{vs, r6, r3, r6}, true, vs, "vs r6 r3 r6", "vs_r6_r3_r6"},
531      {{vs, r6, r4, r6}, true, vs, "vs r6 r4 r6", "vs_r6_r4_r6"},
532      {{vs, r6, r5, r6}, true, vs, "vs r6 r5 r6", "vs_r6_r5_r6"},
533      {{vs, r6, r6, r6}, true, vs, "vs r6 r6 r6", "vs_r6_r6_r6"},
534      {{vs, r6, r7, r6}, true, vs, "vs r6 r7 r6", "vs_r6_r7_r6"},
535      {{vs, r7, r0, r7}, true, vs, "vs r7 r0 r7", "vs_r7_r0_r7"},
536      {{vs, r7, r1, r7}, true, vs, "vs r7 r1 r7", "vs_r7_r1_r7"},
537      {{vs, r7, r2, r7}, true, vs, "vs r7 r2 r7", "vs_r7_r2_r7"},
538      {{vs, r7, r3, r7}, true, vs, "vs r7 r3 r7", "vs_r7_r3_r7"},
539      {{vs, r7, r4, r7}, true, vs, "vs r7 r4 r7", "vs_r7_r4_r7"},
540      {{vs, r7, r5, r7}, true, vs, "vs r7 r5 r7", "vs_r7_r5_r7"},
541      {{vs, r7, r6, r7}, true, vs, "vs r7 r6 r7", "vs_r7_r6_r7"},
542      {{vs, r7, r7, r7}, true, vs, "vs r7 r7 r7", "vs_r7_r7_r7"},
543      {{vc, r0, r0, r0}, true, vc, "vc r0 r0 r0", "vc_r0_r0_r0"},
544      {{vc, r0, r1, r0}, true, vc, "vc r0 r1 r0", "vc_r0_r1_r0"},
545      {{vc, r0, r2, r0}, true, vc, "vc r0 r2 r0", "vc_r0_r2_r0"},
546      {{vc, r0, r3, r0}, true, vc, "vc r0 r3 r0", "vc_r0_r3_r0"},
547      {{vc, r0, r4, r0}, true, vc, "vc r0 r4 r0", "vc_r0_r4_r0"},
548      {{vc, r0, r5, r0}, true, vc, "vc r0 r5 r0", "vc_r0_r5_r0"},
549      {{vc, r0, r6, r0}, true, vc, "vc r0 r6 r0", "vc_r0_r6_r0"},
550      {{vc, r0, r7, r0}, true, vc, "vc r0 r7 r0", "vc_r0_r7_r0"},
551      {{vc, r1, r0, r1}, true, vc, "vc r1 r0 r1", "vc_r1_r0_r1"},
552      {{vc, r1, r1, r1}, true, vc, "vc r1 r1 r1", "vc_r1_r1_r1"},
553      {{vc, r1, r2, r1}, true, vc, "vc r1 r2 r1", "vc_r1_r2_r1"},
554      {{vc, r1, r3, r1}, true, vc, "vc r1 r3 r1", "vc_r1_r3_r1"},
555      {{vc, r1, r4, r1}, true, vc, "vc r1 r4 r1", "vc_r1_r4_r1"},
556      {{vc, r1, r5, r1}, true, vc, "vc r1 r5 r1", "vc_r1_r5_r1"},
557      {{vc, r1, r6, r1}, true, vc, "vc r1 r6 r1", "vc_r1_r6_r1"},
558      {{vc, r1, r7, r1}, true, vc, "vc r1 r7 r1", "vc_r1_r7_r1"},
559      {{vc, r2, r0, r2}, true, vc, "vc r2 r0 r2", "vc_r2_r0_r2"},
560      {{vc, r2, r1, r2}, true, vc, "vc r2 r1 r2", "vc_r2_r1_r2"},
561      {{vc, r2, r2, r2}, true, vc, "vc r2 r2 r2", "vc_r2_r2_r2"},
562      {{vc, r2, r3, r2}, true, vc, "vc r2 r3 r2", "vc_r2_r3_r2"},
563      {{vc, r2, r4, r2}, true, vc, "vc r2 r4 r2", "vc_r2_r4_r2"},
564      {{vc, r2, r5, r2}, true, vc, "vc r2 r5 r2", "vc_r2_r5_r2"},
565      {{vc, r2, r6, r2}, true, vc, "vc r2 r6 r2", "vc_r2_r6_r2"},
566      {{vc, r2, r7, r2}, true, vc, "vc r2 r7 r2", "vc_r2_r7_r2"},
567      {{vc, r3, r0, r3}, true, vc, "vc r3 r0 r3", "vc_r3_r0_r3"},
568      {{vc, r3, r1, r3}, true, vc, "vc r3 r1 r3", "vc_r3_r1_r3"},
569      {{vc, r3, r2, r3}, true, vc, "vc r3 r2 r3", "vc_r3_r2_r3"},
570      {{vc, r3, r3, r3}, true, vc, "vc r3 r3 r3", "vc_r3_r3_r3"},
571      {{vc, r3, r4, r3}, true, vc, "vc r3 r4 r3", "vc_r3_r4_r3"},
572      {{vc, r3, r5, r3}, true, vc, "vc r3 r5 r3", "vc_r3_r5_r3"},
573      {{vc, r3, r6, r3}, true, vc, "vc r3 r6 r3", "vc_r3_r6_r3"},
574      {{vc, r3, r7, r3}, true, vc, "vc r3 r7 r3", "vc_r3_r7_r3"},
575      {{vc, r4, r0, r4}, true, vc, "vc r4 r0 r4", "vc_r4_r0_r4"},
576      {{vc, r4, r1, r4}, true, vc, "vc r4 r1 r4", "vc_r4_r1_r4"},
577      {{vc, r4, r2, r4}, true, vc, "vc r4 r2 r4", "vc_r4_r2_r4"},
578      {{vc, r4, r3, r4}, true, vc, "vc r4 r3 r4", "vc_r4_r3_r4"},
579      {{vc, r4, r4, r4}, true, vc, "vc r4 r4 r4", "vc_r4_r4_r4"},
580      {{vc, r4, r5, r4}, true, vc, "vc r4 r5 r4", "vc_r4_r5_r4"},
581      {{vc, r4, r6, r4}, true, vc, "vc r4 r6 r4", "vc_r4_r6_r4"},
582      {{vc, r4, r7, r4}, true, vc, "vc r4 r7 r4", "vc_r4_r7_r4"},
583      {{vc, r5, r0, r5}, true, vc, "vc r5 r0 r5", "vc_r5_r0_r5"},
584      {{vc, r5, r1, r5}, true, vc, "vc r5 r1 r5", "vc_r5_r1_r5"},
585      {{vc, r5, r2, r5}, true, vc, "vc r5 r2 r5", "vc_r5_r2_r5"},
586      {{vc, r5, r3, r5}, true, vc, "vc r5 r3 r5", "vc_r5_r3_r5"},
587      {{vc, r5, r4, r5}, true, vc, "vc r5 r4 r5", "vc_r5_r4_r5"},
588      {{vc, r5, r5, r5}, true, vc, "vc r5 r5 r5", "vc_r5_r5_r5"},
589      {{vc, r5, r6, r5}, true, vc, "vc r5 r6 r5", "vc_r5_r6_r5"},
590      {{vc, r5, r7, r5}, true, vc, "vc r5 r7 r5", "vc_r5_r7_r5"},
591      {{vc, r6, r0, r6}, true, vc, "vc r6 r0 r6", "vc_r6_r0_r6"},
592      {{vc, r6, r1, r6}, true, vc, "vc r6 r1 r6", "vc_r6_r1_r6"},
593      {{vc, r6, r2, r6}, true, vc, "vc r6 r2 r6", "vc_r6_r2_r6"},
594      {{vc, r6, r3, r6}, true, vc, "vc r6 r3 r6", "vc_r6_r3_r6"},
595      {{vc, r6, r4, r6}, true, vc, "vc r6 r4 r6", "vc_r6_r4_r6"},
596      {{vc, r6, r5, r6}, true, vc, "vc r6 r5 r6", "vc_r6_r5_r6"},
597      {{vc, r6, r6, r6}, true, vc, "vc r6 r6 r6", "vc_r6_r6_r6"},
598      {{vc, r6, r7, r6}, true, vc, "vc r6 r7 r6", "vc_r6_r7_r6"},
599      {{vc, r7, r0, r7}, true, vc, "vc r7 r0 r7", "vc_r7_r0_r7"},
600      {{vc, r7, r1, r7}, true, vc, "vc r7 r1 r7", "vc_r7_r1_r7"},
601      {{vc, r7, r2, r7}, true, vc, "vc r7 r2 r7", "vc_r7_r2_r7"},
602      {{vc, r7, r3, r7}, true, vc, "vc r7 r3 r7", "vc_r7_r3_r7"},
603      {{vc, r7, r4, r7}, true, vc, "vc r7 r4 r7", "vc_r7_r4_r7"},
604      {{vc, r7, r5, r7}, true, vc, "vc r7 r5 r7", "vc_r7_r5_r7"},
605      {{vc, r7, r6, r7}, true, vc, "vc r7 r6 r7", "vc_r7_r6_r7"},
606      {{vc, r7, r7, r7}, true, vc, "vc r7 r7 r7", "vc_r7_r7_r7"},
607      {{hi, r0, r0, r0}, true, hi, "hi r0 r0 r0", "hi_r0_r0_r0"},
608      {{hi, r0, r1, r0}, true, hi, "hi r0 r1 r0", "hi_r0_r1_r0"},
609      {{hi, r0, r2, r0}, true, hi, "hi r0 r2 r0", "hi_r0_r2_r0"},
610      {{hi, r0, r3, r0}, true, hi, "hi r0 r3 r0", "hi_r0_r3_r0"},
611      {{hi, r0, r4, r0}, true, hi, "hi r0 r4 r0", "hi_r0_r4_r0"},
612      {{hi, r0, r5, r0}, true, hi, "hi r0 r5 r0", "hi_r0_r5_r0"},
613      {{hi, r0, r6, r0}, true, hi, "hi r0 r6 r0", "hi_r0_r6_r0"},
614      {{hi, r0, r7, r0}, true, hi, "hi r0 r7 r0", "hi_r0_r7_r0"},
615      {{hi, r1, r0, r1}, true, hi, "hi r1 r0 r1", "hi_r1_r0_r1"},
616      {{hi, r1, r1, r1}, true, hi, "hi r1 r1 r1", "hi_r1_r1_r1"},
617      {{hi, r1, r2, r1}, true, hi, "hi r1 r2 r1", "hi_r1_r2_r1"},
618      {{hi, r1, r3, r1}, true, hi, "hi r1 r3 r1", "hi_r1_r3_r1"},
619      {{hi, r1, r4, r1}, true, hi, "hi r1 r4 r1", "hi_r1_r4_r1"},
620      {{hi, r1, r5, r1}, true, hi, "hi r1 r5 r1", "hi_r1_r5_r1"},
621      {{hi, r1, r6, r1}, true, hi, "hi r1 r6 r1", "hi_r1_r6_r1"},
622      {{hi, r1, r7, r1}, true, hi, "hi r1 r7 r1", "hi_r1_r7_r1"},
623      {{hi, r2, r0, r2}, true, hi, "hi r2 r0 r2", "hi_r2_r0_r2"},
624      {{hi, r2, r1, r2}, true, hi, "hi r2 r1 r2", "hi_r2_r1_r2"},
625      {{hi, r2, r2, r2}, true, hi, "hi r2 r2 r2", "hi_r2_r2_r2"},
626      {{hi, r2, r3, r2}, true, hi, "hi r2 r3 r2", "hi_r2_r3_r2"},
627      {{hi, r2, r4, r2}, true, hi, "hi r2 r4 r2", "hi_r2_r4_r2"},
628      {{hi, r2, r5, r2}, true, hi, "hi r2 r5 r2", "hi_r2_r5_r2"},
629      {{hi, r2, r6, r2}, true, hi, "hi r2 r6 r2", "hi_r2_r6_r2"},
630      {{hi, r2, r7, r2}, true, hi, "hi r2 r7 r2", "hi_r2_r7_r2"},
631      {{hi, r3, r0, r3}, true, hi, "hi r3 r0 r3", "hi_r3_r0_r3"},
632      {{hi, r3, r1, r3}, true, hi, "hi r3 r1 r3", "hi_r3_r1_r3"},
633      {{hi, r3, r2, r3}, true, hi, "hi r3 r2 r3", "hi_r3_r2_r3"},
634      {{hi, r3, r3, r3}, true, hi, "hi r3 r3 r3", "hi_r3_r3_r3"},
635      {{hi, r3, r4, r3}, true, hi, "hi r3 r4 r3", "hi_r3_r4_r3"},
636      {{hi, r3, r5, r3}, true, hi, "hi r3 r5 r3", "hi_r3_r5_r3"},
637      {{hi, r3, r6, r3}, true, hi, "hi r3 r6 r3", "hi_r3_r6_r3"},
638      {{hi, r3, r7, r3}, true, hi, "hi r3 r7 r3", "hi_r3_r7_r3"},
639      {{hi, r4, r0, r4}, true, hi, "hi r4 r0 r4", "hi_r4_r0_r4"},
640      {{hi, r4, r1, r4}, true, hi, "hi r4 r1 r4", "hi_r4_r1_r4"},
641      {{hi, r4, r2, r4}, true, hi, "hi r4 r2 r4", "hi_r4_r2_r4"},
642      {{hi, r4, r3, r4}, true, hi, "hi r4 r3 r4", "hi_r4_r3_r4"},
643      {{hi, r4, r4, r4}, true, hi, "hi r4 r4 r4", "hi_r4_r4_r4"},
644      {{hi, r4, r5, r4}, true, hi, "hi r4 r5 r4", "hi_r4_r5_r4"},
645      {{hi, r4, r6, r4}, true, hi, "hi r4 r6 r4", "hi_r4_r6_r4"},
646      {{hi, r4, r7, r4}, true, hi, "hi r4 r7 r4", "hi_r4_r7_r4"},
647      {{hi, r5, r0, r5}, true, hi, "hi r5 r0 r5", "hi_r5_r0_r5"},
648      {{hi, r5, r1, r5}, true, hi, "hi r5 r1 r5", "hi_r5_r1_r5"},
649      {{hi, r5, r2, r5}, true, hi, "hi r5 r2 r5", "hi_r5_r2_r5"},
650      {{hi, r5, r3, r5}, true, hi, "hi r5 r3 r5", "hi_r5_r3_r5"},
651      {{hi, r5, r4, r5}, true, hi, "hi r5 r4 r5", "hi_r5_r4_r5"},
652      {{hi, r5, r5, r5}, true, hi, "hi r5 r5 r5", "hi_r5_r5_r5"},
653      {{hi, r5, r6, r5}, true, hi, "hi r5 r6 r5", "hi_r5_r6_r5"},
654      {{hi, r5, r7, r5}, true, hi, "hi r5 r7 r5", "hi_r5_r7_r5"},
655      {{hi, r6, r0, r6}, true, hi, "hi r6 r0 r6", "hi_r6_r0_r6"},
656      {{hi, r6, r1, r6}, true, hi, "hi r6 r1 r6", "hi_r6_r1_r6"},
657      {{hi, r6, r2, r6}, true, hi, "hi r6 r2 r6", "hi_r6_r2_r6"},
658      {{hi, r6, r3, r6}, true, hi, "hi r6 r3 r6", "hi_r6_r3_r6"},
659      {{hi, r6, r4, r6}, true, hi, "hi r6 r4 r6", "hi_r6_r4_r6"},
660      {{hi, r6, r5, r6}, true, hi, "hi r6 r5 r6", "hi_r6_r5_r6"},
661      {{hi, r6, r6, r6}, true, hi, "hi r6 r6 r6", "hi_r6_r6_r6"},
662      {{hi, r6, r7, r6}, true, hi, "hi r6 r7 r6", "hi_r6_r7_r6"},
663      {{hi, r7, r0, r7}, true, hi, "hi r7 r0 r7", "hi_r7_r0_r7"},
664      {{hi, r7, r1, r7}, true, hi, "hi r7 r1 r7", "hi_r7_r1_r7"},
665      {{hi, r7, r2, r7}, true, hi, "hi r7 r2 r7", "hi_r7_r2_r7"},
666      {{hi, r7, r3, r7}, true, hi, "hi r7 r3 r7", "hi_r7_r3_r7"},
667      {{hi, r7, r4, r7}, true, hi, "hi r7 r4 r7", "hi_r7_r4_r7"},
668      {{hi, r7, r5, r7}, true, hi, "hi r7 r5 r7", "hi_r7_r5_r7"},
669      {{hi, r7, r6, r7}, true, hi, "hi r7 r6 r7", "hi_r7_r6_r7"},
670      {{hi, r7, r7, r7}, true, hi, "hi r7 r7 r7", "hi_r7_r7_r7"},
671      {{ls, r0, r0, r0}, true, ls, "ls r0 r0 r0", "ls_r0_r0_r0"},
672      {{ls, r0, r1, r0}, true, ls, "ls r0 r1 r0", "ls_r0_r1_r0"},
673      {{ls, r0, r2, r0}, true, ls, "ls r0 r2 r0", "ls_r0_r2_r0"},
674      {{ls, r0, r3, r0}, true, ls, "ls r0 r3 r0", "ls_r0_r3_r0"},
675      {{ls, r0, r4, r0}, true, ls, "ls r0 r4 r0", "ls_r0_r4_r0"},
676      {{ls, r0, r5, r0}, true, ls, "ls r0 r5 r0", "ls_r0_r5_r0"},
677      {{ls, r0, r6, r0}, true, ls, "ls r0 r6 r0", "ls_r0_r6_r0"},
678      {{ls, r0, r7, r0}, true, ls, "ls r0 r7 r0", "ls_r0_r7_r0"},
679      {{ls, r1, r0, r1}, true, ls, "ls r1 r0 r1", "ls_r1_r0_r1"},
680      {{ls, r1, r1, r1}, true, ls, "ls r1 r1 r1", "ls_r1_r1_r1"},
681      {{ls, r1, r2, r1}, true, ls, "ls r1 r2 r1", "ls_r1_r2_r1"},
682      {{ls, r1, r3, r1}, true, ls, "ls r1 r3 r1", "ls_r1_r3_r1"},
683      {{ls, r1, r4, r1}, true, ls, "ls r1 r4 r1", "ls_r1_r4_r1"},
684      {{ls, r1, r5, r1}, true, ls, "ls r1 r5 r1", "ls_r1_r5_r1"},
685      {{ls, r1, r6, r1}, true, ls, "ls r1 r6 r1", "ls_r1_r6_r1"},
686      {{ls, r1, r7, r1}, true, ls, "ls r1 r7 r1", "ls_r1_r7_r1"},
687      {{ls, r2, r0, r2}, true, ls, "ls r2 r0 r2", "ls_r2_r0_r2"},
688      {{ls, r2, r1, r2}, true, ls, "ls r2 r1 r2", "ls_r2_r1_r2"},
689      {{ls, r2, r2, r2}, true, ls, "ls r2 r2 r2", "ls_r2_r2_r2"},
690      {{ls, r2, r3, r2}, true, ls, "ls r2 r3 r2", "ls_r2_r3_r2"},
691      {{ls, r2, r4, r2}, true, ls, "ls r2 r4 r2", "ls_r2_r4_r2"},
692      {{ls, r2, r5, r2}, true, ls, "ls r2 r5 r2", "ls_r2_r5_r2"},
693      {{ls, r2, r6, r2}, true, ls, "ls r2 r6 r2", "ls_r2_r6_r2"},
694      {{ls, r2, r7, r2}, true, ls, "ls r2 r7 r2", "ls_r2_r7_r2"},
695      {{ls, r3, r0, r3}, true, ls, "ls r3 r0 r3", "ls_r3_r0_r3"},
696      {{ls, r3, r1, r3}, true, ls, "ls r3 r1 r3", "ls_r3_r1_r3"},
697      {{ls, r3, r2, r3}, true, ls, "ls r3 r2 r3", "ls_r3_r2_r3"},
698      {{ls, r3, r3, r3}, true, ls, "ls r3 r3 r3", "ls_r3_r3_r3"},
699      {{ls, r3, r4, r3}, true, ls, "ls r3 r4 r3", "ls_r3_r4_r3"},
700      {{ls, r3, r5, r3}, true, ls, "ls r3 r5 r3", "ls_r3_r5_r3"},
701      {{ls, r3, r6, r3}, true, ls, "ls r3 r6 r3", "ls_r3_r6_r3"},
702      {{ls, r3, r7, r3}, true, ls, "ls r3 r7 r3", "ls_r3_r7_r3"},
703      {{ls, r4, r0, r4}, true, ls, "ls r4 r0 r4", "ls_r4_r0_r4"},
704      {{ls, r4, r1, r4}, true, ls, "ls r4 r1 r4", "ls_r4_r1_r4"},
705      {{ls, r4, r2, r4}, true, ls, "ls r4 r2 r4", "ls_r4_r2_r4"},
706      {{ls, r4, r3, r4}, true, ls, "ls r4 r3 r4", "ls_r4_r3_r4"},
707      {{ls, r4, r4, r4}, true, ls, "ls r4 r4 r4", "ls_r4_r4_r4"},
708      {{ls, r4, r5, r4}, true, ls, "ls r4 r5 r4", "ls_r4_r5_r4"},
709      {{ls, r4, r6, r4}, true, ls, "ls r4 r6 r4", "ls_r4_r6_r4"},
710      {{ls, r4, r7, r4}, true, ls, "ls r4 r7 r4", "ls_r4_r7_r4"},
711      {{ls, r5, r0, r5}, true, ls, "ls r5 r0 r5", "ls_r5_r0_r5"},
712      {{ls, r5, r1, r5}, true, ls, "ls r5 r1 r5", "ls_r5_r1_r5"},
713      {{ls, r5, r2, r5}, true, ls, "ls r5 r2 r5", "ls_r5_r2_r5"},
714      {{ls, r5, r3, r5}, true, ls, "ls r5 r3 r5", "ls_r5_r3_r5"},
715      {{ls, r5, r4, r5}, true, ls, "ls r5 r4 r5", "ls_r5_r4_r5"},
716      {{ls, r5, r5, r5}, true, ls, "ls r5 r5 r5", "ls_r5_r5_r5"},
717      {{ls, r5, r6, r5}, true, ls, "ls r5 r6 r5", "ls_r5_r6_r5"},
718      {{ls, r5, r7, r5}, true, ls, "ls r5 r7 r5", "ls_r5_r7_r5"},
719      {{ls, r6, r0, r6}, true, ls, "ls r6 r0 r6", "ls_r6_r0_r6"},
720      {{ls, r6, r1, r6}, true, ls, "ls r6 r1 r6", "ls_r6_r1_r6"},
721      {{ls, r6, r2, r6}, true, ls, "ls r6 r2 r6", "ls_r6_r2_r6"},
722      {{ls, r6, r3, r6}, true, ls, "ls r6 r3 r6", "ls_r6_r3_r6"},
723      {{ls, r6, r4, r6}, true, ls, "ls r6 r4 r6", "ls_r6_r4_r6"},
724      {{ls, r6, r5, r6}, true, ls, "ls r6 r5 r6", "ls_r6_r5_r6"},
725      {{ls, r6, r6, r6}, true, ls, "ls r6 r6 r6", "ls_r6_r6_r6"},
726      {{ls, r6, r7, r6}, true, ls, "ls r6 r7 r6", "ls_r6_r7_r6"},
727      {{ls, r7, r0, r7}, true, ls, "ls r7 r0 r7", "ls_r7_r0_r7"},
728      {{ls, r7, r1, r7}, true, ls, "ls r7 r1 r7", "ls_r7_r1_r7"},
729      {{ls, r7, r2, r7}, true, ls, "ls r7 r2 r7", "ls_r7_r2_r7"},
730      {{ls, r7, r3, r7}, true, ls, "ls r7 r3 r7", "ls_r7_r3_r7"},
731      {{ls, r7, r4, r7}, true, ls, "ls r7 r4 r7", "ls_r7_r4_r7"},
732      {{ls, r7, r5, r7}, true, ls, "ls r7 r5 r7", "ls_r7_r5_r7"},
733      {{ls, r7, r6, r7}, true, ls, "ls r7 r6 r7", "ls_r7_r6_r7"},
734      {{ls, r7, r7, r7}, true, ls, "ls r7 r7 r7", "ls_r7_r7_r7"},
735      {{ge, r0, r0, r0}, true, ge, "ge r0 r0 r0", "ge_r0_r0_r0"},
736      {{ge, r0, r1, r0}, true, ge, "ge r0 r1 r0", "ge_r0_r1_r0"},
737      {{ge, r0, r2, r0}, true, ge, "ge r0 r2 r0", "ge_r0_r2_r0"},
738      {{ge, r0, r3, r0}, true, ge, "ge r0 r3 r0", "ge_r0_r3_r0"},
739      {{ge, r0, r4, r0}, true, ge, "ge r0 r4 r0", "ge_r0_r4_r0"},
740      {{ge, r0, r5, r0}, true, ge, "ge r0 r5 r0", "ge_r0_r5_r0"},
741      {{ge, r0, r6, r0}, true, ge, "ge r0 r6 r0", "ge_r0_r6_r0"},
742      {{ge, r0, r7, r0}, true, ge, "ge r0 r7 r0", "ge_r0_r7_r0"},
743      {{ge, r1, r0, r1}, true, ge, "ge r1 r0 r1", "ge_r1_r0_r1"},
744      {{ge, r1, r1, r1}, true, ge, "ge r1 r1 r1", "ge_r1_r1_r1"},
745      {{ge, r1, r2, r1}, true, ge, "ge r1 r2 r1", "ge_r1_r2_r1"},
746      {{ge, r1, r3, r1}, true, ge, "ge r1 r3 r1", "ge_r1_r3_r1"},
747      {{ge, r1, r4, r1}, true, ge, "ge r1 r4 r1", "ge_r1_r4_r1"},
748      {{ge, r1, r5, r1}, true, ge, "ge r1 r5 r1", "ge_r1_r5_r1"},
749      {{ge, r1, r6, r1}, true, ge, "ge r1 r6 r1", "ge_r1_r6_r1"},
750      {{ge, r1, r7, r1}, true, ge, "ge r1 r7 r1", "ge_r1_r7_r1"},
751      {{ge, r2, r0, r2}, true, ge, "ge r2 r0 r2", "ge_r2_r0_r2"},
752      {{ge, r2, r1, r2}, true, ge, "ge r2 r1 r2", "ge_r2_r1_r2"},
753      {{ge, r2, r2, r2}, true, ge, "ge r2 r2 r2", "ge_r2_r2_r2"},
754      {{ge, r2, r3, r2}, true, ge, "ge r2 r3 r2", "ge_r2_r3_r2"},
755      {{ge, r2, r4, r2}, true, ge, "ge r2 r4 r2", "ge_r2_r4_r2"},
756      {{ge, r2, r5, r2}, true, ge, "ge r2 r5 r2", "ge_r2_r5_r2"},
757      {{ge, r2, r6, r2}, true, ge, "ge r2 r6 r2", "ge_r2_r6_r2"},
758      {{ge, r2, r7, r2}, true, ge, "ge r2 r7 r2", "ge_r2_r7_r2"},
759      {{ge, r3, r0, r3}, true, ge, "ge r3 r0 r3", "ge_r3_r0_r3"},
760      {{ge, r3, r1, r3}, true, ge, "ge r3 r1 r3", "ge_r3_r1_r3"},
761      {{ge, r3, r2, r3}, true, ge, "ge r3 r2 r3", "ge_r3_r2_r3"},
762      {{ge, r3, r3, r3}, true, ge, "ge r3 r3 r3", "ge_r3_r3_r3"},
763      {{ge, r3, r4, r3}, true, ge, "ge r3 r4 r3", "ge_r3_r4_r3"},
764      {{ge, r3, r5, r3}, true, ge, "ge r3 r5 r3", "ge_r3_r5_r3"},
765      {{ge, r3, r6, r3}, true, ge, "ge r3 r6 r3", "ge_r3_r6_r3"},
766      {{ge, r3, r7, r3}, true, ge, "ge r3 r7 r3", "ge_r3_r7_r3"},
767      {{ge, r4, r0, r4}, true, ge, "ge r4 r0 r4", "ge_r4_r0_r4"},
768      {{ge, r4, r1, r4}, true, ge, "ge r4 r1 r4", "ge_r4_r1_r4"},
769      {{ge, r4, r2, r4}, true, ge, "ge r4 r2 r4", "ge_r4_r2_r4"},
770      {{ge, r4, r3, r4}, true, ge, "ge r4 r3 r4", "ge_r4_r3_r4"},
771      {{ge, r4, r4, r4}, true, ge, "ge r4 r4 r4", "ge_r4_r4_r4"},
772      {{ge, r4, r5, r4}, true, ge, "ge r4 r5 r4", "ge_r4_r5_r4"},
773      {{ge, r4, r6, r4}, true, ge, "ge r4 r6 r4", "ge_r4_r6_r4"},
774      {{ge, r4, r7, r4}, true, ge, "ge r4 r7 r4", "ge_r4_r7_r4"},
775      {{ge, r5, r0, r5}, true, ge, "ge r5 r0 r5", "ge_r5_r0_r5"},
776      {{ge, r5, r1, r5}, true, ge, "ge r5 r1 r5", "ge_r5_r1_r5"},
777      {{ge, r5, r2, r5}, true, ge, "ge r5 r2 r5", "ge_r5_r2_r5"},
778      {{ge, r5, r3, r5}, true, ge, "ge r5 r3 r5", "ge_r5_r3_r5"},
779      {{ge, r5, r4, r5}, true, ge, "ge r5 r4 r5", "ge_r5_r4_r5"},
780      {{ge, r5, r5, r5}, true, ge, "ge r5 r5 r5", "ge_r5_r5_r5"},
781      {{ge, r5, r6, r5}, true, ge, "ge r5 r6 r5", "ge_r5_r6_r5"},
782      {{ge, r5, r7, r5}, true, ge, "ge r5 r7 r5", "ge_r5_r7_r5"},
783      {{ge, r6, r0, r6}, true, ge, "ge r6 r0 r6", "ge_r6_r0_r6"},
784      {{ge, r6, r1, r6}, true, ge, "ge r6 r1 r6", "ge_r6_r1_r6"},
785      {{ge, r6, r2, r6}, true, ge, "ge r6 r2 r6", "ge_r6_r2_r6"},
786      {{ge, r6, r3, r6}, true, ge, "ge r6 r3 r6", "ge_r6_r3_r6"},
787      {{ge, r6, r4, r6}, true, ge, "ge r6 r4 r6", "ge_r6_r4_r6"},
788      {{ge, r6, r5, r6}, true, ge, "ge r6 r5 r6", "ge_r6_r5_r6"},
789      {{ge, r6, r6, r6}, true, ge, "ge r6 r6 r6", "ge_r6_r6_r6"},
790      {{ge, r6, r7, r6}, true, ge, "ge r6 r7 r6", "ge_r6_r7_r6"},
791      {{ge, r7, r0, r7}, true, ge, "ge r7 r0 r7", "ge_r7_r0_r7"},
792      {{ge, r7, r1, r7}, true, ge, "ge r7 r1 r7", "ge_r7_r1_r7"},
793      {{ge, r7, r2, r7}, true, ge, "ge r7 r2 r7", "ge_r7_r2_r7"},
794      {{ge, r7, r3, r7}, true, ge, "ge r7 r3 r7", "ge_r7_r3_r7"},
795      {{ge, r7, r4, r7}, true, ge, "ge r7 r4 r7", "ge_r7_r4_r7"},
796      {{ge, r7, r5, r7}, true, ge, "ge r7 r5 r7", "ge_r7_r5_r7"},
797      {{ge, r7, r6, r7}, true, ge, "ge r7 r6 r7", "ge_r7_r6_r7"},
798      {{ge, r7, r7, r7}, true, ge, "ge r7 r7 r7", "ge_r7_r7_r7"},
799      {{lt, r0, r0, r0}, true, lt, "lt r0 r0 r0", "lt_r0_r0_r0"},
800      {{lt, r0, r1, r0}, true, lt, "lt r0 r1 r0", "lt_r0_r1_r0"},
801      {{lt, r0, r2, r0}, true, lt, "lt r0 r2 r0", "lt_r0_r2_r0"},
802      {{lt, r0, r3, r0}, true, lt, "lt r0 r3 r0", "lt_r0_r3_r0"},
803      {{lt, r0, r4, r0}, true, lt, "lt r0 r4 r0", "lt_r0_r4_r0"},
804      {{lt, r0, r5, r0}, true, lt, "lt r0 r5 r0", "lt_r0_r5_r0"},
805      {{lt, r0, r6, r0}, true, lt, "lt r0 r6 r0", "lt_r0_r6_r0"},
806      {{lt, r0, r7, r0}, true, lt, "lt r0 r7 r0", "lt_r0_r7_r0"},
807      {{lt, r1, r0, r1}, true, lt, "lt r1 r0 r1", "lt_r1_r0_r1"},
808      {{lt, r1, r1, r1}, true, lt, "lt r1 r1 r1", "lt_r1_r1_r1"},
809      {{lt, r1, r2, r1}, true, lt, "lt r1 r2 r1", "lt_r1_r2_r1"},
810      {{lt, r1, r3, r1}, true, lt, "lt r1 r3 r1", "lt_r1_r3_r1"},
811      {{lt, r1, r4, r1}, true, lt, "lt r1 r4 r1", "lt_r1_r4_r1"},
812      {{lt, r1, r5, r1}, true, lt, "lt r1 r5 r1", "lt_r1_r5_r1"},
813      {{lt, r1, r6, r1}, true, lt, "lt r1 r6 r1", "lt_r1_r6_r1"},
814      {{lt, r1, r7, r1}, true, lt, "lt r1 r7 r1", "lt_r1_r7_r1"},
815      {{lt, r2, r0, r2}, true, lt, "lt r2 r0 r2", "lt_r2_r0_r2"},
816      {{lt, r2, r1, r2}, true, lt, "lt r2 r1 r2", "lt_r2_r1_r2"},
817      {{lt, r2, r2, r2}, true, lt, "lt r2 r2 r2", "lt_r2_r2_r2"},
818      {{lt, r2, r3, r2}, true, lt, "lt r2 r3 r2", "lt_r2_r3_r2"},
819      {{lt, r2, r4, r2}, true, lt, "lt r2 r4 r2", "lt_r2_r4_r2"},
820      {{lt, r2, r5, r2}, true, lt, "lt r2 r5 r2", "lt_r2_r5_r2"},
821      {{lt, r2, r6, r2}, true, lt, "lt r2 r6 r2", "lt_r2_r6_r2"},
822      {{lt, r2, r7, r2}, true, lt, "lt r2 r7 r2", "lt_r2_r7_r2"},
823      {{lt, r3, r0, r3}, true, lt, "lt r3 r0 r3", "lt_r3_r0_r3"},
824      {{lt, r3, r1, r3}, true, lt, "lt r3 r1 r3", "lt_r3_r1_r3"},
825      {{lt, r3, r2, r3}, true, lt, "lt r3 r2 r3", "lt_r3_r2_r3"},
826      {{lt, r3, r3, r3}, true, lt, "lt r3 r3 r3", "lt_r3_r3_r3"},
827      {{lt, r3, r4, r3}, true, lt, "lt r3 r4 r3", "lt_r3_r4_r3"},
828      {{lt, r3, r5, r3}, true, lt, "lt r3 r5 r3", "lt_r3_r5_r3"},
829      {{lt, r3, r6, r3}, true, lt, "lt r3 r6 r3", "lt_r3_r6_r3"},
830      {{lt, r3, r7, r3}, true, lt, "lt r3 r7 r3", "lt_r3_r7_r3"},
831      {{lt, r4, r0, r4}, true, lt, "lt r4 r0 r4", "lt_r4_r0_r4"},
832      {{lt, r4, r1, r4}, true, lt, "lt r4 r1 r4", "lt_r4_r1_r4"},
833      {{lt, r4, r2, r4}, true, lt, "lt r4 r2 r4", "lt_r4_r2_r4"},
834      {{lt, r4, r3, r4}, true, lt, "lt r4 r3 r4", "lt_r4_r3_r4"},
835      {{lt, r4, r4, r4}, true, lt, "lt r4 r4 r4", "lt_r4_r4_r4"},
836      {{lt, r4, r5, r4}, true, lt, "lt r4 r5 r4", "lt_r4_r5_r4"},
837      {{lt, r4, r6, r4}, true, lt, "lt r4 r6 r4", "lt_r4_r6_r4"},
838      {{lt, r4, r7, r4}, true, lt, "lt r4 r7 r4", "lt_r4_r7_r4"},
839      {{lt, r5, r0, r5}, true, lt, "lt r5 r0 r5", "lt_r5_r0_r5"},
840      {{lt, r5, r1, r5}, true, lt, "lt r5 r1 r5", "lt_r5_r1_r5"},
841      {{lt, r5, r2, r5}, true, lt, "lt r5 r2 r5", "lt_r5_r2_r5"},
842      {{lt, r5, r3, r5}, true, lt, "lt r5 r3 r5", "lt_r5_r3_r5"},
843      {{lt, r5, r4, r5}, true, lt, "lt r5 r4 r5", "lt_r5_r4_r5"},
844      {{lt, r5, r5, r5}, true, lt, "lt r5 r5 r5", "lt_r5_r5_r5"},
845      {{lt, r5, r6, r5}, true, lt, "lt r5 r6 r5", "lt_r5_r6_r5"},
846      {{lt, r5, r7, r5}, true, lt, "lt r5 r7 r5", "lt_r5_r7_r5"},
847      {{lt, r6, r0, r6}, true, lt, "lt r6 r0 r6", "lt_r6_r0_r6"},
848      {{lt, r6, r1, r6}, true, lt, "lt r6 r1 r6", "lt_r6_r1_r6"},
849      {{lt, r6, r2, r6}, true, lt, "lt r6 r2 r6", "lt_r6_r2_r6"},
850      {{lt, r6, r3, r6}, true, lt, "lt r6 r3 r6", "lt_r6_r3_r6"},
851      {{lt, r6, r4, r6}, true, lt, "lt r6 r4 r6", "lt_r6_r4_r6"},
852      {{lt, r6, r5, r6}, true, lt, "lt r6 r5 r6", "lt_r6_r5_r6"},
853      {{lt, r6, r6, r6}, true, lt, "lt r6 r6 r6", "lt_r6_r6_r6"},
854      {{lt, r6, r7, r6}, true, lt, "lt r6 r7 r6", "lt_r6_r7_r6"},
855      {{lt, r7, r0, r7}, true, lt, "lt r7 r0 r7", "lt_r7_r0_r7"},
856      {{lt, r7, r1, r7}, true, lt, "lt r7 r1 r7", "lt_r7_r1_r7"},
857      {{lt, r7, r2, r7}, true, lt, "lt r7 r2 r7", "lt_r7_r2_r7"},
858      {{lt, r7, r3, r7}, true, lt, "lt r7 r3 r7", "lt_r7_r3_r7"},
859      {{lt, r7, r4, r7}, true, lt, "lt r7 r4 r7", "lt_r7_r4_r7"},
860      {{lt, r7, r5, r7}, true, lt, "lt r7 r5 r7", "lt_r7_r5_r7"},
861      {{lt, r7, r6, r7}, true, lt, "lt r7 r6 r7", "lt_r7_r6_r7"},
862      {{lt, r7, r7, r7}, true, lt, "lt r7 r7 r7", "lt_r7_r7_r7"},
863      {{gt, r0, r0, r0}, true, gt, "gt r0 r0 r0", "gt_r0_r0_r0"},
864      {{gt, r0, r1, r0}, true, gt, "gt r0 r1 r0", "gt_r0_r1_r0"},
865      {{gt, r0, r2, r0}, true, gt, "gt r0 r2 r0", "gt_r0_r2_r0"},
866      {{gt, r0, r3, r0}, true, gt, "gt r0 r3 r0", "gt_r0_r3_r0"},
867      {{gt, r0, r4, r0}, true, gt, "gt r0 r4 r0", "gt_r0_r4_r0"},
868      {{gt, r0, r5, r0}, true, gt, "gt r0 r5 r0", "gt_r0_r5_r0"},
869      {{gt, r0, r6, r0}, true, gt, "gt r0 r6 r0", "gt_r0_r6_r0"},
870      {{gt, r0, r7, r0}, true, gt, "gt r0 r7 r0", "gt_r0_r7_r0"},
871      {{gt, r1, r0, r1}, true, gt, "gt r1 r0 r1", "gt_r1_r0_r1"},
872      {{gt, r1, r1, r1}, true, gt, "gt r1 r1 r1", "gt_r1_r1_r1"},
873      {{gt, r1, r2, r1}, true, gt, "gt r1 r2 r1", "gt_r1_r2_r1"},
874      {{gt, r1, r3, r1}, true, gt, "gt r1 r3 r1", "gt_r1_r3_r1"},
875      {{gt, r1, r4, r1}, true, gt, "gt r1 r4 r1", "gt_r1_r4_r1"},
876      {{gt, r1, r5, r1}, true, gt, "gt r1 r5 r1", "gt_r1_r5_r1"},
877      {{gt, r1, r6, r1}, true, gt, "gt r1 r6 r1", "gt_r1_r6_r1"},
878      {{gt, r1, r7, r1}, true, gt, "gt r1 r7 r1", "gt_r1_r7_r1"},
879      {{gt, r2, r0, r2}, true, gt, "gt r2 r0 r2", "gt_r2_r0_r2"},
880      {{gt, r2, r1, r2}, true, gt, "gt r2 r1 r2", "gt_r2_r1_r2"},
881      {{gt, r2, r2, r2}, true, gt, "gt r2 r2 r2", "gt_r2_r2_r2"},
882      {{gt, r2, r3, r2}, true, gt, "gt r2 r3 r2", "gt_r2_r3_r2"},
883      {{gt, r2, r4, r2}, true, gt, "gt r2 r4 r2", "gt_r2_r4_r2"},
884      {{gt, r2, r5, r2}, true, gt, "gt r2 r5 r2", "gt_r2_r5_r2"},
885      {{gt, r2, r6, r2}, true, gt, "gt r2 r6 r2", "gt_r2_r6_r2"},
886      {{gt, r2, r7, r2}, true, gt, "gt r2 r7 r2", "gt_r2_r7_r2"},
887      {{gt, r3, r0, r3}, true, gt, "gt r3 r0 r3", "gt_r3_r0_r3"},
888      {{gt, r3, r1, r3}, true, gt, "gt r3 r1 r3", "gt_r3_r1_r3"},
889      {{gt, r3, r2, r3}, true, gt, "gt r3 r2 r3", "gt_r3_r2_r3"},
890      {{gt, r3, r3, r3}, true, gt, "gt r3 r3 r3", "gt_r3_r3_r3"},
891      {{gt, r3, r4, r3}, true, gt, "gt r3 r4 r3", "gt_r3_r4_r3"},
892      {{gt, r3, r5, r3}, true, gt, "gt r3 r5 r3", "gt_r3_r5_r3"},
893      {{gt, r3, r6, r3}, true, gt, "gt r3 r6 r3", "gt_r3_r6_r3"},
894      {{gt, r3, r7, r3}, true, gt, "gt r3 r7 r3", "gt_r3_r7_r3"},
895      {{gt, r4, r0, r4}, true, gt, "gt r4 r0 r4", "gt_r4_r0_r4"},
896      {{gt, r4, r1, r4}, true, gt, "gt r4 r1 r4", "gt_r4_r1_r4"},
897      {{gt, r4, r2, r4}, true, gt, "gt r4 r2 r4", "gt_r4_r2_r4"},
898      {{gt, r4, r3, r4}, true, gt, "gt r4 r3 r4", "gt_r4_r3_r4"},
899      {{gt, r4, r4, r4}, true, gt, "gt r4 r4 r4", "gt_r4_r4_r4"},
900      {{gt, r4, r5, r4}, true, gt, "gt r4 r5 r4", "gt_r4_r5_r4"},
901      {{gt, r4, r6, r4}, true, gt, "gt r4 r6 r4", "gt_r4_r6_r4"},
902      {{gt, r4, r7, r4}, true, gt, "gt r4 r7 r4", "gt_r4_r7_r4"},
903      {{gt, r5, r0, r5}, true, gt, "gt r5 r0 r5", "gt_r5_r0_r5"},
904      {{gt, r5, r1, r5}, true, gt, "gt r5 r1 r5", "gt_r5_r1_r5"},
905      {{gt, r5, r2, r5}, true, gt, "gt r5 r2 r5", "gt_r5_r2_r5"},
906      {{gt, r5, r3, r5}, true, gt, "gt r5 r3 r5", "gt_r5_r3_r5"},
907      {{gt, r5, r4, r5}, true, gt, "gt r5 r4 r5", "gt_r5_r4_r5"},
908      {{gt, r5, r5, r5}, true, gt, "gt r5 r5 r5", "gt_r5_r5_r5"},
909      {{gt, r5, r6, r5}, true, gt, "gt r5 r6 r5", "gt_r5_r6_r5"},
910      {{gt, r5, r7, r5}, true, gt, "gt r5 r7 r5", "gt_r5_r7_r5"},
911      {{gt, r6, r0, r6}, true, gt, "gt r6 r0 r6", "gt_r6_r0_r6"},
912      {{gt, r6, r1, r6}, true, gt, "gt r6 r1 r6", "gt_r6_r1_r6"},
913      {{gt, r6, r2, r6}, true, gt, "gt r6 r2 r6", "gt_r6_r2_r6"},
914      {{gt, r6, r3, r6}, true, gt, "gt r6 r3 r6", "gt_r6_r3_r6"},
915      {{gt, r6, r4, r6}, true, gt, "gt r6 r4 r6", "gt_r6_r4_r6"},
916      {{gt, r6, r5, r6}, true, gt, "gt r6 r5 r6", "gt_r6_r5_r6"},
917      {{gt, r6, r6, r6}, true, gt, "gt r6 r6 r6", "gt_r6_r6_r6"},
918      {{gt, r6, r7, r6}, true, gt, "gt r6 r7 r6", "gt_r6_r7_r6"},
919      {{gt, r7, r0, r7}, true, gt, "gt r7 r0 r7", "gt_r7_r0_r7"},
920      {{gt, r7, r1, r7}, true, gt, "gt r7 r1 r7", "gt_r7_r1_r7"},
921      {{gt, r7, r2, r7}, true, gt, "gt r7 r2 r7", "gt_r7_r2_r7"},
922      {{gt, r7, r3, r7}, true, gt, "gt r7 r3 r7", "gt_r7_r3_r7"},
923      {{gt, r7, r4, r7}, true, gt, "gt r7 r4 r7", "gt_r7_r4_r7"},
924      {{gt, r7, r5, r7}, true, gt, "gt r7 r5 r7", "gt_r7_r5_r7"},
925      {{gt, r7, r6, r7}, true, gt, "gt r7 r6 r7", "gt_r7_r6_r7"},
926      {{gt, r7, r7, r7}, true, gt, "gt r7 r7 r7", "gt_r7_r7_r7"},
927      {{le, r0, r0, r0}, true, le, "le r0 r0 r0", "le_r0_r0_r0"},
928      {{le, r0, r1, r0}, true, le, "le r0 r1 r0", "le_r0_r1_r0"},
929      {{le, r0, r2, r0}, true, le, "le r0 r2 r0", "le_r0_r2_r0"},
930      {{le, r0, r3, r0}, true, le, "le r0 r3 r0", "le_r0_r3_r0"},
931      {{le, r0, r4, r0}, true, le, "le r0 r4 r0", "le_r0_r4_r0"},
932      {{le, r0, r5, r0}, true, le, "le r0 r5 r0", "le_r0_r5_r0"},
933      {{le, r0, r6, r0}, true, le, "le r0 r6 r0", "le_r0_r6_r0"},
934      {{le, r0, r7, r0}, true, le, "le r0 r7 r0", "le_r0_r7_r0"},
935      {{le, r1, r0, r1}, true, le, "le r1 r0 r1", "le_r1_r0_r1"},
936      {{le, r1, r1, r1}, true, le, "le r1 r1 r1", "le_r1_r1_r1"},
937      {{le, r1, r2, r1}, true, le, "le r1 r2 r1", "le_r1_r2_r1"},
938      {{le, r1, r3, r1}, true, le, "le r1 r3 r1", "le_r1_r3_r1"},
939      {{le, r1, r4, r1}, true, le, "le r1 r4 r1", "le_r1_r4_r1"},
940      {{le, r1, r5, r1}, true, le, "le r1 r5 r1", "le_r1_r5_r1"},
941      {{le, r1, r6, r1}, true, le, "le r1 r6 r1", "le_r1_r6_r1"},
942      {{le, r1, r7, r1}, true, le, "le r1 r7 r1", "le_r1_r7_r1"},
943      {{le, r2, r0, r2}, true, le, "le r2 r0 r2", "le_r2_r0_r2"},
944      {{le, r2, r1, r2}, true, le, "le r2 r1 r2", "le_r2_r1_r2"},
945      {{le, r2, r2, r2}, true, le, "le r2 r2 r2", "le_r2_r2_r2"},
946      {{le, r2, r3, r2}, true, le, "le r2 r3 r2", "le_r2_r3_r2"},
947      {{le, r2, r4, r2}, true, le, "le r2 r4 r2", "le_r2_r4_r2"},
948      {{le, r2, r5, r2}, true, le, "le r2 r5 r2", "le_r2_r5_r2"},
949      {{le, r2, r6, r2}, true, le, "le r2 r6 r2", "le_r2_r6_r2"},
950      {{le, r2, r7, r2}, true, le, "le r2 r7 r2", "le_r2_r7_r2"},
951      {{le, r3, r0, r3}, true, le, "le r3 r0 r3", "le_r3_r0_r3"},
952      {{le, r3, r1, r3}, true, le, "le r3 r1 r3", "le_r3_r1_r3"},
953      {{le, r3, r2, r3}, true, le, "le r3 r2 r3", "le_r3_r2_r3"},
954      {{le, r3, r3, r3}, true, le, "le r3 r3 r3", "le_r3_r3_r3"},
955      {{le, r3, r4, r3}, true, le, "le r3 r4 r3", "le_r3_r4_r3"},
956      {{le, r3, r5, r3}, true, le, "le r3 r5 r3", "le_r3_r5_r3"},
957      {{le, r3, r6, r3}, true, le, "le r3 r6 r3", "le_r3_r6_r3"},
958      {{le, r3, r7, r3}, true, le, "le r3 r7 r3", "le_r3_r7_r3"},
959      {{le, r4, r0, r4}, true, le, "le r4 r0 r4", "le_r4_r0_r4"},
960      {{le, r4, r1, r4}, true, le, "le r4 r1 r4", "le_r4_r1_r4"},
961      {{le, r4, r2, r4}, true, le, "le r4 r2 r4", "le_r4_r2_r4"},
962      {{le, r4, r3, r4}, true, le, "le r4 r3 r4", "le_r4_r3_r4"},
963      {{le, r4, r4, r4}, true, le, "le r4 r4 r4", "le_r4_r4_r4"},
964      {{le, r4, r5, r4}, true, le, "le r4 r5 r4", "le_r4_r5_r4"},
965      {{le, r4, r6, r4}, true, le, "le r4 r6 r4", "le_r4_r6_r4"},
966      {{le, r4, r7, r4}, true, le, "le r4 r7 r4", "le_r4_r7_r4"},
967      {{le, r5, r0, r5}, true, le, "le r5 r0 r5", "le_r5_r0_r5"},
968      {{le, r5, r1, r5}, true, le, "le r5 r1 r5", "le_r5_r1_r5"},
969      {{le, r5, r2, r5}, true, le, "le r5 r2 r5", "le_r5_r2_r5"},
970      {{le, r5, r3, r5}, true, le, "le r5 r3 r5", "le_r5_r3_r5"},
971      {{le, r5, r4, r5}, true, le, "le r5 r4 r5", "le_r5_r4_r5"},
972      {{le, r5, r5, r5}, true, le, "le r5 r5 r5", "le_r5_r5_r5"},
973      {{le, r5, r6, r5}, true, le, "le r5 r6 r5", "le_r5_r6_r5"},
974      {{le, r5, r7, r5}, true, le, "le r5 r7 r5", "le_r5_r7_r5"},
975      {{le, r6, r0, r6}, true, le, "le r6 r0 r6", "le_r6_r0_r6"},
976      {{le, r6, r1, r6}, true, le, "le r6 r1 r6", "le_r6_r1_r6"},
977      {{le, r6, r2, r6}, true, le, "le r6 r2 r6", "le_r6_r2_r6"},
978      {{le, r6, r3, r6}, true, le, "le r6 r3 r6", "le_r6_r3_r6"},
979      {{le, r6, r4, r6}, true, le, "le r6 r4 r6", "le_r6_r4_r6"},
980      {{le, r6, r5, r6}, true, le, "le r6 r5 r6", "le_r6_r5_r6"},
981      {{le, r6, r6, r6}, true, le, "le r6 r6 r6", "le_r6_r6_r6"},
982      {{le, r6, r7, r6}, true, le, "le r6 r7 r6", "le_r6_r7_r6"},
983      {{le, r7, r0, r7}, true, le, "le r7 r0 r7", "le_r7_r0_r7"},
984      {{le, r7, r1, r7}, true, le, "le r7 r1 r7", "le_r7_r1_r7"},
985      {{le, r7, r2, r7}, true, le, "le r7 r2 r7", "le_r7_r2_r7"},
986      {{le, r7, r3, r7}, true, le, "le r7 r3 r7", "le_r7_r3_r7"},
987      {{le, r7, r4, r7}, true, le, "le r7 r4 r7", "le_r7_r4_r7"},
988      {{le, r7, r5, r7}, true, le, "le r7 r5 r7", "le_r7_r5_r7"},
989      {{le, r7, r6, r7}, true, le, "le r7 r6 r7", "le_r7_r6_r7"},
990      {{le, r7, r7, r7}, true, le, "le r7 r7 r7", "le_r7_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-rdlow-rnlow-rmlow-in-it-block-mul-t32.h"
995 
996 
997 // The maximum number of errors to report in detail for each test.
998 const unsigned kErrorReportLimit = 8;
999 
1000 typedef void (MacroAssembler::*Fn)(Condition cond,
1001                                    Register rd,
1002                                    Register rn,
1003                                    Register rm);
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     Register rm = kTests[i].operands.rm;
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, rn, rm);
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_RDLOW_RNLOW_RMLOW_IN_IT_BLOCK_" #mnemonic     \
1124       "_T32",                                                               \
1125       &Test_##mnemonic);
1126 FOREACH_INSTRUCTION(TEST)
1127 #undef TEST
1128 
1129 }  // namespace
1130 #endif
1131 
1132 }  // namespace aarch32
1133 }  // namespace vixl
1134