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(Clz) \ 119 M(Rbit) \ 120 M(Rev) \ 121 M(Rev16) \ 122 M(Revsh) \ 123 M(Rrx) \ 124 M(Rrxs) 125 126 127 // The following definitions are defined again in each generated test, therefore 128 // we need to place them in an anomymous namespace. It expresses that they are 129 // local to this file only, and the compiler is not allowed to share these types 130 // across test files during template instantiation. Specifically, `Operands` and 131 // `Inputs` have various layouts across generated tests so they absolutely 132 // cannot be shared. 133 134 #ifdef VIXL_INCLUDE_TARGET_A32 135 namespace { 136 137 // Values to be passed to the assembler to produce the instruction under test. 138 struct Operands { 139 Condition cond; 140 Register rd; 141 Register rn; 142 }; 143 144 // Input data to feed to the instruction. 145 struct Inputs { 146 uint32_t apsr; 147 uint32_t rd; 148 uint32_t rn; 149 }; 150 151 // This structure contains all input data needed to test one specific encoding. 152 // It used to generate a loop over an instruction. 153 struct TestLoopData { 154 // The `operands` fields represents the values to pass to the assembler to 155 // produce the instruction. 156 Operands operands; 157 // Description of the operands, used for error reporting. 158 const char* operands_description; 159 // Unique identifier, used for generating traces. 160 const char* identifier; 161 // Array of values to be fed to the instruction. 162 size_t input_size; 163 const Inputs* inputs; 164 }; 165 166 static const Inputs kCondition[] = {{NFlag, 0xabababab, 0xabababab}, 167 {ZFlag, 0xabababab, 0xabababab}, 168 {CFlag, 0xabababab, 0xabababab}, 169 {VFlag, 0xabababab, 0xabababab}, 170 {NZFlag, 0xabababab, 0xabababab}, 171 {NCFlag, 0xabababab, 0xabababab}, 172 {NVFlag, 0xabababab, 0xabababab}, 173 {ZCFlag, 0xabababab, 0xabababab}, 174 {ZVFlag, 0xabababab, 0xabababab}, 175 {CVFlag, 0xabababab, 0xabababab}, 176 {NZCFlag, 0xabababab, 0xabababab}, 177 {NZVFlag, 0xabababab, 0xabababab}, 178 {NCVFlag, 0xabababab, 0xabababab}, 179 {ZCVFlag, 0xabababab, 0xabababab}, 180 {NZCVFlag, 0xabababab, 0xabababab}}; 181 182 static const Inputs kRdIsRn[] = {{NoFlag, 0x00000000, 0x00000000}, 183 {NoFlag, 0x00000001, 0x00000001}, 184 {NoFlag, 0x00000002, 0x00000002}, 185 {NoFlag, 0x00000020, 0x00000020}, 186 {NoFlag, 0x0000007d, 0x0000007d}, 187 {NoFlag, 0x0000007e, 0x0000007e}, 188 {NoFlag, 0x0000007f, 0x0000007f}, 189 {NoFlag, 0x00007ffd, 0x00007ffd}, 190 {NoFlag, 0x00007ffe, 0x00007ffe}, 191 {NoFlag, 0x00007fff, 0x00007fff}, 192 {NoFlag, 0x33333333, 0x33333333}, 193 {NoFlag, 0x55555555, 0x55555555}, 194 {NoFlag, 0x7ffffffd, 0x7ffffffd}, 195 {NoFlag, 0x7ffffffe, 0x7ffffffe}, 196 {NoFlag, 0x7fffffff, 0x7fffffff}, 197 {NoFlag, 0x80000000, 0x80000000}, 198 {NoFlag, 0x80000001, 0x80000001}, 199 {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa}, 200 {NoFlag, 0xcccccccc, 0xcccccccc}, 201 {NoFlag, 0xffff8000, 0xffff8000}, 202 {NoFlag, 0xffff8001, 0xffff8001}, 203 {NoFlag, 0xffff8002, 0xffff8002}, 204 {NoFlag, 0xffff8003, 0xffff8003}, 205 {NoFlag, 0xffffff80, 0xffffff80}, 206 {NoFlag, 0xffffff81, 0xffffff81}, 207 {NoFlag, 0xffffff82, 0xffffff82}, 208 {NoFlag, 0xffffff83, 0xffffff83}, 209 {NoFlag, 0xffffffe0, 0xffffffe0}, 210 {NoFlag, 0xfffffffd, 0xfffffffd}, 211 {NoFlag, 0xfffffffe, 0xfffffffe}, 212 {NoFlag, 0xffffffff, 0xffffffff}}; 213 214 static const Inputs kRdIsNotRn[] = {{NoFlag, 0x00000000, 0x00000001}, 215 {NoFlag, 0x00000000, 0x00000002}, 216 {NoFlag, 0x00000000, 0x00000020}, 217 {NoFlag, 0x00000000, 0x0000007d}, 218 {NoFlag, 0x00000000, 0x0000007e}, 219 {NoFlag, 0x00000000, 0x0000007f}, 220 {NoFlag, 0x00000000, 0x00007ffd}, 221 {NoFlag, 0x00000000, 0x00007ffe}, 222 {NoFlag, 0x00000000, 0x00007fff}, 223 {NoFlag, 0x00000000, 0x33333333}, 224 {NoFlag, 0x00000000, 0x55555555}, 225 {NoFlag, 0x00000000, 0x7ffffffd}, 226 {NoFlag, 0x00000000, 0x7ffffffe}, 227 {NoFlag, 0x00000000, 0x7fffffff}, 228 {NoFlag, 0x00000000, 0x80000000}, 229 {NoFlag, 0x00000000, 0x80000001}, 230 {NoFlag, 0x00000000, 0xaaaaaaaa}, 231 {NoFlag, 0x00000000, 0xcccccccc}, 232 {NoFlag, 0x00000000, 0xffff8000}, 233 {NoFlag, 0x00000000, 0xffff8001}, 234 {NoFlag, 0x00000000, 0xffff8002}, 235 {NoFlag, 0x00000000, 0xffff8003}, 236 {NoFlag, 0x00000000, 0xffffff80}, 237 {NoFlag, 0x00000000, 0xffffff81}, 238 {NoFlag, 0x00000000, 0xffffff82}, 239 {NoFlag, 0x00000000, 0xffffff83}, 240 {NoFlag, 0x00000000, 0xffffffe0}, 241 {NoFlag, 0x00000000, 0xfffffffd}, 242 {NoFlag, 0x00000000, 0xfffffffe}, 243 {NoFlag, 0x00000000, 0xffffffff}, 244 {NoFlag, 0x00000001, 0x00000000}, 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, 0x00000020}, 277 {NoFlag, 0x00000002, 0x0000007d}, 278 {NoFlag, 0x00000002, 0x0000007e}, 279 {NoFlag, 0x00000002, 0x0000007f}, 280 {NoFlag, 0x00000002, 0x00007ffd}, 281 {NoFlag, 0x00000002, 0x00007ffe}, 282 {NoFlag, 0x00000002, 0x00007fff}, 283 {NoFlag, 0x00000002, 0x33333333}, 284 {NoFlag, 0x00000002, 0x55555555}, 285 {NoFlag, 0x00000002, 0x7ffffffd}, 286 {NoFlag, 0x00000002, 0x7ffffffe}, 287 {NoFlag, 0x00000002, 0x7fffffff}, 288 {NoFlag, 0x00000002, 0x80000000}, 289 {NoFlag, 0x00000002, 0x80000001}, 290 {NoFlag, 0x00000002, 0xaaaaaaaa}, 291 {NoFlag, 0x00000002, 0xcccccccc}, 292 {NoFlag, 0x00000002, 0xffff8000}, 293 {NoFlag, 0x00000002, 0xffff8001}, 294 {NoFlag, 0x00000002, 0xffff8002}, 295 {NoFlag, 0x00000002, 0xffff8003}, 296 {NoFlag, 0x00000002, 0xffffff80}, 297 {NoFlag, 0x00000002, 0xffffff81}, 298 {NoFlag, 0x00000002, 0xffffff82}, 299 {NoFlag, 0x00000002, 0xffffff83}, 300 {NoFlag, 0x00000002, 0xffffffe0}, 301 {NoFlag, 0x00000002, 0xfffffffd}, 302 {NoFlag, 0x00000002, 0xfffffffe}, 303 {NoFlag, 0x00000002, 0xffffffff}, 304 {NoFlag, 0x00000020, 0x00000000}, 305 {NoFlag, 0x00000020, 0x00000001}, 306 {NoFlag, 0x00000020, 0x00000002}, 307 {NoFlag, 0x00000020, 0x0000007d}, 308 {NoFlag, 0x00000020, 0x0000007e}, 309 {NoFlag, 0x00000020, 0x0000007f}, 310 {NoFlag, 0x00000020, 0x00007ffd}, 311 {NoFlag, 0x00000020, 0x00007ffe}, 312 {NoFlag, 0x00000020, 0x00007fff}, 313 {NoFlag, 0x00000020, 0x33333333}, 314 {NoFlag, 0x00000020, 0x55555555}, 315 {NoFlag, 0x00000020, 0x7ffffffd}, 316 {NoFlag, 0x00000020, 0x7ffffffe}, 317 {NoFlag, 0x00000020, 0x7fffffff}, 318 {NoFlag, 0x00000020, 0x80000000}, 319 {NoFlag, 0x00000020, 0x80000001}, 320 {NoFlag, 0x00000020, 0xaaaaaaaa}, 321 {NoFlag, 0x00000020, 0xcccccccc}, 322 {NoFlag, 0x00000020, 0xffff8000}, 323 {NoFlag, 0x00000020, 0xffff8001}, 324 {NoFlag, 0x00000020, 0xffff8002}, 325 {NoFlag, 0x00000020, 0xffff8003}, 326 {NoFlag, 0x00000020, 0xffffff80}, 327 {NoFlag, 0x00000020, 0xffffff81}, 328 {NoFlag, 0x00000020, 0xffffff82}, 329 {NoFlag, 0x00000020, 0xffffff83}, 330 {NoFlag, 0x00000020, 0xffffffe0}, 331 {NoFlag, 0x00000020, 0xfffffffd}, 332 {NoFlag, 0x00000020, 0xfffffffe}, 333 {NoFlag, 0x00000020, 0xffffffff}, 334 {NoFlag, 0x0000007d, 0x00000000}, 335 {NoFlag, 0x0000007d, 0x00000001}, 336 {NoFlag, 0x0000007d, 0x00000002}, 337 {NoFlag, 0x0000007d, 0x00000020}, 338 {NoFlag, 0x0000007d, 0x0000007e}, 339 {NoFlag, 0x0000007d, 0x0000007f}, 340 {NoFlag, 0x0000007d, 0x00007ffd}, 341 {NoFlag, 0x0000007d, 0x00007ffe}, 342 {NoFlag, 0x0000007d, 0x00007fff}, 343 {NoFlag, 0x0000007d, 0x33333333}, 344 {NoFlag, 0x0000007d, 0x55555555}, 345 {NoFlag, 0x0000007d, 0x7ffffffd}, 346 {NoFlag, 0x0000007d, 0x7ffffffe}, 347 {NoFlag, 0x0000007d, 0x7fffffff}, 348 {NoFlag, 0x0000007d, 0x80000000}, 349 {NoFlag, 0x0000007d, 0x80000001}, 350 {NoFlag, 0x0000007d, 0xaaaaaaaa}, 351 {NoFlag, 0x0000007d, 0xcccccccc}, 352 {NoFlag, 0x0000007d, 0xffff8000}, 353 {NoFlag, 0x0000007d, 0xffff8001}, 354 {NoFlag, 0x0000007d, 0xffff8002}, 355 {NoFlag, 0x0000007d, 0xffff8003}, 356 {NoFlag, 0x0000007d, 0xffffff80}, 357 {NoFlag, 0x0000007d, 0xffffff81}, 358 {NoFlag, 0x0000007d, 0xffffff82}, 359 {NoFlag, 0x0000007d, 0xffffff83}, 360 {NoFlag, 0x0000007d, 0xffffffe0}, 361 {NoFlag, 0x0000007d, 0xfffffffd}, 362 {NoFlag, 0x0000007d, 0xfffffffe}, 363 {NoFlag, 0x0000007d, 0xffffffff}, 364 {NoFlag, 0x0000007e, 0x00000000}, 365 {NoFlag, 0x0000007e, 0x00000001}, 366 {NoFlag, 0x0000007e, 0x00000002}, 367 {NoFlag, 0x0000007e, 0x00000020}, 368 {NoFlag, 0x0000007e, 0x0000007d}, 369 {NoFlag, 0x0000007e, 0x0000007f}, 370 {NoFlag, 0x0000007e, 0x00007ffd}, 371 {NoFlag, 0x0000007e, 0x00007ffe}, 372 {NoFlag, 0x0000007e, 0x00007fff}, 373 {NoFlag, 0x0000007e, 0x33333333}, 374 {NoFlag, 0x0000007e, 0x55555555}, 375 {NoFlag, 0x0000007e, 0x7ffffffd}, 376 {NoFlag, 0x0000007e, 0x7ffffffe}, 377 {NoFlag, 0x0000007e, 0x7fffffff}, 378 {NoFlag, 0x0000007e, 0x80000000}, 379 {NoFlag, 0x0000007e, 0x80000001}, 380 {NoFlag, 0x0000007e, 0xaaaaaaaa}, 381 {NoFlag, 0x0000007e, 0xcccccccc}, 382 {NoFlag, 0x0000007e, 0xffff8000}, 383 {NoFlag, 0x0000007e, 0xffff8001}, 384 {NoFlag, 0x0000007e, 0xffff8002}, 385 {NoFlag, 0x0000007e, 0xffff8003}, 386 {NoFlag, 0x0000007e, 0xffffff80}, 387 {NoFlag, 0x0000007e, 0xffffff81}, 388 {NoFlag, 0x0000007e, 0xffffff82}, 389 {NoFlag, 0x0000007e, 0xffffff83}, 390 {NoFlag, 0x0000007e, 0xffffffe0}, 391 {NoFlag, 0x0000007e, 0xfffffffd}, 392 {NoFlag, 0x0000007e, 0xfffffffe}, 393 {NoFlag, 0x0000007e, 0xffffffff}, 394 {NoFlag, 0x0000007f, 0x00000000}, 395 {NoFlag, 0x0000007f, 0x00000001}, 396 {NoFlag, 0x0000007f, 0x00000002}, 397 {NoFlag, 0x0000007f, 0x00000020}, 398 {NoFlag, 0x0000007f, 0x0000007d}, 399 {NoFlag, 0x0000007f, 0x0000007e}, 400 {NoFlag, 0x0000007f, 0x00007ffd}, 401 {NoFlag, 0x0000007f, 0x00007ffe}, 402 {NoFlag, 0x0000007f, 0x00007fff}, 403 {NoFlag, 0x0000007f, 0x33333333}, 404 {NoFlag, 0x0000007f, 0x55555555}, 405 {NoFlag, 0x0000007f, 0x7ffffffd}, 406 {NoFlag, 0x0000007f, 0x7ffffffe}, 407 {NoFlag, 0x0000007f, 0x7fffffff}, 408 {NoFlag, 0x0000007f, 0x80000000}, 409 {NoFlag, 0x0000007f, 0x80000001}, 410 {NoFlag, 0x0000007f, 0xaaaaaaaa}, 411 {NoFlag, 0x0000007f, 0xcccccccc}, 412 {NoFlag, 0x0000007f, 0xffff8000}, 413 {NoFlag, 0x0000007f, 0xffff8001}, 414 {NoFlag, 0x0000007f, 0xffff8002}, 415 {NoFlag, 0x0000007f, 0xffff8003}, 416 {NoFlag, 0x0000007f, 0xffffff80}, 417 {NoFlag, 0x0000007f, 0xffffff81}, 418 {NoFlag, 0x0000007f, 0xffffff82}, 419 {NoFlag, 0x0000007f, 0xffffff83}, 420 {NoFlag, 0x0000007f, 0xffffffe0}, 421 {NoFlag, 0x0000007f, 0xfffffffd}, 422 {NoFlag, 0x0000007f, 0xfffffffe}, 423 {NoFlag, 0x0000007f, 0xffffffff}, 424 {NoFlag, 0x00007ffd, 0x00000000}, 425 {NoFlag, 0x00007ffd, 0x00000001}, 426 {NoFlag, 0x00007ffd, 0x00000002}, 427 {NoFlag, 0x00007ffd, 0x00000020}, 428 {NoFlag, 0x00007ffd, 0x0000007d}, 429 {NoFlag, 0x00007ffd, 0x0000007e}, 430 {NoFlag, 0x00007ffd, 0x0000007f}, 431 {NoFlag, 0x00007ffd, 0x00007ffe}, 432 {NoFlag, 0x00007ffd, 0x00007fff}, 433 {NoFlag, 0x00007ffd, 0x33333333}, 434 {NoFlag, 0x00007ffd, 0x55555555}, 435 {NoFlag, 0x00007ffd, 0x7ffffffd}, 436 {NoFlag, 0x00007ffd, 0x7ffffffe}, 437 {NoFlag, 0x00007ffd, 0x7fffffff}, 438 {NoFlag, 0x00007ffd, 0x80000000}, 439 {NoFlag, 0x00007ffd, 0x80000001}, 440 {NoFlag, 0x00007ffd, 0xaaaaaaaa}, 441 {NoFlag, 0x00007ffd, 0xcccccccc}, 442 {NoFlag, 0x00007ffd, 0xffff8000}, 443 {NoFlag, 0x00007ffd, 0xffff8001}, 444 {NoFlag, 0x00007ffd, 0xffff8002}, 445 {NoFlag, 0x00007ffd, 0xffff8003}, 446 {NoFlag, 0x00007ffd, 0xffffff80}, 447 {NoFlag, 0x00007ffd, 0xffffff81}, 448 {NoFlag, 0x00007ffd, 0xffffff82}, 449 {NoFlag, 0x00007ffd, 0xffffff83}, 450 {NoFlag, 0x00007ffd, 0xffffffe0}, 451 {NoFlag, 0x00007ffd, 0xfffffffd}, 452 {NoFlag, 0x00007ffd, 0xfffffffe}, 453 {NoFlag, 0x00007ffd, 0xffffffff}, 454 {NoFlag, 0x00007ffe, 0x00000000}, 455 {NoFlag, 0x00007ffe, 0x00000001}, 456 {NoFlag, 0x00007ffe, 0x00000002}, 457 {NoFlag, 0x00007ffe, 0x00000020}, 458 {NoFlag, 0x00007ffe, 0x0000007d}, 459 {NoFlag, 0x00007ffe, 0x0000007e}, 460 {NoFlag, 0x00007ffe, 0x0000007f}, 461 {NoFlag, 0x00007ffe, 0x00007ffd}, 462 {NoFlag, 0x00007ffe, 0x00007fff}, 463 {NoFlag, 0x00007ffe, 0x33333333}, 464 {NoFlag, 0x00007ffe, 0x55555555}, 465 {NoFlag, 0x00007ffe, 0x7ffffffd}, 466 {NoFlag, 0x00007ffe, 0x7ffffffe}, 467 {NoFlag, 0x00007ffe, 0x7fffffff}, 468 {NoFlag, 0x00007ffe, 0x80000000}, 469 {NoFlag, 0x00007ffe, 0x80000001}, 470 {NoFlag, 0x00007ffe, 0xaaaaaaaa}, 471 {NoFlag, 0x00007ffe, 0xcccccccc}, 472 {NoFlag, 0x00007ffe, 0xffff8000}, 473 {NoFlag, 0x00007ffe, 0xffff8001}, 474 {NoFlag, 0x00007ffe, 0xffff8002}, 475 {NoFlag, 0x00007ffe, 0xffff8003}, 476 {NoFlag, 0x00007ffe, 0xffffff80}, 477 {NoFlag, 0x00007ffe, 0xffffff81}, 478 {NoFlag, 0x00007ffe, 0xffffff82}, 479 {NoFlag, 0x00007ffe, 0xffffff83}, 480 {NoFlag, 0x00007ffe, 0xffffffe0}, 481 {NoFlag, 0x00007ffe, 0xfffffffd}, 482 {NoFlag, 0x00007ffe, 0xfffffffe}, 483 {NoFlag, 0x00007ffe, 0xffffffff}, 484 {NoFlag, 0x00007fff, 0x00000000}, 485 {NoFlag, 0x00007fff, 0x00000001}, 486 {NoFlag, 0x00007fff, 0x00000002}, 487 {NoFlag, 0x00007fff, 0x00000020}, 488 {NoFlag, 0x00007fff, 0x0000007d}, 489 {NoFlag, 0x00007fff, 0x0000007e}, 490 {NoFlag, 0x00007fff, 0x0000007f}, 491 {NoFlag, 0x00007fff, 0x00007ffd}, 492 {NoFlag, 0x00007fff, 0x00007ffe}, 493 {NoFlag, 0x00007fff, 0x33333333}, 494 {NoFlag, 0x00007fff, 0x55555555}, 495 {NoFlag, 0x00007fff, 0x7ffffffd}, 496 {NoFlag, 0x00007fff, 0x7ffffffe}, 497 {NoFlag, 0x00007fff, 0x7fffffff}, 498 {NoFlag, 0x00007fff, 0x80000000}, 499 {NoFlag, 0x00007fff, 0x80000001}, 500 {NoFlag, 0x00007fff, 0xaaaaaaaa}, 501 {NoFlag, 0x00007fff, 0xcccccccc}, 502 {NoFlag, 0x00007fff, 0xffff8000}, 503 {NoFlag, 0x00007fff, 0xffff8001}, 504 {NoFlag, 0x00007fff, 0xffff8002}, 505 {NoFlag, 0x00007fff, 0xffff8003}, 506 {NoFlag, 0x00007fff, 0xffffff80}, 507 {NoFlag, 0x00007fff, 0xffffff81}, 508 {NoFlag, 0x00007fff, 0xffffff82}, 509 {NoFlag, 0x00007fff, 0xffffff83}, 510 {NoFlag, 0x00007fff, 0xffffffe0}, 511 {NoFlag, 0x00007fff, 0xfffffffd}, 512 {NoFlag, 0x00007fff, 0xfffffffe}, 513 {NoFlag, 0x00007fff, 0xffffffff}, 514 {NoFlag, 0x33333333, 0x00000000}, 515 {NoFlag, 0x33333333, 0x00000001}, 516 {NoFlag, 0x33333333, 0x00000002}, 517 {NoFlag, 0x33333333, 0x00000020}, 518 {NoFlag, 0x33333333, 0x0000007d}, 519 {NoFlag, 0x33333333, 0x0000007e}, 520 {NoFlag, 0x33333333, 0x0000007f}, 521 {NoFlag, 0x33333333, 0x00007ffd}, 522 {NoFlag, 0x33333333, 0x00007ffe}, 523 {NoFlag, 0x33333333, 0x00007fff}, 524 {NoFlag, 0x33333333, 0x55555555}, 525 {NoFlag, 0x33333333, 0x7ffffffd}, 526 {NoFlag, 0x33333333, 0x7ffffffe}, 527 {NoFlag, 0x33333333, 0x7fffffff}, 528 {NoFlag, 0x33333333, 0x80000000}, 529 {NoFlag, 0x33333333, 0x80000001}, 530 {NoFlag, 0x33333333, 0xaaaaaaaa}, 531 {NoFlag, 0x33333333, 0xcccccccc}, 532 {NoFlag, 0x33333333, 0xffff8000}, 533 {NoFlag, 0x33333333, 0xffff8001}, 534 {NoFlag, 0x33333333, 0xffff8002}, 535 {NoFlag, 0x33333333, 0xffff8003}, 536 {NoFlag, 0x33333333, 0xffffff80}, 537 {NoFlag, 0x33333333, 0xffffff81}, 538 {NoFlag, 0x33333333, 0xffffff82}, 539 {NoFlag, 0x33333333, 0xffffff83}, 540 {NoFlag, 0x33333333, 0xffffffe0}, 541 {NoFlag, 0x33333333, 0xfffffffd}, 542 {NoFlag, 0x33333333, 0xfffffffe}, 543 {NoFlag, 0x33333333, 0xffffffff}, 544 {NoFlag, 0x55555555, 0x00000000}, 545 {NoFlag, 0x55555555, 0x00000001}, 546 {NoFlag, 0x55555555, 0x00000002}, 547 {NoFlag, 0x55555555, 0x00000020}, 548 {NoFlag, 0x55555555, 0x0000007d}, 549 {NoFlag, 0x55555555, 0x0000007e}, 550 {NoFlag, 0x55555555, 0x0000007f}, 551 {NoFlag, 0x55555555, 0x00007ffd}, 552 {NoFlag, 0x55555555, 0x00007ffe}, 553 {NoFlag, 0x55555555, 0x00007fff}, 554 {NoFlag, 0x55555555, 0x33333333}, 555 {NoFlag, 0x55555555, 0x7ffffffd}, 556 {NoFlag, 0x55555555, 0x7ffffffe}, 557 {NoFlag, 0x55555555, 0x7fffffff}, 558 {NoFlag, 0x55555555, 0x80000000}, 559 {NoFlag, 0x55555555, 0x80000001}, 560 {NoFlag, 0x55555555, 0xaaaaaaaa}, 561 {NoFlag, 0x55555555, 0xcccccccc}, 562 {NoFlag, 0x55555555, 0xffff8000}, 563 {NoFlag, 0x55555555, 0xffff8001}, 564 {NoFlag, 0x55555555, 0xffff8002}, 565 {NoFlag, 0x55555555, 0xffff8003}, 566 {NoFlag, 0x55555555, 0xffffff80}, 567 {NoFlag, 0x55555555, 0xffffff81}, 568 {NoFlag, 0x55555555, 0xffffff82}, 569 {NoFlag, 0x55555555, 0xffffff83}, 570 {NoFlag, 0x55555555, 0xffffffe0}, 571 {NoFlag, 0x55555555, 0xfffffffd}, 572 {NoFlag, 0x55555555, 0xfffffffe}, 573 {NoFlag, 0x55555555, 0xffffffff}, 574 {NoFlag, 0x7ffffffd, 0x00000000}, 575 {NoFlag, 0x7ffffffd, 0x00000001}, 576 {NoFlag, 0x7ffffffd, 0x00000002}, 577 {NoFlag, 0x7ffffffd, 0x00000020}, 578 {NoFlag, 0x7ffffffd, 0x0000007d}, 579 {NoFlag, 0x7ffffffd, 0x0000007e}, 580 {NoFlag, 0x7ffffffd, 0x0000007f}, 581 {NoFlag, 0x7ffffffd, 0x00007ffd}, 582 {NoFlag, 0x7ffffffd, 0x00007ffe}, 583 {NoFlag, 0x7ffffffd, 0x00007fff}, 584 {NoFlag, 0x7ffffffd, 0x33333333}, 585 {NoFlag, 0x7ffffffd, 0x55555555}, 586 {NoFlag, 0x7ffffffd, 0x7ffffffe}, 587 {NoFlag, 0x7ffffffd, 0x7fffffff}, 588 {NoFlag, 0x7ffffffd, 0x80000000}, 589 {NoFlag, 0x7ffffffd, 0x80000001}, 590 {NoFlag, 0x7ffffffd, 0xaaaaaaaa}, 591 {NoFlag, 0x7ffffffd, 0xcccccccc}, 592 {NoFlag, 0x7ffffffd, 0xffff8000}, 593 {NoFlag, 0x7ffffffd, 0xffff8001}, 594 {NoFlag, 0x7ffffffd, 0xffff8002}, 595 {NoFlag, 0x7ffffffd, 0xffff8003}, 596 {NoFlag, 0x7ffffffd, 0xffffff80}, 597 {NoFlag, 0x7ffffffd, 0xffffff81}, 598 {NoFlag, 0x7ffffffd, 0xffffff82}, 599 {NoFlag, 0x7ffffffd, 0xffffff83}, 600 {NoFlag, 0x7ffffffd, 0xffffffe0}, 601 {NoFlag, 0x7ffffffd, 0xfffffffd}, 602 {NoFlag, 0x7ffffffd, 0xfffffffe}, 603 {NoFlag, 0x7ffffffd, 0xffffffff}, 604 {NoFlag, 0x7ffffffe, 0x00000000}, 605 {NoFlag, 0x7ffffffe, 0x00000001}, 606 {NoFlag, 0x7ffffffe, 0x00000002}, 607 {NoFlag, 0x7ffffffe, 0x00000020}, 608 {NoFlag, 0x7ffffffe, 0x0000007d}, 609 {NoFlag, 0x7ffffffe, 0x0000007e}, 610 {NoFlag, 0x7ffffffe, 0x0000007f}, 611 {NoFlag, 0x7ffffffe, 0x00007ffd}, 612 {NoFlag, 0x7ffffffe, 0x00007ffe}, 613 {NoFlag, 0x7ffffffe, 0x00007fff}, 614 {NoFlag, 0x7ffffffe, 0x33333333}, 615 {NoFlag, 0x7ffffffe, 0x55555555}, 616 {NoFlag, 0x7ffffffe, 0x7ffffffd}, 617 {NoFlag, 0x7ffffffe, 0x7fffffff}, 618 {NoFlag, 0x7ffffffe, 0x80000000}, 619 {NoFlag, 0x7ffffffe, 0x80000001}, 620 {NoFlag, 0x7ffffffe, 0xaaaaaaaa}, 621 {NoFlag, 0x7ffffffe, 0xcccccccc}, 622 {NoFlag, 0x7ffffffe, 0xffff8000}, 623 {NoFlag, 0x7ffffffe, 0xffff8001}, 624 {NoFlag, 0x7ffffffe, 0xffff8002}, 625 {NoFlag, 0x7ffffffe, 0xffff8003}, 626 {NoFlag, 0x7ffffffe, 0xffffff80}, 627 {NoFlag, 0x7ffffffe, 0xffffff81}, 628 {NoFlag, 0x7ffffffe, 0xffffff82}, 629 {NoFlag, 0x7ffffffe, 0xffffff83}, 630 {NoFlag, 0x7ffffffe, 0xffffffe0}, 631 {NoFlag, 0x7ffffffe, 0xfffffffd}, 632 {NoFlag, 0x7ffffffe, 0xfffffffe}, 633 {NoFlag, 0x7ffffffe, 0xffffffff}, 634 {NoFlag, 0x7fffffff, 0x00000000}, 635 {NoFlag, 0x7fffffff, 0x00000001}, 636 {NoFlag, 0x7fffffff, 0x00000002}, 637 {NoFlag, 0x7fffffff, 0x00000020}, 638 {NoFlag, 0x7fffffff, 0x0000007d}, 639 {NoFlag, 0x7fffffff, 0x0000007e}, 640 {NoFlag, 0x7fffffff, 0x0000007f}, 641 {NoFlag, 0x7fffffff, 0x00007ffd}, 642 {NoFlag, 0x7fffffff, 0x00007ffe}, 643 {NoFlag, 0x7fffffff, 0x00007fff}, 644 {NoFlag, 0x7fffffff, 0x33333333}, 645 {NoFlag, 0x7fffffff, 0x55555555}, 646 {NoFlag, 0x7fffffff, 0x7ffffffd}, 647 {NoFlag, 0x7fffffff, 0x7ffffffe}, 648 {NoFlag, 0x7fffffff, 0x80000000}, 649 {NoFlag, 0x7fffffff, 0x80000001}, 650 {NoFlag, 0x7fffffff, 0xaaaaaaaa}, 651 {NoFlag, 0x7fffffff, 0xcccccccc}, 652 {NoFlag, 0x7fffffff, 0xffff8000}, 653 {NoFlag, 0x7fffffff, 0xffff8001}, 654 {NoFlag, 0x7fffffff, 0xffff8002}, 655 {NoFlag, 0x7fffffff, 0xffff8003}, 656 {NoFlag, 0x7fffffff, 0xffffff80}, 657 {NoFlag, 0x7fffffff, 0xffffff81}, 658 {NoFlag, 0x7fffffff, 0xffffff82}, 659 {NoFlag, 0x7fffffff, 0xffffff83}, 660 {NoFlag, 0x7fffffff, 0xffffffe0}, 661 {NoFlag, 0x7fffffff, 0xfffffffd}, 662 {NoFlag, 0x7fffffff, 0xfffffffe}, 663 {NoFlag, 0x7fffffff, 0xffffffff}, 664 {NoFlag, 0x80000000, 0x00000000}, 665 {NoFlag, 0x80000000, 0x00000001}, 666 {NoFlag, 0x80000000, 0x00000002}, 667 {NoFlag, 0x80000000, 0x00000020}, 668 {NoFlag, 0x80000000, 0x0000007d}, 669 {NoFlag, 0x80000000, 0x0000007e}, 670 {NoFlag, 0x80000000, 0x0000007f}, 671 {NoFlag, 0x80000000, 0x00007ffd}, 672 {NoFlag, 0x80000000, 0x00007ffe}, 673 {NoFlag, 0x80000000, 0x00007fff}, 674 {NoFlag, 0x80000000, 0x33333333}, 675 {NoFlag, 0x80000000, 0x55555555}, 676 {NoFlag, 0x80000000, 0x7ffffffd}, 677 {NoFlag, 0x80000000, 0x7ffffffe}, 678 {NoFlag, 0x80000000, 0x7fffffff}, 679 {NoFlag, 0x80000000, 0x80000001}, 680 {NoFlag, 0x80000000, 0xaaaaaaaa}, 681 {NoFlag, 0x80000000, 0xcccccccc}, 682 {NoFlag, 0x80000000, 0xffff8000}, 683 {NoFlag, 0x80000000, 0xffff8001}, 684 {NoFlag, 0x80000000, 0xffff8002}, 685 {NoFlag, 0x80000000, 0xffff8003}, 686 {NoFlag, 0x80000000, 0xffffff80}, 687 {NoFlag, 0x80000000, 0xffffff81}, 688 {NoFlag, 0x80000000, 0xffffff82}, 689 {NoFlag, 0x80000000, 0xffffff83}, 690 {NoFlag, 0x80000000, 0xffffffe0}, 691 {NoFlag, 0x80000000, 0xfffffffd}, 692 {NoFlag, 0x80000000, 0xfffffffe}, 693 {NoFlag, 0x80000000, 0xffffffff}, 694 {NoFlag, 0x80000001, 0x00000000}, 695 {NoFlag, 0x80000001, 0x00000001}, 696 {NoFlag, 0x80000001, 0x00000002}, 697 {NoFlag, 0x80000001, 0x00000020}, 698 {NoFlag, 0x80000001, 0x0000007d}, 699 {NoFlag, 0x80000001, 0x0000007e}, 700 {NoFlag, 0x80000001, 0x0000007f}, 701 {NoFlag, 0x80000001, 0x00007ffd}, 702 {NoFlag, 0x80000001, 0x00007ffe}, 703 {NoFlag, 0x80000001, 0x00007fff}, 704 {NoFlag, 0x80000001, 0x33333333}, 705 {NoFlag, 0x80000001, 0x55555555}, 706 {NoFlag, 0x80000001, 0x7ffffffd}, 707 {NoFlag, 0x80000001, 0x7ffffffe}, 708 {NoFlag, 0x80000001, 0x7fffffff}, 709 {NoFlag, 0x80000001, 0x80000000}, 710 {NoFlag, 0x80000001, 0xaaaaaaaa}, 711 {NoFlag, 0x80000001, 0xcccccccc}, 712 {NoFlag, 0x80000001, 0xffff8000}, 713 {NoFlag, 0x80000001, 0xffff8001}, 714 {NoFlag, 0x80000001, 0xffff8002}, 715 {NoFlag, 0x80000001, 0xffff8003}, 716 {NoFlag, 0x80000001, 0xffffff80}, 717 {NoFlag, 0x80000001, 0xffffff81}, 718 {NoFlag, 0x80000001, 0xffffff82}, 719 {NoFlag, 0x80000001, 0xffffff83}, 720 {NoFlag, 0x80000001, 0xffffffe0}, 721 {NoFlag, 0x80000001, 0xfffffffd}, 722 {NoFlag, 0x80000001, 0xfffffffe}, 723 {NoFlag, 0x80000001, 0xffffffff}, 724 {NoFlag, 0xaaaaaaaa, 0x00000000}, 725 {NoFlag, 0xaaaaaaaa, 0x00000001}, 726 {NoFlag, 0xaaaaaaaa, 0x00000002}, 727 {NoFlag, 0xaaaaaaaa, 0x00000020}, 728 {NoFlag, 0xaaaaaaaa, 0x0000007d}, 729 {NoFlag, 0xaaaaaaaa, 0x0000007e}, 730 {NoFlag, 0xaaaaaaaa, 0x0000007f}, 731 {NoFlag, 0xaaaaaaaa, 0x00007ffd}, 732 {NoFlag, 0xaaaaaaaa, 0x00007ffe}, 733 {NoFlag, 0xaaaaaaaa, 0x00007fff}, 734 {NoFlag, 0xaaaaaaaa, 0x33333333}, 735 {NoFlag, 0xaaaaaaaa, 0x55555555}, 736 {NoFlag, 0xaaaaaaaa, 0x7ffffffd}, 737 {NoFlag, 0xaaaaaaaa, 0x7ffffffe}, 738 {NoFlag, 0xaaaaaaaa, 0x7fffffff}, 739 {NoFlag, 0xaaaaaaaa, 0x80000000}, 740 {NoFlag, 0xaaaaaaaa, 0x80000001}, 741 {NoFlag, 0xaaaaaaaa, 0xcccccccc}, 742 {NoFlag, 0xaaaaaaaa, 0xffff8000}, 743 {NoFlag, 0xaaaaaaaa, 0xffff8001}, 744 {NoFlag, 0xaaaaaaaa, 0xffff8002}, 745 {NoFlag, 0xaaaaaaaa, 0xffff8003}, 746 {NoFlag, 0xaaaaaaaa, 0xffffff80}, 747 {NoFlag, 0xaaaaaaaa, 0xffffff81}, 748 {NoFlag, 0xaaaaaaaa, 0xffffff82}, 749 {NoFlag, 0xaaaaaaaa, 0xffffff83}, 750 {NoFlag, 0xaaaaaaaa, 0xffffffe0}, 751 {NoFlag, 0xaaaaaaaa, 0xfffffffd}, 752 {NoFlag, 0xaaaaaaaa, 0xfffffffe}, 753 {NoFlag, 0xaaaaaaaa, 0xffffffff}, 754 {NoFlag, 0xcccccccc, 0x00000000}, 755 {NoFlag, 0xcccccccc, 0x00000001}, 756 {NoFlag, 0xcccccccc, 0x00000002}, 757 {NoFlag, 0xcccccccc, 0x00000020}, 758 {NoFlag, 0xcccccccc, 0x0000007d}, 759 {NoFlag, 0xcccccccc, 0x0000007e}, 760 {NoFlag, 0xcccccccc, 0x0000007f}, 761 {NoFlag, 0xcccccccc, 0x00007ffd}, 762 {NoFlag, 0xcccccccc, 0x00007ffe}, 763 {NoFlag, 0xcccccccc, 0x00007fff}, 764 {NoFlag, 0xcccccccc, 0x33333333}, 765 {NoFlag, 0xcccccccc, 0x55555555}, 766 {NoFlag, 0xcccccccc, 0x7ffffffd}, 767 {NoFlag, 0xcccccccc, 0x7ffffffe}, 768 {NoFlag, 0xcccccccc, 0x7fffffff}, 769 {NoFlag, 0xcccccccc, 0x80000000}, 770 {NoFlag, 0xcccccccc, 0x80000001}, 771 {NoFlag, 0xcccccccc, 0xaaaaaaaa}, 772 {NoFlag, 0xcccccccc, 0xffff8000}, 773 {NoFlag, 0xcccccccc, 0xffff8001}, 774 {NoFlag, 0xcccccccc, 0xffff8002}, 775 {NoFlag, 0xcccccccc, 0xffff8003}, 776 {NoFlag, 0xcccccccc, 0xffffff80}, 777 {NoFlag, 0xcccccccc, 0xffffff81}, 778 {NoFlag, 0xcccccccc, 0xffffff82}, 779 {NoFlag, 0xcccccccc, 0xffffff83}, 780 {NoFlag, 0xcccccccc, 0xffffffe0}, 781 {NoFlag, 0xcccccccc, 0xfffffffd}, 782 {NoFlag, 0xcccccccc, 0xfffffffe}, 783 {NoFlag, 0xcccccccc, 0xffffffff}, 784 {NoFlag, 0xffff8000, 0x00000000}, 785 {NoFlag, 0xffff8000, 0x00000001}, 786 {NoFlag, 0xffff8000, 0x00000002}, 787 {NoFlag, 0xffff8000, 0x00000020}, 788 {NoFlag, 0xffff8000, 0x0000007d}, 789 {NoFlag, 0xffff8000, 0x0000007e}, 790 {NoFlag, 0xffff8000, 0x0000007f}, 791 {NoFlag, 0xffff8000, 0x00007ffd}, 792 {NoFlag, 0xffff8000, 0x00007ffe}, 793 {NoFlag, 0xffff8000, 0x00007fff}, 794 {NoFlag, 0xffff8000, 0x33333333}, 795 {NoFlag, 0xffff8000, 0x55555555}, 796 {NoFlag, 0xffff8000, 0x7ffffffd}, 797 {NoFlag, 0xffff8000, 0x7ffffffe}, 798 {NoFlag, 0xffff8000, 0x7fffffff}, 799 {NoFlag, 0xffff8000, 0x80000000}, 800 {NoFlag, 0xffff8000, 0x80000001}, 801 {NoFlag, 0xffff8000, 0xaaaaaaaa}, 802 {NoFlag, 0xffff8000, 0xcccccccc}, 803 {NoFlag, 0xffff8000, 0xffff8001}, 804 {NoFlag, 0xffff8000, 0xffff8002}, 805 {NoFlag, 0xffff8000, 0xffff8003}, 806 {NoFlag, 0xffff8000, 0xffffff80}, 807 {NoFlag, 0xffff8000, 0xffffff81}, 808 {NoFlag, 0xffff8000, 0xffffff82}, 809 {NoFlag, 0xffff8000, 0xffffff83}, 810 {NoFlag, 0xffff8000, 0xffffffe0}, 811 {NoFlag, 0xffff8000, 0xfffffffd}, 812 {NoFlag, 0xffff8000, 0xfffffffe}, 813 {NoFlag, 0xffff8000, 0xffffffff}, 814 {NoFlag, 0xffff8001, 0x00000000}, 815 {NoFlag, 0xffff8001, 0x00000001}, 816 {NoFlag, 0xffff8001, 0x00000002}, 817 {NoFlag, 0xffff8001, 0x00000020}, 818 {NoFlag, 0xffff8001, 0x0000007d}, 819 {NoFlag, 0xffff8001, 0x0000007e}, 820 {NoFlag, 0xffff8001, 0x0000007f}, 821 {NoFlag, 0xffff8001, 0x00007ffd}, 822 {NoFlag, 0xffff8001, 0x00007ffe}, 823 {NoFlag, 0xffff8001, 0x00007fff}, 824 {NoFlag, 0xffff8001, 0x33333333}, 825 {NoFlag, 0xffff8001, 0x55555555}, 826 {NoFlag, 0xffff8001, 0x7ffffffd}, 827 {NoFlag, 0xffff8001, 0x7ffffffe}, 828 {NoFlag, 0xffff8001, 0x7fffffff}, 829 {NoFlag, 0xffff8001, 0x80000000}, 830 {NoFlag, 0xffff8001, 0x80000001}, 831 {NoFlag, 0xffff8001, 0xaaaaaaaa}, 832 {NoFlag, 0xffff8001, 0xcccccccc}, 833 {NoFlag, 0xffff8001, 0xffff8000}, 834 {NoFlag, 0xffff8001, 0xffff8002}, 835 {NoFlag, 0xffff8001, 0xffff8003}, 836 {NoFlag, 0xffff8001, 0xffffff80}, 837 {NoFlag, 0xffff8001, 0xffffff81}, 838 {NoFlag, 0xffff8001, 0xffffff82}, 839 {NoFlag, 0xffff8001, 0xffffff83}, 840 {NoFlag, 0xffff8001, 0xffffffe0}, 841 {NoFlag, 0xffff8001, 0xfffffffd}, 842 {NoFlag, 0xffff8001, 0xfffffffe}, 843 {NoFlag, 0xffff8001, 0xffffffff}, 844 {NoFlag, 0xffff8002, 0x00000000}, 845 {NoFlag, 0xffff8002, 0x00000001}, 846 {NoFlag, 0xffff8002, 0x00000002}, 847 {NoFlag, 0xffff8002, 0x00000020}, 848 {NoFlag, 0xffff8002, 0x0000007d}, 849 {NoFlag, 0xffff8002, 0x0000007e}, 850 {NoFlag, 0xffff8002, 0x0000007f}, 851 {NoFlag, 0xffff8002, 0x00007ffd}, 852 {NoFlag, 0xffff8002, 0x00007ffe}, 853 {NoFlag, 0xffff8002, 0x00007fff}, 854 {NoFlag, 0xffff8002, 0x33333333}, 855 {NoFlag, 0xffff8002, 0x55555555}, 856 {NoFlag, 0xffff8002, 0x7ffffffd}, 857 {NoFlag, 0xffff8002, 0x7ffffffe}, 858 {NoFlag, 0xffff8002, 0x7fffffff}, 859 {NoFlag, 0xffff8002, 0x80000000}, 860 {NoFlag, 0xffff8002, 0x80000001}, 861 {NoFlag, 0xffff8002, 0xaaaaaaaa}, 862 {NoFlag, 0xffff8002, 0xcccccccc}, 863 {NoFlag, 0xffff8002, 0xffff8000}, 864 {NoFlag, 0xffff8002, 0xffff8001}, 865 {NoFlag, 0xffff8002, 0xffff8003}, 866 {NoFlag, 0xffff8002, 0xffffff80}, 867 {NoFlag, 0xffff8002, 0xffffff81}, 868 {NoFlag, 0xffff8002, 0xffffff82}, 869 {NoFlag, 0xffff8002, 0xffffff83}, 870 {NoFlag, 0xffff8002, 0xffffffe0}, 871 {NoFlag, 0xffff8002, 0xfffffffd}, 872 {NoFlag, 0xffff8002, 0xfffffffe}, 873 {NoFlag, 0xffff8002, 0xffffffff}, 874 {NoFlag, 0xffff8003, 0x00000000}, 875 {NoFlag, 0xffff8003, 0x00000001}, 876 {NoFlag, 0xffff8003, 0x00000002}, 877 {NoFlag, 0xffff8003, 0x00000020}, 878 {NoFlag, 0xffff8003, 0x0000007d}, 879 {NoFlag, 0xffff8003, 0x0000007e}, 880 {NoFlag, 0xffff8003, 0x0000007f}, 881 {NoFlag, 0xffff8003, 0x00007ffd}, 882 {NoFlag, 0xffff8003, 0x00007ffe}, 883 {NoFlag, 0xffff8003, 0x00007fff}, 884 {NoFlag, 0xffff8003, 0x33333333}, 885 {NoFlag, 0xffff8003, 0x55555555}, 886 {NoFlag, 0xffff8003, 0x7ffffffd}, 887 {NoFlag, 0xffff8003, 0x7ffffffe}, 888 {NoFlag, 0xffff8003, 0x7fffffff}, 889 {NoFlag, 0xffff8003, 0x80000000}, 890 {NoFlag, 0xffff8003, 0x80000001}, 891 {NoFlag, 0xffff8003, 0xaaaaaaaa}, 892 {NoFlag, 0xffff8003, 0xcccccccc}, 893 {NoFlag, 0xffff8003, 0xffff8000}, 894 {NoFlag, 0xffff8003, 0xffff8001}, 895 {NoFlag, 0xffff8003, 0xffff8002}, 896 {NoFlag, 0xffff8003, 0xffffff80}, 897 {NoFlag, 0xffff8003, 0xffffff81}, 898 {NoFlag, 0xffff8003, 0xffffff82}, 899 {NoFlag, 0xffff8003, 0xffffff83}, 900 {NoFlag, 0xffff8003, 0xffffffe0}, 901 {NoFlag, 0xffff8003, 0xfffffffd}, 902 {NoFlag, 0xffff8003, 0xfffffffe}, 903 {NoFlag, 0xffff8003, 0xffffffff}, 904 {NoFlag, 0xffffff80, 0x00000000}, 905 {NoFlag, 0xffffff80, 0x00000001}, 906 {NoFlag, 0xffffff80, 0x00000002}, 907 {NoFlag, 0xffffff80, 0x00000020}, 908 {NoFlag, 0xffffff80, 0x0000007d}, 909 {NoFlag, 0xffffff80, 0x0000007e}, 910 {NoFlag, 0xffffff80, 0x0000007f}, 911 {NoFlag, 0xffffff80, 0x00007ffd}, 912 {NoFlag, 0xffffff80, 0x00007ffe}, 913 {NoFlag, 0xffffff80, 0x00007fff}, 914 {NoFlag, 0xffffff80, 0x33333333}, 915 {NoFlag, 0xffffff80, 0x55555555}, 916 {NoFlag, 0xffffff80, 0x7ffffffd}, 917 {NoFlag, 0xffffff80, 0x7ffffffe}, 918 {NoFlag, 0xffffff80, 0x7fffffff}, 919 {NoFlag, 0xffffff80, 0x80000000}, 920 {NoFlag, 0xffffff80, 0x80000001}, 921 {NoFlag, 0xffffff80, 0xaaaaaaaa}, 922 {NoFlag, 0xffffff80, 0xcccccccc}, 923 {NoFlag, 0xffffff80, 0xffff8000}, 924 {NoFlag, 0xffffff80, 0xffff8001}, 925 {NoFlag, 0xffffff80, 0xffff8002}, 926 {NoFlag, 0xffffff80, 0xffff8003}, 927 {NoFlag, 0xffffff80, 0xffffff81}, 928 {NoFlag, 0xffffff80, 0xffffff82}, 929 {NoFlag, 0xffffff80, 0xffffff83}, 930 {NoFlag, 0xffffff80, 0xffffffe0}, 931 {NoFlag, 0xffffff80, 0xfffffffd}, 932 {NoFlag, 0xffffff80, 0xfffffffe}, 933 {NoFlag, 0xffffff80, 0xffffffff}, 934 {NoFlag, 0xffffff81, 0x00000000}, 935 {NoFlag, 0xffffff81, 0x00000001}, 936 {NoFlag, 0xffffff81, 0x00000002}, 937 {NoFlag, 0xffffff81, 0x00000020}, 938 {NoFlag, 0xffffff81, 0x0000007d}, 939 {NoFlag, 0xffffff81, 0x0000007e}, 940 {NoFlag, 0xffffff81, 0x0000007f}, 941 {NoFlag, 0xffffff81, 0x00007ffd}, 942 {NoFlag, 0xffffff81, 0x00007ffe}, 943 {NoFlag, 0xffffff81, 0x00007fff}, 944 {NoFlag, 0xffffff81, 0x33333333}, 945 {NoFlag, 0xffffff81, 0x55555555}, 946 {NoFlag, 0xffffff81, 0x7ffffffd}, 947 {NoFlag, 0xffffff81, 0x7ffffffe}, 948 {NoFlag, 0xffffff81, 0x7fffffff}, 949 {NoFlag, 0xffffff81, 0x80000000}, 950 {NoFlag, 0xffffff81, 0x80000001}, 951 {NoFlag, 0xffffff81, 0xaaaaaaaa}, 952 {NoFlag, 0xffffff81, 0xcccccccc}, 953 {NoFlag, 0xffffff81, 0xffff8000}, 954 {NoFlag, 0xffffff81, 0xffff8001}, 955 {NoFlag, 0xffffff81, 0xffff8002}, 956 {NoFlag, 0xffffff81, 0xffff8003}, 957 {NoFlag, 0xffffff81, 0xffffff80}, 958 {NoFlag, 0xffffff81, 0xffffff82}, 959 {NoFlag, 0xffffff81, 0xffffff83}, 960 {NoFlag, 0xffffff81, 0xffffffe0}, 961 {NoFlag, 0xffffff81, 0xfffffffd}, 962 {NoFlag, 0xffffff81, 0xfffffffe}, 963 {NoFlag, 0xffffff81, 0xffffffff}, 964 {NoFlag, 0xffffff82, 0x00000000}, 965 {NoFlag, 0xffffff82, 0x00000001}, 966 {NoFlag, 0xffffff82, 0x00000002}, 967 {NoFlag, 0xffffff82, 0x00000020}, 968 {NoFlag, 0xffffff82, 0x0000007d}, 969 {NoFlag, 0xffffff82, 0x0000007e}, 970 {NoFlag, 0xffffff82, 0x0000007f}, 971 {NoFlag, 0xffffff82, 0x00007ffd}, 972 {NoFlag, 0xffffff82, 0x00007ffe}, 973 {NoFlag, 0xffffff82, 0x00007fff}, 974 {NoFlag, 0xffffff82, 0x33333333}, 975 {NoFlag, 0xffffff82, 0x55555555}, 976 {NoFlag, 0xffffff82, 0x7ffffffd}, 977 {NoFlag, 0xffffff82, 0x7ffffffe}, 978 {NoFlag, 0xffffff82, 0x7fffffff}, 979 {NoFlag, 0xffffff82, 0x80000000}, 980 {NoFlag, 0xffffff82, 0x80000001}, 981 {NoFlag, 0xffffff82, 0xaaaaaaaa}, 982 {NoFlag, 0xffffff82, 0xcccccccc}, 983 {NoFlag, 0xffffff82, 0xffff8000}, 984 {NoFlag, 0xffffff82, 0xffff8001}, 985 {NoFlag, 0xffffff82, 0xffff8002}, 986 {NoFlag, 0xffffff82, 0xffff8003}, 987 {NoFlag, 0xffffff82, 0xffffff80}, 988 {NoFlag, 0xffffff82, 0xffffff81}, 989 {NoFlag, 0xffffff82, 0xffffff83}, 990 {NoFlag, 0xffffff82, 0xffffffe0}, 991 {NoFlag, 0xffffff82, 0xfffffffd}, 992 {NoFlag, 0xffffff82, 0xfffffffe}, 993 {NoFlag, 0xffffff82, 0xffffffff}, 994 {NoFlag, 0xffffff83, 0x00000000}, 995 {NoFlag, 0xffffff83, 0x00000001}, 996 {NoFlag, 0xffffff83, 0x00000002}, 997 {NoFlag, 0xffffff83, 0x00000020}, 998 {NoFlag, 0xffffff83, 0x0000007d}, 999 {NoFlag, 0xffffff83, 0x0000007e}, 1000 {NoFlag, 0xffffff83, 0x0000007f}, 1001 {NoFlag, 0xffffff83, 0x00007ffd}, 1002 {NoFlag, 0xffffff83, 0x00007ffe}, 1003 {NoFlag, 0xffffff83, 0x00007fff}, 1004 {NoFlag, 0xffffff83, 0x33333333}, 1005 {NoFlag, 0xffffff83, 0x55555555}, 1006 {NoFlag, 0xffffff83, 0x7ffffffd}, 1007 {NoFlag, 0xffffff83, 0x7ffffffe}, 1008 {NoFlag, 0xffffff83, 0x7fffffff}, 1009 {NoFlag, 0xffffff83, 0x80000000}, 1010 {NoFlag, 0xffffff83, 0x80000001}, 1011 {NoFlag, 0xffffff83, 0xaaaaaaaa}, 1012 {NoFlag, 0xffffff83, 0xcccccccc}, 1013 {NoFlag, 0xffffff83, 0xffff8000}, 1014 {NoFlag, 0xffffff83, 0xffff8001}, 1015 {NoFlag, 0xffffff83, 0xffff8002}, 1016 {NoFlag, 0xffffff83, 0xffff8003}, 1017 {NoFlag, 0xffffff83, 0xffffff80}, 1018 {NoFlag, 0xffffff83, 0xffffff81}, 1019 {NoFlag, 0xffffff83, 0xffffff82}, 1020 {NoFlag, 0xffffff83, 0xffffffe0}, 1021 {NoFlag, 0xffffff83, 0xfffffffd}, 1022 {NoFlag, 0xffffff83, 0xfffffffe}, 1023 {NoFlag, 0xffffff83, 0xffffffff}, 1024 {NoFlag, 0xffffffe0, 0x00000000}, 1025 {NoFlag, 0xffffffe0, 0x00000001}, 1026 {NoFlag, 0xffffffe0, 0x00000002}, 1027 {NoFlag, 0xffffffe0, 0x00000020}, 1028 {NoFlag, 0xffffffe0, 0x0000007d}, 1029 {NoFlag, 0xffffffe0, 0x0000007e}, 1030 {NoFlag, 0xffffffe0, 0x0000007f}, 1031 {NoFlag, 0xffffffe0, 0x00007ffd}, 1032 {NoFlag, 0xffffffe0, 0x00007ffe}, 1033 {NoFlag, 0xffffffe0, 0x00007fff}, 1034 {NoFlag, 0xffffffe0, 0x33333333}, 1035 {NoFlag, 0xffffffe0, 0x55555555}, 1036 {NoFlag, 0xffffffe0, 0x7ffffffd}, 1037 {NoFlag, 0xffffffe0, 0x7ffffffe}, 1038 {NoFlag, 0xffffffe0, 0x7fffffff}, 1039 {NoFlag, 0xffffffe0, 0x80000000}, 1040 {NoFlag, 0xffffffe0, 0x80000001}, 1041 {NoFlag, 0xffffffe0, 0xaaaaaaaa}, 1042 {NoFlag, 0xffffffe0, 0xcccccccc}, 1043 {NoFlag, 0xffffffe0, 0xffff8000}, 1044 {NoFlag, 0xffffffe0, 0xffff8001}, 1045 {NoFlag, 0xffffffe0, 0xffff8002}, 1046 {NoFlag, 0xffffffe0, 0xffff8003}, 1047 {NoFlag, 0xffffffe0, 0xffffff80}, 1048 {NoFlag, 0xffffffe0, 0xffffff81}, 1049 {NoFlag, 0xffffffe0, 0xffffff82}, 1050 {NoFlag, 0xffffffe0, 0xffffff83}, 1051 {NoFlag, 0xffffffe0, 0xfffffffd}, 1052 {NoFlag, 0xffffffe0, 0xfffffffe}, 1053 {NoFlag, 0xffffffe0, 0xffffffff}, 1054 {NoFlag, 0xfffffffd, 0x00000000}, 1055 {NoFlag, 0xfffffffd, 0x00000001}, 1056 {NoFlag, 0xfffffffd, 0x00000002}, 1057 {NoFlag, 0xfffffffd, 0x00000020}, 1058 {NoFlag, 0xfffffffd, 0x0000007d}, 1059 {NoFlag, 0xfffffffd, 0x0000007e}, 1060 {NoFlag, 0xfffffffd, 0x0000007f}, 1061 {NoFlag, 0xfffffffd, 0x00007ffd}, 1062 {NoFlag, 0xfffffffd, 0x00007ffe}, 1063 {NoFlag, 0xfffffffd, 0x00007fff}, 1064 {NoFlag, 0xfffffffd, 0x33333333}, 1065 {NoFlag, 0xfffffffd, 0x55555555}, 1066 {NoFlag, 0xfffffffd, 0x7ffffffd}, 1067 {NoFlag, 0xfffffffd, 0x7ffffffe}, 1068 {NoFlag, 0xfffffffd, 0x7fffffff}, 1069 {NoFlag, 0xfffffffd, 0x80000000}, 1070 {NoFlag, 0xfffffffd, 0x80000001}, 1071 {NoFlag, 0xfffffffd, 0xaaaaaaaa}, 1072 {NoFlag, 0xfffffffd, 0xcccccccc}, 1073 {NoFlag, 0xfffffffd, 0xffff8000}, 1074 {NoFlag, 0xfffffffd, 0xffff8001}, 1075 {NoFlag, 0xfffffffd, 0xffff8002}, 1076 {NoFlag, 0xfffffffd, 0xffff8003}, 1077 {NoFlag, 0xfffffffd, 0xffffff80}, 1078 {NoFlag, 0xfffffffd, 0xffffff81}, 1079 {NoFlag, 0xfffffffd, 0xffffff82}, 1080 {NoFlag, 0xfffffffd, 0xffffff83}, 1081 {NoFlag, 0xfffffffd, 0xffffffe0}, 1082 {NoFlag, 0xfffffffd, 0xfffffffe}, 1083 {NoFlag, 0xfffffffd, 0xffffffff}, 1084 {NoFlag, 0xfffffffe, 0x00000000}, 1085 {NoFlag, 0xfffffffe, 0x00000001}, 1086 {NoFlag, 0xfffffffe, 0x00000002}, 1087 {NoFlag, 0xfffffffe, 0x00000020}, 1088 {NoFlag, 0xfffffffe, 0x0000007d}, 1089 {NoFlag, 0xfffffffe, 0x0000007e}, 1090 {NoFlag, 0xfffffffe, 0x0000007f}, 1091 {NoFlag, 0xfffffffe, 0x00007ffd}, 1092 {NoFlag, 0xfffffffe, 0x00007ffe}, 1093 {NoFlag, 0xfffffffe, 0x00007fff}, 1094 {NoFlag, 0xfffffffe, 0x33333333}, 1095 {NoFlag, 0xfffffffe, 0x55555555}, 1096 {NoFlag, 0xfffffffe, 0x7ffffffd}, 1097 {NoFlag, 0xfffffffe, 0x7ffffffe}, 1098 {NoFlag, 0xfffffffe, 0x7fffffff}, 1099 {NoFlag, 0xfffffffe, 0x80000000}, 1100 {NoFlag, 0xfffffffe, 0x80000001}, 1101 {NoFlag, 0xfffffffe, 0xaaaaaaaa}, 1102 {NoFlag, 0xfffffffe, 0xcccccccc}, 1103 {NoFlag, 0xfffffffe, 0xffff8000}, 1104 {NoFlag, 0xfffffffe, 0xffff8001}, 1105 {NoFlag, 0xfffffffe, 0xffff8002}, 1106 {NoFlag, 0xfffffffe, 0xffff8003}, 1107 {NoFlag, 0xfffffffe, 0xffffff80}, 1108 {NoFlag, 0xfffffffe, 0xffffff81}, 1109 {NoFlag, 0xfffffffe, 0xffffff82}, 1110 {NoFlag, 0xfffffffe, 0xffffff83}, 1111 {NoFlag, 0xfffffffe, 0xffffffe0}, 1112 {NoFlag, 0xfffffffe, 0xfffffffd}, 1113 {NoFlag, 0xfffffffe, 0xffffffff}, 1114 {NoFlag, 0xffffffff, 0x00000000}, 1115 {NoFlag, 0xffffffff, 0x00000001}, 1116 {NoFlag, 0xffffffff, 0x00000002}, 1117 {NoFlag, 0xffffffff, 0x00000020}, 1118 {NoFlag, 0xffffffff, 0x0000007d}, 1119 {NoFlag, 0xffffffff, 0x0000007e}, 1120 {NoFlag, 0xffffffff, 0x0000007f}, 1121 {NoFlag, 0xffffffff, 0x00007ffd}, 1122 {NoFlag, 0xffffffff, 0x00007ffe}, 1123 {NoFlag, 0xffffffff, 0x00007fff}, 1124 {NoFlag, 0xffffffff, 0x33333333}, 1125 {NoFlag, 0xffffffff, 0x55555555}, 1126 {NoFlag, 0xffffffff, 0x7ffffffd}, 1127 {NoFlag, 0xffffffff, 0x7ffffffe}, 1128 {NoFlag, 0xffffffff, 0x7fffffff}, 1129 {NoFlag, 0xffffffff, 0x80000000}, 1130 {NoFlag, 0xffffffff, 0x80000001}, 1131 {NoFlag, 0xffffffff, 0xaaaaaaaa}, 1132 {NoFlag, 0xffffffff, 0xcccccccc}, 1133 {NoFlag, 0xffffffff, 0xffff8000}, 1134 {NoFlag, 0xffffffff, 0xffff8001}, 1135 {NoFlag, 0xffffffff, 0xffff8002}, 1136 {NoFlag, 0xffffffff, 0xffff8003}, 1137 {NoFlag, 0xffffffff, 0xffffff80}, 1138 {NoFlag, 0xffffffff, 0xffffff81}, 1139 {NoFlag, 0xffffffff, 0xffffff82}, 1140 {NoFlag, 0xffffffff, 0xffffff83}, 1141 {NoFlag, 0xffffffff, 0xffffffe0}, 1142 {NoFlag, 0xffffffff, 0xfffffffd}, 1143 {NoFlag, 0xffffffff, 0xfffffffe}}; 1144 1145 1146 // A loop will be generated for each element of this array. 1147 const TestLoopData kTests[] = { 1148 {{eq, r0, r0}, 1149 "eq r0 r0", 1150 "Condition_eq_r0_r0", 1151 ARRAY_SIZE(kCondition), 1152 kCondition}, 1153 {{ne, r0, r0}, 1154 "ne r0 r0", 1155 "Condition_ne_r0_r0", 1156 ARRAY_SIZE(kCondition), 1157 kCondition}, 1158 {{cs, r0, r0}, 1159 "cs r0 r0", 1160 "Condition_cs_r0_r0", 1161 ARRAY_SIZE(kCondition), 1162 kCondition}, 1163 {{cc, r0, r0}, 1164 "cc r0 r0", 1165 "Condition_cc_r0_r0", 1166 ARRAY_SIZE(kCondition), 1167 kCondition}, 1168 {{mi, r0, r0}, 1169 "mi r0 r0", 1170 "Condition_mi_r0_r0", 1171 ARRAY_SIZE(kCondition), 1172 kCondition}, 1173 {{pl, r0, r0}, 1174 "pl r0 r0", 1175 "Condition_pl_r0_r0", 1176 ARRAY_SIZE(kCondition), 1177 kCondition}, 1178 {{vs, r0, r0}, 1179 "vs r0 r0", 1180 "Condition_vs_r0_r0", 1181 ARRAY_SIZE(kCondition), 1182 kCondition}, 1183 {{vc, r0, r0}, 1184 "vc r0 r0", 1185 "Condition_vc_r0_r0", 1186 ARRAY_SIZE(kCondition), 1187 kCondition}, 1188 {{hi, r0, r0}, 1189 "hi r0 r0", 1190 "Condition_hi_r0_r0", 1191 ARRAY_SIZE(kCondition), 1192 kCondition}, 1193 {{ls, r0, r0}, 1194 "ls r0 r0", 1195 "Condition_ls_r0_r0", 1196 ARRAY_SIZE(kCondition), 1197 kCondition}, 1198 {{ge, r0, r0}, 1199 "ge r0 r0", 1200 "Condition_ge_r0_r0", 1201 ARRAY_SIZE(kCondition), 1202 kCondition}, 1203 {{lt, r0, r0}, 1204 "lt r0 r0", 1205 "Condition_lt_r0_r0", 1206 ARRAY_SIZE(kCondition), 1207 kCondition}, 1208 {{gt, r0, r0}, 1209 "gt r0 r0", 1210 "Condition_gt_r0_r0", 1211 ARRAY_SIZE(kCondition), 1212 kCondition}, 1213 {{le, r0, r0}, 1214 "le r0 r0", 1215 "Condition_le_r0_r0", 1216 ARRAY_SIZE(kCondition), 1217 kCondition}, 1218 {{al, r0, r0}, 1219 "al r0 r0", 1220 "Condition_al_r0_r0", 1221 ARRAY_SIZE(kCondition), 1222 kCondition}, 1223 {{al, r0, r0}, "al r0 r0", "RdIsRn_al_r0_r0", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1224 {{al, r1, r1}, "al r1 r1", "RdIsRn_al_r1_r1", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1225 {{al, r2, r2}, "al r2 r2", "RdIsRn_al_r2_r2", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1226 {{al, r3, r3}, "al r3 r3", "RdIsRn_al_r3_r3", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1227 {{al, r4, r4}, "al r4 r4", "RdIsRn_al_r4_r4", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1228 {{al, r5, r5}, "al r5 r5", "RdIsRn_al_r5_r5", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1229 {{al, r6, r6}, "al r6 r6", "RdIsRn_al_r6_r6", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1230 {{al, r7, r7}, "al r7 r7", "RdIsRn_al_r7_r7", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1231 {{al, r8, r8}, "al r8 r8", "RdIsRn_al_r8_r8", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1232 {{al, r9, r9}, "al r9 r9", "RdIsRn_al_r9_r9", ARRAY_SIZE(kRdIsRn), kRdIsRn}, 1233 {{al, r10, r10}, 1234 "al r10 r10", 1235 "RdIsRn_al_r10_r10", 1236 ARRAY_SIZE(kRdIsRn), 1237 kRdIsRn}, 1238 {{al, r11, r11}, 1239 "al r11 r11", 1240 "RdIsRn_al_r11_r11", 1241 ARRAY_SIZE(kRdIsRn), 1242 kRdIsRn}, 1243 {{al, r12, r12}, 1244 "al r12 r12", 1245 "RdIsRn_al_r12_r12", 1246 ARRAY_SIZE(kRdIsRn), 1247 kRdIsRn}, 1248 {{al, r14, r14}, 1249 "al r14 r14", 1250 "RdIsRn_al_r14_r14", 1251 ARRAY_SIZE(kRdIsRn), 1252 kRdIsRn}, 1253 {{al, r12, r3}, 1254 "al r12 r3", 1255 "RdIsNotRn_al_r12_r3", 1256 ARRAY_SIZE(kRdIsNotRn), 1257 kRdIsNotRn}, 1258 {{al, r5, r11}, 1259 "al r5 r11", 1260 "RdIsNotRn_al_r5_r11", 1261 ARRAY_SIZE(kRdIsNotRn), 1262 kRdIsNotRn}, 1263 {{al, r3, r0}, 1264 "al r3 r0", 1265 "RdIsNotRn_al_r3_r0", 1266 ARRAY_SIZE(kRdIsNotRn), 1267 kRdIsNotRn}, 1268 {{al, r0, r14}, 1269 "al r0 r14", 1270 "RdIsNotRn_al_r0_r14", 1271 ARRAY_SIZE(kRdIsNotRn), 1272 kRdIsNotRn}, 1273 {{al, r8, r11}, 1274 "al r8 r11", 1275 "RdIsNotRn_al_r8_r11", 1276 ARRAY_SIZE(kRdIsNotRn), 1277 kRdIsNotRn}, 1278 {{al, r5, r0}, 1279 "al r5 r0", 1280 "RdIsNotRn_al_r5_r0", 1281 ARRAY_SIZE(kRdIsNotRn), 1282 kRdIsNotRn}, 1283 {{al, r2, r7}, 1284 "al r2 r7", 1285 "RdIsNotRn_al_r2_r7", 1286 ARRAY_SIZE(kRdIsNotRn), 1287 kRdIsNotRn}, 1288 {{al, r12, r1}, 1289 "al r12 r1", 1290 "RdIsNotRn_al_r12_r1", 1291 ARRAY_SIZE(kRdIsNotRn), 1292 kRdIsNotRn}, 1293 {{al, r4, r10}, 1294 "al r4 r10", 1295 "RdIsNotRn_al_r4_r10", 1296 ARRAY_SIZE(kRdIsNotRn), 1297 kRdIsNotRn}, 1298 {{al, r6, r5}, 1299 "al r6 r5", 1300 "RdIsNotRn_al_r6_r5", 1301 ARRAY_SIZE(kRdIsNotRn), 1302 kRdIsNotRn}}; 1303 1304 // We record all inputs to the instructions as outputs. This way, we also check 1305 // that what shouldn't change didn't change. 1306 struct TestResult { 1307 size_t output_size; 1308 const Inputs* outputs; 1309 }; 1310 1311 // These headers each contain an array of `TestResult` with the reference output 1312 // values. The reference arrays are names `kReference{mnemonic}`. 1313 #include "aarch32/traces/simulator-cond-rd-rn-a32-clz.h" 1314 #include "aarch32/traces/simulator-cond-rd-rn-a32-rbit.h" 1315 #include "aarch32/traces/simulator-cond-rd-rn-a32-rev.h" 1316 #include "aarch32/traces/simulator-cond-rd-rn-a32-rev16.h" 1317 #include "aarch32/traces/simulator-cond-rd-rn-a32-revsh.h" 1318 #include "aarch32/traces/simulator-cond-rd-rn-a32-rrx.h" 1319 #include "aarch32/traces/simulator-cond-rd-rn-a32-rrxs.h" 1320 1321 1322 // The maximum number of errors to report in detail for each test. 1323 const unsigned kErrorReportLimit = 8; 1324 1325 typedef void (MacroAssembler::*Fn)(Condition cond, Register rd, Register rn); 1326 1327 void TestHelper(Fn instruction, 1328 const char* mnemonic, 1329 const TestResult reference[]) { 1330 SETUP(); 1331 masm.UseA32(); 1332 START(); 1333 1334 // Data to compare to `reference`. 1335 TestResult* results[ARRAY_SIZE(kTests)]; 1336 1337 // Test cases for memory bound instructions may allocate a buffer and save its 1338 // address in this array. 1339 byte* scratch_memory_buffers[ARRAY_SIZE(kTests)]; 1340 1341 // Generate a loop for each element in `kTests`. Each loop tests one specific 1342 // instruction. 1343 for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) { 1344 // Allocate results on the heap for this test. 1345 results[i] = new TestResult; 1346 results[i]->outputs = new Inputs[kTests[i].input_size]; 1347 results[i]->output_size = kTests[i].input_size; 1348 1349 size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size; 1350 VIXL_ASSERT(IsUint32(input_stride)); 1351 1352 scratch_memory_buffers[i] = NULL; 1353 1354 Label loop; 1355 UseScratchRegisterScope scratch_registers(&masm); 1356 // Include all registers from r0 ro r12. 1357 scratch_registers.Include(RegisterList(0x1fff)); 1358 1359 // Values to pass to the macro-assembler. 1360 Condition cond = kTests[i].operands.cond; 1361 Register rd = kTests[i].operands.rd; 1362 Register rn = kTests[i].operands.rn; 1363 scratch_registers.Exclude(rd); 1364 scratch_registers.Exclude(rn); 1365 1366 // Allocate reserved registers for our own use. 1367 Register input_ptr = scratch_registers.Acquire(); 1368 Register input_end = scratch_registers.Acquire(); 1369 Register result_ptr = scratch_registers.Acquire(); 1370 1371 // Initialize `input_ptr` to the first element and `input_end` the address 1372 // after the array. 1373 __ Mov(input_ptr, Operand::From(kTests[i].inputs)); 1374 __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride)); 1375 __ Mov(result_ptr, Operand::From(results[i]->outputs)); 1376 __ Bind(&loop); 1377 1378 { 1379 UseScratchRegisterScope temp_registers(&masm); 1380 Register nzcv_bits = temp_registers.Acquire(); 1381 Register saved_q_bit = temp_registers.Acquire(); 1382 // Save the `Q` bit flag. 1383 __ Mrs(saved_q_bit, APSR); 1384 __ And(saved_q_bit, saved_q_bit, QFlag); 1385 // Set the `NZCV` and `Q` flags together. 1386 __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr))); 1387 __ Orr(nzcv_bits, nzcv_bits, saved_q_bit); 1388 __ Msr(APSR_nzcvq, nzcv_bits); 1389 } 1390 __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd))); 1391 __ Ldr(rn, MemOperand(input_ptr, offsetof(Inputs, rn))); 1392 1393 (masm.*instruction)(cond, rd, rn); 1394 1395 { 1396 UseScratchRegisterScope temp_registers(&masm); 1397 Register nzcv_bits = temp_registers.Acquire(); 1398 __ Mrs(nzcv_bits, APSR); 1399 // Only record the NZCV bits. 1400 __ And(nzcv_bits, nzcv_bits, NZCVFlag); 1401 __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr))); 1402 } 1403 __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd))); 1404 __ Str(rn, MemOperand(result_ptr, offsetof(Inputs, rn))); 1405 1406 // Advance the result pointer. 1407 __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0]))); 1408 // Loop back until `input_ptr` is lower than `input_base`. 1409 __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0]))); 1410 __ Cmp(input_ptr, input_end); 1411 __ B(ne, &loop); 1412 } 1413 1414 END(); 1415 1416 RUN(); 1417 1418 if (Test::generate_test_trace()) { 1419 // Print the results. 1420 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1421 printf("const Inputs kOutputs_%s_%s[] = {\n", 1422 mnemonic, 1423 kTests[i].identifier); 1424 for (size_t j = 0; j < results[i]->output_size; j++) { 1425 printf(" { "); 1426 printf("0x%08" PRIx32, results[i]->outputs[j].apsr); 1427 printf(", "); 1428 printf("0x%08" PRIx32, results[i]->outputs[j].rd); 1429 printf(", "); 1430 printf("0x%08" PRIx32, results[i]->outputs[j].rn); 1431 printf(" },\n"); 1432 } 1433 printf("};\n"); 1434 } 1435 printf("const TestResult kReference%s[] = {\n", mnemonic); 1436 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1437 printf(" {\n"); 1438 printf(" ARRAY_SIZE(kOutputs_%s_%s),\n", 1439 mnemonic, 1440 kTests[i].identifier); 1441 printf(" kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier); 1442 printf(" },\n"); 1443 } 1444 printf("};\n"); 1445 } else if (kCheckSimulatorTestResults) { 1446 // Check the results. 1447 unsigned total_error_count = 0; 1448 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1449 bool instruction_has_errors = false; 1450 for (size_t j = 0; j < kTests[i].input_size; j++) { 1451 uint32_t apsr = results[i]->outputs[j].apsr; 1452 uint32_t rd = results[i]->outputs[j].rd; 1453 uint32_t rn = results[i]->outputs[j].rn; 1454 uint32_t apsr_input = kTests[i].inputs[j].apsr; 1455 uint32_t rd_input = kTests[i].inputs[j].rd; 1456 uint32_t rn_input = kTests[i].inputs[j].rn; 1457 uint32_t apsr_ref = reference[i].outputs[j].apsr; 1458 uint32_t rd_ref = reference[i].outputs[j].rd; 1459 uint32_t rn_ref = reference[i].outputs[j].rn; 1460 1461 if (((apsr != apsr_ref) || (rd != rd_ref) || (rn != rn_ref)) && 1462 (++total_error_count <= kErrorReportLimit)) { 1463 // Print the instruction once even if it triggered multiple failures. 1464 if (!instruction_has_errors) { 1465 printf("Error(s) when testing \"%s %s\":\n", 1466 mnemonic, 1467 kTests[i].operands_description); 1468 instruction_has_errors = true; 1469 } 1470 // Print subsequent errors. 1471 printf(" Input: "); 1472 printf("0x%08" PRIx32, apsr_input); 1473 printf(", "); 1474 printf("0x%08" PRIx32, rd_input); 1475 printf(", "); 1476 printf("0x%08" PRIx32, rn_input); 1477 printf("\n"); 1478 printf(" Expected: "); 1479 printf("0x%08" PRIx32, apsr_ref); 1480 printf(", "); 1481 printf("0x%08" PRIx32, rd_ref); 1482 printf(", "); 1483 printf("0x%08" PRIx32, rn_ref); 1484 printf("\n"); 1485 printf(" Found: "); 1486 printf("0x%08" PRIx32, apsr); 1487 printf(", "); 1488 printf("0x%08" PRIx32, rd); 1489 printf(", "); 1490 printf("0x%08" PRIx32, rn); 1491 printf("\n\n"); 1492 } 1493 } 1494 } 1495 1496 if (total_error_count > kErrorReportLimit) { 1497 printf("%u other errors follow.\n", 1498 total_error_count - kErrorReportLimit); 1499 } 1500 VIXL_CHECK(total_error_count == 0); 1501 } else { 1502 VIXL_WARNING("Assembled the code, but did not run anything.\n"); 1503 } 1504 1505 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1506 delete[] results[i]->outputs; 1507 delete results[i]; 1508 delete[] scratch_memory_buffers[i]; 1509 } 1510 1511 TEARDOWN(); 1512 } 1513 1514 // Instantiate tests for each instruction in the list. 1515 // TODO: Remove this limitation by having a sandboxing mechanism. 1516 #if defined(VIXL_HOST_POINTER_32) 1517 #define TEST(mnemonic) \ 1518 void Test_##mnemonic() { \ 1519 TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \ 1520 } \ 1521 Test test_##mnemonic("AARCH32_SIMULATOR_COND_RD_RN_A32_" #mnemonic, \ 1522 &Test_##mnemonic); 1523 #else 1524 #define TEST(mnemonic) \ 1525 void Test_##mnemonic() { \ 1526 VIXL_WARNING("This test can only run on a 32-bit host.\n"); \ 1527 USE(TestHelper); \ 1528 } \ 1529 Test test_##mnemonic("AARCH32_SIMULATOR_COND_RD_RN_A32_" #mnemonic, \ 1530 &Test_##mnemonic); 1531 #endif 1532 1533 FOREACH_INSTRUCTION(TEST) 1534 #undef TEST 1535 1536 } // namespace 1537 #endif 1538 1539 } // namespace aarch32 1540 } // namespace vixl 1541