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