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(Orr) \ 129 M(Orrs) \ 130 M(Rsb) \ 131 M(Rsbs) \ 132 M(Rsc) \ 133 M(Rscs) \ 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_A32 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 kCondition[] = {{NFlag, 0xabababab, 0xabababab}, 181 {ZFlag, 0xabababab, 0xabababab}, 182 {CFlag, 0xabababab, 0xabababab}, 183 {VFlag, 0xabababab, 0xabababab}, 184 {NZFlag, 0xabababab, 0xabababab}, 185 {NCFlag, 0xabababab, 0xabababab}, 186 {NVFlag, 0xabababab, 0xabababab}, 187 {ZCFlag, 0xabababab, 0xabababab}, 188 {ZVFlag, 0xabababab, 0xabababab}, 189 {CVFlag, 0xabababab, 0xabababab}, 190 {NZCFlag, 0xabababab, 0xabababab}, 191 {NZVFlag, 0xabababab, 0xabababab}, 192 {NCVFlag, 0xabababab, 0xabababab}, 193 {ZCVFlag, 0xabababab, 0xabababab}, 194 {NZCVFlag, 0xabababab, 0xabababab}}; 195 196 static const Inputs kRdIsRn[] = {{NoFlag, 0x00000000, 0x00000000}, 197 {NoFlag, 0x00000001, 0x00000001}, 198 {NoFlag, 0x00000002, 0x00000002}, 199 {NoFlag, 0x00000020, 0x00000020}, 200 {NoFlag, 0x0000007d, 0x0000007d}, 201 {NoFlag, 0x0000007e, 0x0000007e}, 202 {NoFlag, 0x0000007f, 0x0000007f}, 203 {NoFlag, 0x00007ffd, 0x00007ffd}, 204 {NoFlag, 0x00007ffe, 0x00007ffe}, 205 {NoFlag, 0x00007fff, 0x00007fff}, 206 {NoFlag, 0x33333333, 0x33333333}, 207 {NoFlag, 0x55555555, 0x55555555}, 208 {NoFlag, 0x7ffffffd, 0x7ffffffd}, 209 {NoFlag, 0x7ffffffe, 0x7ffffffe}, 210 {NoFlag, 0x7fffffff, 0x7fffffff}, 211 {NoFlag, 0x80000000, 0x80000000}, 212 {NoFlag, 0x80000001, 0x80000001}, 213 {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa}, 214 {NoFlag, 0xcccccccc, 0xcccccccc}, 215 {NoFlag, 0xffff8000, 0xffff8000}, 216 {NoFlag, 0xffff8001, 0xffff8001}, 217 {NoFlag, 0xffff8002, 0xffff8002}, 218 {NoFlag, 0xffff8003, 0xffff8003}, 219 {NoFlag, 0xffffff80, 0xffffff80}, 220 {NoFlag, 0xffffff81, 0xffffff81}, 221 {NoFlag, 0xffffff82, 0xffffff82}, 222 {NoFlag, 0xffffff83, 0xffffff83}, 223 {NoFlag, 0xffffffe0, 0xffffffe0}, 224 {NoFlag, 0xfffffffd, 0xfffffffd}, 225 {NoFlag, 0xfffffffe, 0xfffffffe}, 226 {NoFlag, 0xffffffff, 0xffffffff}}; 227 228 static const Inputs kRdIsNotRn[] = {{NoFlag, 0x00000000, 0x00000000}, 229 {NoFlag, 0x00000000, 0x00000001}, 230 {NoFlag, 0x00000000, 0x00000002}, 231 {NoFlag, 0x00000000, 0x00000020}, 232 {NoFlag, 0x00000000, 0x0000007d}, 233 {NoFlag, 0x00000000, 0x0000007e}, 234 {NoFlag, 0x00000000, 0x0000007f}, 235 {NoFlag, 0x00000000, 0x00007ffd}, 236 {NoFlag, 0x00000000, 0x00007ffe}, 237 {NoFlag, 0x00000000, 0x00007fff}, 238 {NoFlag, 0x00000000, 0x33333333}, 239 {NoFlag, 0x00000000, 0x55555555}, 240 {NoFlag, 0x00000000, 0x7ffffffd}, 241 {NoFlag, 0x00000000, 0x7ffffffe}, 242 {NoFlag, 0x00000000, 0x7fffffff}, 243 {NoFlag, 0x00000000, 0x80000000}, 244 {NoFlag, 0x00000000, 0x80000001}, 245 {NoFlag, 0x00000000, 0xaaaaaaaa}, 246 {NoFlag, 0x00000000, 0xcccccccc}, 247 {NoFlag, 0x00000000, 0xffff8000}, 248 {NoFlag, 0x00000000, 0xffff8001}, 249 {NoFlag, 0x00000000, 0xffff8002}, 250 {NoFlag, 0x00000000, 0xffff8003}, 251 {NoFlag, 0x00000000, 0xffffff80}, 252 {NoFlag, 0x00000000, 0xffffff81}, 253 {NoFlag, 0x00000000, 0xffffff82}, 254 {NoFlag, 0x00000000, 0xffffff83}, 255 {NoFlag, 0x00000000, 0xffffffe0}, 256 {NoFlag, 0x00000000, 0xfffffffd}, 257 {NoFlag, 0x00000000, 0xfffffffe}, 258 {NoFlag, 0x00000000, 0xffffffff}, 259 {NoFlag, 0x00000001, 0x00000000}, 260 {NoFlag, 0x00000001, 0x00000001}, 261 {NoFlag, 0x00000001, 0x00000002}, 262 {NoFlag, 0x00000001, 0x00000020}, 263 {NoFlag, 0x00000001, 0x0000007d}, 264 {NoFlag, 0x00000001, 0x0000007e}, 265 {NoFlag, 0x00000001, 0x0000007f}, 266 {NoFlag, 0x00000001, 0x00007ffd}, 267 {NoFlag, 0x00000001, 0x00007ffe}, 268 {NoFlag, 0x00000001, 0x00007fff}, 269 {NoFlag, 0x00000001, 0x33333333}, 270 {NoFlag, 0x00000001, 0x55555555}, 271 {NoFlag, 0x00000001, 0x7ffffffd}, 272 {NoFlag, 0x00000001, 0x7ffffffe}, 273 {NoFlag, 0x00000001, 0x7fffffff}, 274 {NoFlag, 0x00000001, 0x80000000}, 275 {NoFlag, 0x00000001, 0x80000001}, 276 {NoFlag, 0x00000001, 0xaaaaaaaa}, 277 {NoFlag, 0x00000001, 0xcccccccc}, 278 {NoFlag, 0x00000001, 0xffff8000}, 279 {NoFlag, 0x00000001, 0xffff8001}, 280 {NoFlag, 0x00000001, 0xffff8002}, 281 {NoFlag, 0x00000001, 0xffff8003}, 282 {NoFlag, 0x00000001, 0xffffff80}, 283 {NoFlag, 0x00000001, 0xffffff81}, 284 {NoFlag, 0x00000001, 0xffffff82}, 285 {NoFlag, 0x00000001, 0xffffff83}, 286 {NoFlag, 0x00000001, 0xffffffe0}, 287 {NoFlag, 0x00000001, 0xfffffffd}, 288 {NoFlag, 0x00000001, 0xfffffffe}, 289 {NoFlag, 0x00000001, 0xffffffff}, 290 {NoFlag, 0x00000002, 0x00000000}, 291 {NoFlag, 0x00000002, 0x00000001}, 292 {NoFlag, 0x00000002, 0x00000002}, 293 {NoFlag, 0x00000002, 0x00000020}, 294 {NoFlag, 0x00000002, 0x0000007d}, 295 {NoFlag, 0x00000002, 0x0000007e}, 296 {NoFlag, 0x00000002, 0x0000007f}, 297 {NoFlag, 0x00000002, 0x00007ffd}, 298 {NoFlag, 0x00000002, 0x00007ffe}, 299 {NoFlag, 0x00000002, 0x00007fff}, 300 {NoFlag, 0x00000002, 0x33333333}, 301 {NoFlag, 0x00000002, 0x55555555}, 302 {NoFlag, 0x00000002, 0x7ffffffd}, 303 {NoFlag, 0x00000002, 0x7ffffffe}, 304 {NoFlag, 0x00000002, 0x7fffffff}, 305 {NoFlag, 0x00000002, 0x80000000}, 306 {NoFlag, 0x00000002, 0x80000001}, 307 {NoFlag, 0x00000002, 0xaaaaaaaa}, 308 {NoFlag, 0x00000002, 0xcccccccc}, 309 {NoFlag, 0x00000002, 0xffff8000}, 310 {NoFlag, 0x00000002, 0xffff8001}, 311 {NoFlag, 0x00000002, 0xffff8002}, 312 {NoFlag, 0x00000002, 0xffff8003}, 313 {NoFlag, 0x00000002, 0xffffff80}, 314 {NoFlag, 0x00000002, 0xffffff81}, 315 {NoFlag, 0x00000002, 0xffffff82}, 316 {NoFlag, 0x00000002, 0xffffff83}, 317 {NoFlag, 0x00000002, 0xffffffe0}, 318 {NoFlag, 0x00000002, 0xfffffffd}, 319 {NoFlag, 0x00000002, 0xfffffffe}, 320 {NoFlag, 0x00000002, 0xffffffff}, 321 {NoFlag, 0x00000020, 0x00000000}, 322 {NoFlag, 0x00000020, 0x00000001}, 323 {NoFlag, 0x00000020, 0x00000002}, 324 {NoFlag, 0x00000020, 0x00000020}, 325 {NoFlag, 0x00000020, 0x0000007d}, 326 {NoFlag, 0x00000020, 0x0000007e}, 327 {NoFlag, 0x00000020, 0x0000007f}, 328 {NoFlag, 0x00000020, 0x00007ffd}, 329 {NoFlag, 0x00000020, 0x00007ffe}, 330 {NoFlag, 0x00000020, 0x00007fff}, 331 {NoFlag, 0x00000020, 0x33333333}, 332 {NoFlag, 0x00000020, 0x55555555}, 333 {NoFlag, 0x00000020, 0x7ffffffd}, 334 {NoFlag, 0x00000020, 0x7ffffffe}, 335 {NoFlag, 0x00000020, 0x7fffffff}, 336 {NoFlag, 0x00000020, 0x80000000}, 337 {NoFlag, 0x00000020, 0x80000001}, 338 {NoFlag, 0x00000020, 0xaaaaaaaa}, 339 {NoFlag, 0x00000020, 0xcccccccc}, 340 {NoFlag, 0x00000020, 0xffff8000}, 341 {NoFlag, 0x00000020, 0xffff8001}, 342 {NoFlag, 0x00000020, 0xffff8002}, 343 {NoFlag, 0x00000020, 0xffff8003}, 344 {NoFlag, 0x00000020, 0xffffff80}, 345 {NoFlag, 0x00000020, 0xffffff81}, 346 {NoFlag, 0x00000020, 0xffffff82}, 347 {NoFlag, 0x00000020, 0xffffff83}, 348 {NoFlag, 0x00000020, 0xffffffe0}, 349 {NoFlag, 0x00000020, 0xfffffffd}, 350 {NoFlag, 0x00000020, 0xfffffffe}, 351 {NoFlag, 0x00000020, 0xffffffff}, 352 {NoFlag, 0x0000007d, 0x00000000}, 353 {NoFlag, 0x0000007d, 0x00000001}, 354 {NoFlag, 0x0000007d, 0x00000002}, 355 {NoFlag, 0x0000007d, 0x00000020}, 356 {NoFlag, 0x0000007d, 0x0000007d}, 357 {NoFlag, 0x0000007d, 0x0000007e}, 358 {NoFlag, 0x0000007d, 0x0000007f}, 359 {NoFlag, 0x0000007d, 0x00007ffd}, 360 {NoFlag, 0x0000007d, 0x00007ffe}, 361 {NoFlag, 0x0000007d, 0x00007fff}, 362 {NoFlag, 0x0000007d, 0x33333333}, 363 {NoFlag, 0x0000007d, 0x55555555}, 364 {NoFlag, 0x0000007d, 0x7ffffffd}, 365 {NoFlag, 0x0000007d, 0x7ffffffe}, 366 {NoFlag, 0x0000007d, 0x7fffffff}, 367 {NoFlag, 0x0000007d, 0x80000000}, 368 {NoFlag, 0x0000007d, 0x80000001}, 369 {NoFlag, 0x0000007d, 0xaaaaaaaa}, 370 {NoFlag, 0x0000007d, 0xcccccccc}, 371 {NoFlag, 0x0000007d, 0xffff8000}, 372 {NoFlag, 0x0000007d, 0xffff8001}, 373 {NoFlag, 0x0000007d, 0xffff8002}, 374 {NoFlag, 0x0000007d, 0xffff8003}, 375 {NoFlag, 0x0000007d, 0xffffff80}, 376 {NoFlag, 0x0000007d, 0xffffff81}, 377 {NoFlag, 0x0000007d, 0xffffff82}, 378 {NoFlag, 0x0000007d, 0xffffff83}, 379 {NoFlag, 0x0000007d, 0xffffffe0}, 380 {NoFlag, 0x0000007d, 0xfffffffd}, 381 {NoFlag, 0x0000007d, 0xfffffffe}, 382 {NoFlag, 0x0000007d, 0xffffffff}, 383 {NoFlag, 0x0000007e, 0x00000000}, 384 {NoFlag, 0x0000007e, 0x00000001}, 385 {NoFlag, 0x0000007e, 0x00000002}, 386 {NoFlag, 0x0000007e, 0x00000020}, 387 {NoFlag, 0x0000007e, 0x0000007d}, 388 {NoFlag, 0x0000007e, 0x0000007e}, 389 {NoFlag, 0x0000007e, 0x0000007f}, 390 {NoFlag, 0x0000007e, 0x00007ffd}, 391 {NoFlag, 0x0000007e, 0x00007ffe}, 392 {NoFlag, 0x0000007e, 0x00007fff}, 393 {NoFlag, 0x0000007e, 0x33333333}, 394 {NoFlag, 0x0000007e, 0x55555555}, 395 {NoFlag, 0x0000007e, 0x7ffffffd}, 396 {NoFlag, 0x0000007e, 0x7ffffffe}, 397 {NoFlag, 0x0000007e, 0x7fffffff}, 398 {NoFlag, 0x0000007e, 0x80000000}, 399 {NoFlag, 0x0000007e, 0x80000001}, 400 {NoFlag, 0x0000007e, 0xaaaaaaaa}, 401 {NoFlag, 0x0000007e, 0xcccccccc}, 402 {NoFlag, 0x0000007e, 0xffff8000}, 403 {NoFlag, 0x0000007e, 0xffff8001}, 404 {NoFlag, 0x0000007e, 0xffff8002}, 405 {NoFlag, 0x0000007e, 0xffff8003}, 406 {NoFlag, 0x0000007e, 0xffffff80}, 407 {NoFlag, 0x0000007e, 0xffffff81}, 408 {NoFlag, 0x0000007e, 0xffffff82}, 409 {NoFlag, 0x0000007e, 0xffffff83}, 410 {NoFlag, 0x0000007e, 0xffffffe0}, 411 {NoFlag, 0x0000007e, 0xfffffffd}, 412 {NoFlag, 0x0000007e, 0xfffffffe}, 413 {NoFlag, 0x0000007e, 0xffffffff}, 414 {NoFlag, 0x0000007f, 0x00000000}, 415 {NoFlag, 0x0000007f, 0x00000001}, 416 {NoFlag, 0x0000007f, 0x00000002}, 417 {NoFlag, 0x0000007f, 0x00000020}, 418 {NoFlag, 0x0000007f, 0x0000007d}, 419 {NoFlag, 0x0000007f, 0x0000007e}, 420 {NoFlag, 0x0000007f, 0x0000007f}, 421 {NoFlag, 0x0000007f, 0x00007ffd}, 422 {NoFlag, 0x0000007f, 0x00007ffe}, 423 {NoFlag, 0x0000007f, 0x00007fff}, 424 {NoFlag, 0x0000007f, 0x33333333}, 425 {NoFlag, 0x0000007f, 0x55555555}, 426 {NoFlag, 0x0000007f, 0x7ffffffd}, 427 {NoFlag, 0x0000007f, 0x7ffffffe}, 428 {NoFlag, 0x0000007f, 0x7fffffff}, 429 {NoFlag, 0x0000007f, 0x80000000}, 430 {NoFlag, 0x0000007f, 0x80000001}, 431 {NoFlag, 0x0000007f, 0xaaaaaaaa}, 432 {NoFlag, 0x0000007f, 0xcccccccc}, 433 {NoFlag, 0x0000007f, 0xffff8000}, 434 {NoFlag, 0x0000007f, 0xffff8001}, 435 {NoFlag, 0x0000007f, 0xffff8002}, 436 {NoFlag, 0x0000007f, 0xffff8003}, 437 {NoFlag, 0x0000007f, 0xffffff80}, 438 {NoFlag, 0x0000007f, 0xffffff81}, 439 {NoFlag, 0x0000007f, 0xffffff82}, 440 {NoFlag, 0x0000007f, 0xffffff83}, 441 {NoFlag, 0x0000007f, 0xffffffe0}, 442 {NoFlag, 0x0000007f, 0xfffffffd}, 443 {NoFlag, 0x0000007f, 0xfffffffe}, 444 {NoFlag, 0x0000007f, 0xffffffff}, 445 {NoFlag, 0x00007ffd, 0x00000000}, 446 {NoFlag, 0x00007ffd, 0x00000001}, 447 {NoFlag, 0x00007ffd, 0x00000002}, 448 {NoFlag, 0x00007ffd, 0x00000020}, 449 {NoFlag, 0x00007ffd, 0x0000007d}, 450 {NoFlag, 0x00007ffd, 0x0000007e}, 451 {NoFlag, 0x00007ffd, 0x0000007f}, 452 {NoFlag, 0x00007ffd, 0x00007ffd}, 453 {NoFlag, 0x00007ffd, 0x00007ffe}, 454 {NoFlag, 0x00007ffd, 0x00007fff}, 455 {NoFlag, 0x00007ffd, 0x33333333}, 456 {NoFlag, 0x00007ffd, 0x55555555}, 457 {NoFlag, 0x00007ffd, 0x7ffffffd}, 458 {NoFlag, 0x00007ffd, 0x7ffffffe}, 459 {NoFlag, 0x00007ffd, 0x7fffffff}, 460 {NoFlag, 0x00007ffd, 0x80000000}, 461 {NoFlag, 0x00007ffd, 0x80000001}, 462 {NoFlag, 0x00007ffd, 0xaaaaaaaa}, 463 {NoFlag, 0x00007ffd, 0xcccccccc}, 464 {NoFlag, 0x00007ffd, 0xffff8000}, 465 {NoFlag, 0x00007ffd, 0xffff8001}, 466 {NoFlag, 0x00007ffd, 0xffff8002}, 467 {NoFlag, 0x00007ffd, 0xffff8003}, 468 {NoFlag, 0x00007ffd, 0xffffff80}, 469 {NoFlag, 0x00007ffd, 0xffffff81}, 470 {NoFlag, 0x00007ffd, 0xffffff82}, 471 {NoFlag, 0x00007ffd, 0xffffff83}, 472 {NoFlag, 0x00007ffd, 0xffffffe0}, 473 {NoFlag, 0x00007ffd, 0xfffffffd}, 474 {NoFlag, 0x00007ffd, 0xfffffffe}, 475 {NoFlag, 0x00007ffd, 0xffffffff}, 476 {NoFlag, 0x00007ffe, 0x00000000}, 477 {NoFlag, 0x00007ffe, 0x00000001}, 478 {NoFlag, 0x00007ffe, 0x00000002}, 479 {NoFlag, 0x00007ffe, 0x00000020}, 480 {NoFlag, 0x00007ffe, 0x0000007d}, 481 {NoFlag, 0x00007ffe, 0x0000007e}, 482 {NoFlag, 0x00007ffe, 0x0000007f}, 483 {NoFlag, 0x00007ffe, 0x00007ffd}, 484 {NoFlag, 0x00007ffe, 0x00007ffe}, 485 {NoFlag, 0x00007ffe, 0x00007fff}, 486 {NoFlag, 0x00007ffe, 0x33333333}, 487 {NoFlag, 0x00007ffe, 0x55555555}, 488 {NoFlag, 0x00007ffe, 0x7ffffffd}, 489 {NoFlag, 0x00007ffe, 0x7ffffffe}, 490 {NoFlag, 0x00007ffe, 0x7fffffff}, 491 {NoFlag, 0x00007ffe, 0x80000000}, 492 {NoFlag, 0x00007ffe, 0x80000001}, 493 {NoFlag, 0x00007ffe, 0xaaaaaaaa}, 494 {NoFlag, 0x00007ffe, 0xcccccccc}, 495 {NoFlag, 0x00007ffe, 0xffff8000}, 496 {NoFlag, 0x00007ffe, 0xffff8001}, 497 {NoFlag, 0x00007ffe, 0xffff8002}, 498 {NoFlag, 0x00007ffe, 0xffff8003}, 499 {NoFlag, 0x00007ffe, 0xffffff80}, 500 {NoFlag, 0x00007ffe, 0xffffff81}, 501 {NoFlag, 0x00007ffe, 0xffffff82}, 502 {NoFlag, 0x00007ffe, 0xffffff83}, 503 {NoFlag, 0x00007ffe, 0xffffffe0}, 504 {NoFlag, 0x00007ffe, 0xfffffffd}, 505 {NoFlag, 0x00007ffe, 0xfffffffe}, 506 {NoFlag, 0x00007ffe, 0xffffffff}, 507 {NoFlag, 0x00007fff, 0x00000000}, 508 {NoFlag, 0x00007fff, 0x00000001}, 509 {NoFlag, 0x00007fff, 0x00000002}, 510 {NoFlag, 0x00007fff, 0x00000020}, 511 {NoFlag, 0x00007fff, 0x0000007d}, 512 {NoFlag, 0x00007fff, 0x0000007e}, 513 {NoFlag, 0x00007fff, 0x0000007f}, 514 {NoFlag, 0x00007fff, 0x00007ffd}, 515 {NoFlag, 0x00007fff, 0x00007ffe}, 516 {NoFlag, 0x00007fff, 0x00007fff}, 517 {NoFlag, 0x00007fff, 0x33333333}, 518 {NoFlag, 0x00007fff, 0x55555555}, 519 {NoFlag, 0x00007fff, 0x7ffffffd}, 520 {NoFlag, 0x00007fff, 0x7ffffffe}, 521 {NoFlag, 0x00007fff, 0x7fffffff}, 522 {NoFlag, 0x00007fff, 0x80000000}, 523 {NoFlag, 0x00007fff, 0x80000001}, 524 {NoFlag, 0x00007fff, 0xaaaaaaaa}, 525 {NoFlag, 0x00007fff, 0xcccccccc}, 526 {NoFlag, 0x00007fff, 0xffff8000}, 527 {NoFlag, 0x00007fff, 0xffff8001}, 528 {NoFlag, 0x00007fff, 0xffff8002}, 529 {NoFlag, 0x00007fff, 0xffff8003}, 530 {NoFlag, 0x00007fff, 0xffffff80}, 531 {NoFlag, 0x00007fff, 0xffffff81}, 532 {NoFlag, 0x00007fff, 0xffffff82}, 533 {NoFlag, 0x00007fff, 0xffffff83}, 534 {NoFlag, 0x00007fff, 0xffffffe0}, 535 {NoFlag, 0x00007fff, 0xfffffffd}, 536 {NoFlag, 0x00007fff, 0xfffffffe}, 537 {NoFlag, 0x00007fff, 0xffffffff}, 538 {NoFlag, 0x33333333, 0x00000000}, 539 {NoFlag, 0x33333333, 0x00000001}, 540 {NoFlag, 0x33333333, 0x00000002}, 541 {NoFlag, 0x33333333, 0x00000020}, 542 {NoFlag, 0x33333333, 0x0000007d}, 543 {NoFlag, 0x33333333, 0x0000007e}, 544 {NoFlag, 0x33333333, 0x0000007f}, 545 {NoFlag, 0x33333333, 0x00007ffd}, 546 {NoFlag, 0x33333333, 0x00007ffe}, 547 {NoFlag, 0x33333333, 0x00007fff}, 548 {NoFlag, 0x33333333, 0x33333333}, 549 {NoFlag, 0x33333333, 0x55555555}, 550 {NoFlag, 0x33333333, 0x7ffffffd}, 551 {NoFlag, 0x33333333, 0x7ffffffe}, 552 {NoFlag, 0x33333333, 0x7fffffff}, 553 {NoFlag, 0x33333333, 0x80000000}, 554 {NoFlag, 0x33333333, 0x80000001}, 555 {NoFlag, 0x33333333, 0xaaaaaaaa}, 556 {NoFlag, 0x33333333, 0xcccccccc}, 557 {NoFlag, 0x33333333, 0xffff8000}, 558 {NoFlag, 0x33333333, 0xffff8001}, 559 {NoFlag, 0x33333333, 0xffff8002}, 560 {NoFlag, 0x33333333, 0xffff8003}, 561 {NoFlag, 0x33333333, 0xffffff80}, 562 {NoFlag, 0x33333333, 0xffffff81}, 563 {NoFlag, 0x33333333, 0xffffff82}, 564 {NoFlag, 0x33333333, 0xffffff83}, 565 {NoFlag, 0x33333333, 0xffffffe0}, 566 {NoFlag, 0x33333333, 0xfffffffd}, 567 {NoFlag, 0x33333333, 0xfffffffe}, 568 {NoFlag, 0x33333333, 0xffffffff}, 569 {NoFlag, 0x55555555, 0x00000000}, 570 {NoFlag, 0x55555555, 0x00000001}, 571 {NoFlag, 0x55555555, 0x00000002}, 572 {NoFlag, 0x55555555, 0x00000020}, 573 {NoFlag, 0x55555555, 0x0000007d}, 574 {NoFlag, 0x55555555, 0x0000007e}, 575 {NoFlag, 0x55555555, 0x0000007f}, 576 {NoFlag, 0x55555555, 0x00007ffd}, 577 {NoFlag, 0x55555555, 0x00007ffe}, 578 {NoFlag, 0x55555555, 0x00007fff}, 579 {NoFlag, 0x55555555, 0x33333333}, 580 {NoFlag, 0x55555555, 0x55555555}, 581 {NoFlag, 0x55555555, 0x7ffffffd}, 582 {NoFlag, 0x55555555, 0x7ffffffe}, 583 {NoFlag, 0x55555555, 0x7fffffff}, 584 {NoFlag, 0x55555555, 0x80000000}, 585 {NoFlag, 0x55555555, 0x80000001}, 586 {NoFlag, 0x55555555, 0xaaaaaaaa}, 587 {NoFlag, 0x55555555, 0xcccccccc}, 588 {NoFlag, 0x55555555, 0xffff8000}, 589 {NoFlag, 0x55555555, 0xffff8001}, 590 {NoFlag, 0x55555555, 0xffff8002}, 591 {NoFlag, 0x55555555, 0xffff8003}, 592 {NoFlag, 0x55555555, 0xffffff80}, 593 {NoFlag, 0x55555555, 0xffffff81}, 594 {NoFlag, 0x55555555, 0xffffff82}, 595 {NoFlag, 0x55555555, 0xffffff83}, 596 {NoFlag, 0x55555555, 0xffffffe0}, 597 {NoFlag, 0x55555555, 0xfffffffd}, 598 {NoFlag, 0x55555555, 0xfffffffe}, 599 {NoFlag, 0x55555555, 0xffffffff}, 600 {NoFlag, 0x7ffffffd, 0x00000000}, 601 {NoFlag, 0x7ffffffd, 0x00000001}, 602 {NoFlag, 0x7ffffffd, 0x00000002}, 603 {NoFlag, 0x7ffffffd, 0x00000020}, 604 {NoFlag, 0x7ffffffd, 0x0000007d}, 605 {NoFlag, 0x7ffffffd, 0x0000007e}, 606 {NoFlag, 0x7ffffffd, 0x0000007f}, 607 {NoFlag, 0x7ffffffd, 0x00007ffd}, 608 {NoFlag, 0x7ffffffd, 0x00007ffe}, 609 {NoFlag, 0x7ffffffd, 0x00007fff}, 610 {NoFlag, 0x7ffffffd, 0x33333333}, 611 {NoFlag, 0x7ffffffd, 0x55555555}, 612 {NoFlag, 0x7ffffffd, 0x7ffffffd}, 613 {NoFlag, 0x7ffffffd, 0x7ffffffe}, 614 {NoFlag, 0x7ffffffd, 0x7fffffff}, 615 {NoFlag, 0x7ffffffd, 0x80000000}, 616 {NoFlag, 0x7ffffffd, 0x80000001}, 617 {NoFlag, 0x7ffffffd, 0xaaaaaaaa}, 618 {NoFlag, 0x7ffffffd, 0xcccccccc}, 619 {NoFlag, 0x7ffffffd, 0xffff8000}, 620 {NoFlag, 0x7ffffffd, 0xffff8001}, 621 {NoFlag, 0x7ffffffd, 0xffff8002}, 622 {NoFlag, 0x7ffffffd, 0xffff8003}, 623 {NoFlag, 0x7ffffffd, 0xffffff80}, 624 {NoFlag, 0x7ffffffd, 0xffffff81}, 625 {NoFlag, 0x7ffffffd, 0xffffff82}, 626 {NoFlag, 0x7ffffffd, 0xffffff83}, 627 {NoFlag, 0x7ffffffd, 0xffffffe0}, 628 {NoFlag, 0x7ffffffd, 0xfffffffd}, 629 {NoFlag, 0x7ffffffd, 0xfffffffe}, 630 {NoFlag, 0x7ffffffd, 0xffffffff}, 631 {NoFlag, 0x7ffffffe, 0x00000000}, 632 {NoFlag, 0x7ffffffe, 0x00000001}, 633 {NoFlag, 0x7ffffffe, 0x00000002}, 634 {NoFlag, 0x7ffffffe, 0x00000020}, 635 {NoFlag, 0x7ffffffe, 0x0000007d}, 636 {NoFlag, 0x7ffffffe, 0x0000007e}, 637 {NoFlag, 0x7ffffffe, 0x0000007f}, 638 {NoFlag, 0x7ffffffe, 0x00007ffd}, 639 {NoFlag, 0x7ffffffe, 0x00007ffe}, 640 {NoFlag, 0x7ffffffe, 0x00007fff}, 641 {NoFlag, 0x7ffffffe, 0x33333333}, 642 {NoFlag, 0x7ffffffe, 0x55555555}, 643 {NoFlag, 0x7ffffffe, 0x7ffffffd}, 644 {NoFlag, 0x7ffffffe, 0x7ffffffe}, 645 {NoFlag, 0x7ffffffe, 0x7fffffff}, 646 {NoFlag, 0x7ffffffe, 0x80000000}, 647 {NoFlag, 0x7ffffffe, 0x80000001}, 648 {NoFlag, 0x7ffffffe, 0xaaaaaaaa}, 649 {NoFlag, 0x7ffffffe, 0xcccccccc}, 650 {NoFlag, 0x7ffffffe, 0xffff8000}, 651 {NoFlag, 0x7ffffffe, 0xffff8001}, 652 {NoFlag, 0x7ffffffe, 0xffff8002}, 653 {NoFlag, 0x7ffffffe, 0xffff8003}, 654 {NoFlag, 0x7ffffffe, 0xffffff80}, 655 {NoFlag, 0x7ffffffe, 0xffffff81}, 656 {NoFlag, 0x7ffffffe, 0xffffff82}, 657 {NoFlag, 0x7ffffffe, 0xffffff83}, 658 {NoFlag, 0x7ffffffe, 0xffffffe0}, 659 {NoFlag, 0x7ffffffe, 0xfffffffd}, 660 {NoFlag, 0x7ffffffe, 0xfffffffe}, 661 {NoFlag, 0x7ffffffe, 0xffffffff}, 662 {NoFlag, 0x7fffffff, 0x00000000}, 663 {NoFlag, 0x7fffffff, 0x00000001}, 664 {NoFlag, 0x7fffffff, 0x00000002}, 665 {NoFlag, 0x7fffffff, 0x00000020}, 666 {NoFlag, 0x7fffffff, 0x0000007d}, 667 {NoFlag, 0x7fffffff, 0x0000007e}, 668 {NoFlag, 0x7fffffff, 0x0000007f}, 669 {NoFlag, 0x7fffffff, 0x00007ffd}, 670 {NoFlag, 0x7fffffff, 0x00007ffe}, 671 {NoFlag, 0x7fffffff, 0x00007fff}, 672 {NoFlag, 0x7fffffff, 0x33333333}, 673 {NoFlag, 0x7fffffff, 0x55555555}, 674 {NoFlag, 0x7fffffff, 0x7ffffffd}, 675 {NoFlag, 0x7fffffff, 0x7ffffffe}, 676 {NoFlag, 0x7fffffff, 0x7fffffff}, 677 {NoFlag, 0x7fffffff, 0x80000000}, 678 {NoFlag, 0x7fffffff, 0x80000001}, 679 {NoFlag, 0x7fffffff, 0xaaaaaaaa}, 680 {NoFlag, 0x7fffffff, 0xcccccccc}, 681 {NoFlag, 0x7fffffff, 0xffff8000}, 682 {NoFlag, 0x7fffffff, 0xffff8001}, 683 {NoFlag, 0x7fffffff, 0xffff8002}, 684 {NoFlag, 0x7fffffff, 0xffff8003}, 685 {NoFlag, 0x7fffffff, 0xffffff80}, 686 {NoFlag, 0x7fffffff, 0xffffff81}, 687 {NoFlag, 0x7fffffff, 0xffffff82}, 688 {NoFlag, 0x7fffffff, 0xffffff83}, 689 {NoFlag, 0x7fffffff, 0xffffffe0}, 690 {NoFlag, 0x7fffffff, 0xfffffffd}, 691 {NoFlag, 0x7fffffff, 0xfffffffe}, 692 {NoFlag, 0x7fffffff, 0xffffffff}, 693 {NoFlag, 0x80000000, 0x00000000}, 694 {NoFlag, 0x80000000, 0x00000001}, 695 {NoFlag, 0x80000000, 0x00000002}, 696 {NoFlag, 0x80000000, 0x00000020}, 697 {NoFlag, 0x80000000, 0x0000007d}, 698 {NoFlag, 0x80000000, 0x0000007e}, 699 {NoFlag, 0x80000000, 0x0000007f}, 700 {NoFlag, 0x80000000, 0x00007ffd}, 701 {NoFlag, 0x80000000, 0x00007ffe}, 702 {NoFlag, 0x80000000, 0x00007fff}, 703 {NoFlag, 0x80000000, 0x33333333}, 704 {NoFlag, 0x80000000, 0x55555555}, 705 {NoFlag, 0x80000000, 0x7ffffffd}, 706 {NoFlag, 0x80000000, 0x7ffffffe}, 707 {NoFlag, 0x80000000, 0x7fffffff}, 708 {NoFlag, 0x80000000, 0x80000000}, 709 {NoFlag, 0x80000000, 0x80000001}, 710 {NoFlag, 0x80000000, 0xaaaaaaaa}, 711 {NoFlag, 0x80000000, 0xcccccccc}, 712 {NoFlag, 0x80000000, 0xffff8000}, 713 {NoFlag, 0x80000000, 0xffff8001}, 714 {NoFlag, 0x80000000, 0xffff8002}, 715 {NoFlag, 0x80000000, 0xffff8003}, 716 {NoFlag, 0x80000000, 0xffffff80}, 717 {NoFlag, 0x80000000, 0xffffff81}, 718 {NoFlag, 0x80000000, 0xffffff82}, 719 {NoFlag, 0x80000000, 0xffffff83}, 720 {NoFlag, 0x80000000, 0xffffffe0}, 721 {NoFlag, 0x80000000, 0xfffffffd}, 722 {NoFlag, 0x80000000, 0xfffffffe}, 723 {NoFlag, 0x80000000, 0xffffffff}, 724 {NoFlag, 0x80000001, 0x00000000}, 725 {NoFlag, 0x80000001, 0x00000001}, 726 {NoFlag, 0x80000001, 0x00000002}, 727 {NoFlag, 0x80000001, 0x00000020}, 728 {NoFlag, 0x80000001, 0x0000007d}, 729 {NoFlag, 0x80000001, 0x0000007e}, 730 {NoFlag, 0x80000001, 0x0000007f}, 731 {NoFlag, 0x80000001, 0x00007ffd}, 732 {NoFlag, 0x80000001, 0x00007ffe}, 733 {NoFlag, 0x80000001, 0x00007fff}, 734 {NoFlag, 0x80000001, 0x33333333}, 735 {NoFlag, 0x80000001, 0x55555555}, 736 {NoFlag, 0x80000001, 0x7ffffffd}, 737 {NoFlag, 0x80000001, 0x7ffffffe}, 738 {NoFlag, 0x80000001, 0x7fffffff}, 739 {NoFlag, 0x80000001, 0x80000000}, 740 {NoFlag, 0x80000001, 0x80000001}, 741 {NoFlag, 0x80000001, 0xaaaaaaaa}, 742 {NoFlag, 0x80000001, 0xcccccccc}, 743 {NoFlag, 0x80000001, 0xffff8000}, 744 {NoFlag, 0x80000001, 0xffff8001}, 745 {NoFlag, 0x80000001, 0xffff8002}, 746 {NoFlag, 0x80000001, 0xffff8003}, 747 {NoFlag, 0x80000001, 0xffffff80}, 748 {NoFlag, 0x80000001, 0xffffff81}, 749 {NoFlag, 0x80000001, 0xffffff82}, 750 {NoFlag, 0x80000001, 0xffffff83}, 751 {NoFlag, 0x80000001, 0xffffffe0}, 752 {NoFlag, 0x80000001, 0xfffffffd}, 753 {NoFlag, 0x80000001, 0xfffffffe}, 754 {NoFlag, 0x80000001, 0xffffffff}, 755 {NoFlag, 0xaaaaaaaa, 0x00000000}, 756 {NoFlag, 0xaaaaaaaa, 0x00000001}, 757 {NoFlag, 0xaaaaaaaa, 0x00000002}, 758 {NoFlag, 0xaaaaaaaa, 0x00000020}, 759 {NoFlag, 0xaaaaaaaa, 0x0000007d}, 760 {NoFlag, 0xaaaaaaaa, 0x0000007e}, 761 {NoFlag, 0xaaaaaaaa, 0x0000007f}, 762 {NoFlag, 0xaaaaaaaa, 0x00007ffd}, 763 {NoFlag, 0xaaaaaaaa, 0x00007ffe}, 764 {NoFlag, 0xaaaaaaaa, 0x00007fff}, 765 {NoFlag, 0xaaaaaaaa, 0x33333333}, 766 {NoFlag, 0xaaaaaaaa, 0x55555555}, 767 {NoFlag, 0xaaaaaaaa, 0x7ffffffd}, 768 {NoFlag, 0xaaaaaaaa, 0x7ffffffe}, 769 {NoFlag, 0xaaaaaaaa, 0x7fffffff}, 770 {NoFlag, 0xaaaaaaaa, 0x80000000}, 771 {NoFlag, 0xaaaaaaaa, 0x80000001}, 772 {NoFlag, 0xaaaaaaaa, 0xaaaaaaaa}, 773 {NoFlag, 0xaaaaaaaa, 0xcccccccc}, 774 {NoFlag, 0xaaaaaaaa, 0xffff8000}, 775 {NoFlag, 0xaaaaaaaa, 0xffff8001}, 776 {NoFlag, 0xaaaaaaaa, 0xffff8002}, 777 {NoFlag, 0xaaaaaaaa, 0xffff8003}, 778 {NoFlag, 0xaaaaaaaa, 0xffffff80}, 779 {NoFlag, 0xaaaaaaaa, 0xffffff81}, 780 {NoFlag, 0xaaaaaaaa, 0xffffff82}, 781 {NoFlag, 0xaaaaaaaa, 0xffffff83}, 782 {NoFlag, 0xaaaaaaaa, 0xffffffe0}, 783 {NoFlag, 0xaaaaaaaa, 0xfffffffd}, 784 {NoFlag, 0xaaaaaaaa, 0xfffffffe}, 785 {NoFlag, 0xaaaaaaaa, 0xffffffff}, 786 {NoFlag, 0xcccccccc, 0x00000000}, 787 {NoFlag, 0xcccccccc, 0x00000001}, 788 {NoFlag, 0xcccccccc, 0x00000002}, 789 {NoFlag, 0xcccccccc, 0x00000020}, 790 {NoFlag, 0xcccccccc, 0x0000007d}, 791 {NoFlag, 0xcccccccc, 0x0000007e}, 792 {NoFlag, 0xcccccccc, 0x0000007f}, 793 {NoFlag, 0xcccccccc, 0x00007ffd}, 794 {NoFlag, 0xcccccccc, 0x00007ffe}, 795 {NoFlag, 0xcccccccc, 0x00007fff}, 796 {NoFlag, 0xcccccccc, 0x33333333}, 797 {NoFlag, 0xcccccccc, 0x55555555}, 798 {NoFlag, 0xcccccccc, 0x7ffffffd}, 799 {NoFlag, 0xcccccccc, 0x7ffffffe}, 800 {NoFlag, 0xcccccccc, 0x7fffffff}, 801 {NoFlag, 0xcccccccc, 0x80000000}, 802 {NoFlag, 0xcccccccc, 0x80000001}, 803 {NoFlag, 0xcccccccc, 0xaaaaaaaa}, 804 {NoFlag, 0xcccccccc, 0xcccccccc}, 805 {NoFlag, 0xcccccccc, 0xffff8000}, 806 {NoFlag, 0xcccccccc, 0xffff8001}, 807 {NoFlag, 0xcccccccc, 0xffff8002}, 808 {NoFlag, 0xcccccccc, 0xffff8003}, 809 {NoFlag, 0xcccccccc, 0xffffff80}, 810 {NoFlag, 0xcccccccc, 0xffffff81}, 811 {NoFlag, 0xcccccccc, 0xffffff82}, 812 {NoFlag, 0xcccccccc, 0xffffff83}, 813 {NoFlag, 0xcccccccc, 0xffffffe0}, 814 {NoFlag, 0xcccccccc, 0xfffffffd}, 815 {NoFlag, 0xcccccccc, 0xfffffffe}, 816 {NoFlag, 0xcccccccc, 0xffffffff}, 817 {NoFlag, 0xffff8000, 0x00000000}, 818 {NoFlag, 0xffff8000, 0x00000001}, 819 {NoFlag, 0xffff8000, 0x00000002}, 820 {NoFlag, 0xffff8000, 0x00000020}, 821 {NoFlag, 0xffff8000, 0x0000007d}, 822 {NoFlag, 0xffff8000, 0x0000007e}, 823 {NoFlag, 0xffff8000, 0x0000007f}, 824 {NoFlag, 0xffff8000, 0x00007ffd}, 825 {NoFlag, 0xffff8000, 0x00007ffe}, 826 {NoFlag, 0xffff8000, 0x00007fff}, 827 {NoFlag, 0xffff8000, 0x33333333}, 828 {NoFlag, 0xffff8000, 0x55555555}, 829 {NoFlag, 0xffff8000, 0x7ffffffd}, 830 {NoFlag, 0xffff8000, 0x7ffffffe}, 831 {NoFlag, 0xffff8000, 0x7fffffff}, 832 {NoFlag, 0xffff8000, 0x80000000}, 833 {NoFlag, 0xffff8000, 0x80000001}, 834 {NoFlag, 0xffff8000, 0xaaaaaaaa}, 835 {NoFlag, 0xffff8000, 0xcccccccc}, 836 {NoFlag, 0xffff8000, 0xffff8000}, 837 {NoFlag, 0xffff8000, 0xffff8001}, 838 {NoFlag, 0xffff8000, 0xffff8002}, 839 {NoFlag, 0xffff8000, 0xffff8003}, 840 {NoFlag, 0xffff8000, 0xffffff80}, 841 {NoFlag, 0xffff8000, 0xffffff81}, 842 {NoFlag, 0xffff8000, 0xffffff82}, 843 {NoFlag, 0xffff8000, 0xffffff83}, 844 {NoFlag, 0xffff8000, 0xffffffe0}, 845 {NoFlag, 0xffff8000, 0xfffffffd}, 846 {NoFlag, 0xffff8000, 0xfffffffe}, 847 {NoFlag, 0xffff8000, 0xffffffff}, 848 {NoFlag, 0xffff8001, 0x00000000}, 849 {NoFlag, 0xffff8001, 0x00000001}, 850 {NoFlag, 0xffff8001, 0x00000002}, 851 {NoFlag, 0xffff8001, 0x00000020}, 852 {NoFlag, 0xffff8001, 0x0000007d}, 853 {NoFlag, 0xffff8001, 0x0000007e}, 854 {NoFlag, 0xffff8001, 0x0000007f}, 855 {NoFlag, 0xffff8001, 0x00007ffd}, 856 {NoFlag, 0xffff8001, 0x00007ffe}, 857 {NoFlag, 0xffff8001, 0x00007fff}, 858 {NoFlag, 0xffff8001, 0x33333333}, 859 {NoFlag, 0xffff8001, 0x55555555}, 860 {NoFlag, 0xffff8001, 0x7ffffffd}, 861 {NoFlag, 0xffff8001, 0x7ffffffe}, 862 {NoFlag, 0xffff8001, 0x7fffffff}, 863 {NoFlag, 0xffff8001, 0x80000000}, 864 {NoFlag, 0xffff8001, 0x80000001}, 865 {NoFlag, 0xffff8001, 0xaaaaaaaa}, 866 {NoFlag, 0xffff8001, 0xcccccccc}, 867 {NoFlag, 0xffff8001, 0xffff8000}, 868 {NoFlag, 0xffff8001, 0xffff8001}, 869 {NoFlag, 0xffff8001, 0xffff8002}, 870 {NoFlag, 0xffff8001, 0xffff8003}, 871 {NoFlag, 0xffff8001, 0xffffff80}, 872 {NoFlag, 0xffff8001, 0xffffff81}, 873 {NoFlag, 0xffff8001, 0xffffff82}, 874 {NoFlag, 0xffff8001, 0xffffff83}, 875 {NoFlag, 0xffff8001, 0xffffffe0}, 876 {NoFlag, 0xffff8001, 0xfffffffd}, 877 {NoFlag, 0xffff8001, 0xfffffffe}, 878 {NoFlag, 0xffff8001, 0xffffffff}, 879 {NoFlag, 0xffff8002, 0x00000000}, 880 {NoFlag, 0xffff8002, 0x00000001}, 881 {NoFlag, 0xffff8002, 0x00000002}, 882 {NoFlag, 0xffff8002, 0x00000020}, 883 {NoFlag, 0xffff8002, 0x0000007d}, 884 {NoFlag, 0xffff8002, 0x0000007e}, 885 {NoFlag, 0xffff8002, 0x0000007f}, 886 {NoFlag, 0xffff8002, 0x00007ffd}, 887 {NoFlag, 0xffff8002, 0x00007ffe}, 888 {NoFlag, 0xffff8002, 0x00007fff}, 889 {NoFlag, 0xffff8002, 0x33333333}, 890 {NoFlag, 0xffff8002, 0x55555555}, 891 {NoFlag, 0xffff8002, 0x7ffffffd}, 892 {NoFlag, 0xffff8002, 0x7ffffffe}, 893 {NoFlag, 0xffff8002, 0x7fffffff}, 894 {NoFlag, 0xffff8002, 0x80000000}, 895 {NoFlag, 0xffff8002, 0x80000001}, 896 {NoFlag, 0xffff8002, 0xaaaaaaaa}, 897 {NoFlag, 0xffff8002, 0xcccccccc}, 898 {NoFlag, 0xffff8002, 0xffff8000}, 899 {NoFlag, 0xffff8002, 0xffff8001}, 900 {NoFlag, 0xffff8002, 0xffff8002}, 901 {NoFlag, 0xffff8002, 0xffff8003}, 902 {NoFlag, 0xffff8002, 0xffffff80}, 903 {NoFlag, 0xffff8002, 0xffffff81}, 904 {NoFlag, 0xffff8002, 0xffffff82}, 905 {NoFlag, 0xffff8002, 0xffffff83}, 906 {NoFlag, 0xffff8002, 0xffffffe0}, 907 {NoFlag, 0xffff8002, 0xfffffffd}, 908 {NoFlag, 0xffff8002, 0xfffffffe}, 909 {NoFlag, 0xffff8002, 0xffffffff}, 910 {NoFlag, 0xffff8003, 0x00000000}, 911 {NoFlag, 0xffff8003, 0x00000001}, 912 {NoFlag, 0xffff8003, 0x00000002}, 913 {NoFlag, 0xffff8003, 0x00000020}, 914 {NoFlag, 0xffff8003, 0x0000007d}, 915 {NoFlag, 0xffff8003, 0x0000007e}, 916 {NoFlag, 0xffff8003, 0x0000007f}, 917 {NoFlag, 0xffff8003, 0x00007ffd}, 918 {NoFlag, 0xffff8003, 0x00007ffe}, 919 {NoFlag, 0xffff8003, 0x00007fff}, 920 {NoFlag, 0xffff8003, 0x33333333}, 921 {NoFlag, 0xffff8003, 0x55555555}, 922 {NoFlag, 0xffff8003, 0x7ffffffd}, 923 {NoFlag, 0xffff8003, 0x7ffffffe}, 924 {NoFlag, 0xffff8003, 0x7fffffff}, 925 {NoFlag, 0xffff8003, 0x80000000}, 926 {NoFlag, 0xffff8003, 0x80000001}, 927 {NoFlag, 0xffff8003, 0xaaaaaaaa}, 928 {NoFlag, 0xffff8003, 0xcccccccc}, 929 {NoFlag, 0xffff8003, 0xffff8000}, 930 {NoFlag, 0xffff8003, 0xffff8001}, 931 {NoFlag, 0xffff8003, 0xffff8002}, 932 {NoFlag, 0xffff8003, 0xffff8003}, 933 {NoFlag, 0xffff8003, 0xffffff80}, 934 {NoFlag, 0xffff8003, 0xffffff81}, 935 {NoFlag, 0xffff8003, 0xffffff82}, 936 {NoFlag, 0xffff8003, 0xffffff83}, 937 {NoFlag, 0xffff8003, 0xffffffe0}, 938 {NoFlag, 0xffff8003, 0xfffffffd}, 939 {NoFlag, 0xffff8003, 0xfffffffe}, 940 {NoFlag, 0xffff8003, 0xffffffff}, 941 {NoFlag, 0xffffff80, 0x00000000}, 942 {NoFlag, 0xffffff80, 0x00000001}, 943 {NoFlag, 0xffffff80, 0x00000002}, 944 {NoFlag, 0xffffff80, 0x00000020}, 945 {NoFlag, 0xffffff80, 0x0000007d}, 946 {NoFlag, 0xffffff80, 0x0000007e}, 947 {NoFlag, 0xffffff80, 0x0000007f}, 948 {NoFlag, 0xffffff80, 0x00007ffd}, 949 {NoFlag, 0xffffff80, 0x00007ffe}, 950 {NoFlag, 0xffffff80, 0x00007fff}, 951 {NoFlag, 0xffffff80, 0x33333333}, 952 {NoFlag, 0xffffff80, 0x55555555}, 953 {NoFlag, 0xffffff80, 0x7ffffffd}, 954 {NoFlag, 0xffffff80, 0x7ffffffe}, 955 {NoFlag, 0xffffff80, 0x7fffffff}, 956 {NoFlag, 0xffffff80, 0x80000000}, 957 {NoFlag, 0xffffff80, 0x80000001}, 958 {NoFlag, 0xffffff80, 0xaaaaaaaa}, 959 {NoFlag, 0xffffff80, 0xcccccccc}, 960 {NoFlag, 0xffffff80, 0xffff8000}, 961 {NoFlag, 0xffffff80, 0xffff8001}, 962 {NoFlag, 0xffffff80, 0xffff8002}, 963 {NoFlag, 0xffffff80, 0xffff8003}, 964 {NoFlag, 0xffffff80, 0xffffff80}, 965 {NoFlag, 0xffffff80, 0xffffff81}, 966 {NoFlag, 0xffffff80, 0xffffff82}, 967 {NoFlag, 0xffffff80, 0xffffff83}, 968 {NoFlag, 0xffffff80, 0xffffffe0}, 969 {NoFlag, 0xffffff80, 0xfffffffd}, 970 {NoFlag, 0xffffff80, 0xfffffffe}, 971 {NoFlag, 0xffffff80, 0xffffffff}, 972 {NoFlag, 0xffffff81, 0x00000000}, 973 {NoFlag, 0xffffff81, 0x00000001}, 974 {NoFlag, 0xffffff81, 0x00000002}, 975 {NoFlag, 0xffffff81, 0x00000020}, 976 {NoFlag, 0xffffff81, 0x0000007d}, 977 {NoFlag, 0xffffff81, 0x0000007e}, 978 {NoFlag, 0xffffff81, 0x0000007f}, 979 {NoFlag, 0xffffff81, 0x00007ffd}, 980 {NoFlag, 0xffffff81, 0x00007ffe}, 981 {NoFlag, 0xffffff81, 0x00007fff}, 982 {NoFlag, 0xffffff81, 0x33333333}, 983 {NoFlag, 0xffffff81, 0x55555555}, 984 {NoFlag, 0xffffff81, 0x7ffffffd}, 985 {NoFlag, 0xffffff81, 0x7ffffffe}, 986 {NoFlag, 0xffffff81, 0x7fffffff}, 987 {NoFlag, 0xffffff81, 0x80000000}, 988 {NoFlag, 0xffffff81, 0x80000001}, 989 {NoFlag, 0xffffff81, 0xaaaaaaaa}, 990 {NoFlag, 0xffffff81, 0xcccccccc}, 991 {NoFlag, 0xffffff81, 0xffff8000}, 992 {NoFlag, 0xffffff81, 0xffff8001}, 993 {NoFlag, 0xffffff81, 0xffff8002}, 994 {NoFlag, 0xffffff81, 0xffff8003}, 995 {NoFlag, 0xffffff81, 0xffffff80}, 996 {NoFlag, 0xffffff81, 0xffffff81}, 997 {NoFlag, 0xffffff81, 0xffffff82}, 998 {NoFlag, 0xffffff81, 0xffffff83}, 999 {NoFlag, 0xffffff81, 0xffffffe0}, 1000 {NoFlag, 0xffffff81, 0xfffffffd}, 1001 {NoFlag, 0xffffff81, 0xfffffffe}, 1002 {NoFlag, 0xffffff81, 0xffffffff}, 1003 {NoFlag, 0xffffff82, 0x00000000}, 1004 {NoFlag, 0xffffff82, 0x00000001}, 1005 {NoFlag, 0xffffff82, 0x00000002}, 1006 {NoFlag, 0xffffff82, 0x00000020}, 1007 {NoFlag, 0xffffff82, 0x0000007d}, 1008 {NoFlag, 0xffffff82, 0x0000007e}, 1009 {NoFlag, 0xffffff82, 0x0000007f}, 1010 {NoFlag, 0xffffff82, 0x00007ffd}, 1011 {NoFlag, 0xffffff82, 0x00007ffe}, 1012 {NoFlag, 0xffffff82, 0x00007fff}, 1013 {NoFlag, 0xffffff82, 0x33333333}, 1014 {NoFlag, 0xffffff82, 0x55555555}, 1015 {NoFlag, 0xffffff82, 0x7ffffffd}, 1016 {NoFlag, 0xffffff82, 0x7ffffffe}, 1017 {NoFlag, 0xffffff82, 0x7fffffff}, 1018 {NoFlag, 0xffffff82, 0x80000000}, 1019 {NoFlag, 0xffffff82, 0x80000001}, 1020 {NoFlag, 0xffffff82, 0xaaaaaaaa}, 1021 {NoFlag, 0xffffff82, 0xcccccccc}, 1022 {NoFlag, 0xffffff82, 0xffff8000}, 1023 {NoFlag, 0xffffff82, 0xffff8001}, 1024 {NoFlag, 0xffffff82, 0xffff8002}, 1025 {NoFlag, 0xffffff82, 0xffff8003}, 1026 {NoFlag, 0xffffff82, 0xffffff80}, 1027 {NoFlag, 0xffffff82, 0xffffff81}, 1028 {NoFlag, 0xffffff82, 0xffffff82}, 1029 {NoFlag, 0xffffff82, 0xffffff83}, 1030 {NoFlag, 0xffffff82, 0xffffffe0}, 1031 {NoFlag, 0xffffff82, 0xfffffffd}, 1032 {NoFlag, 0xffffff82, 0xfffffffe}, 1033 {NoFlag, 0xffffff82, 0xffffffff}, 1034 {NoFlag, 0xffffff83, 0x00000000}, 1035 {NoFlag, 0xffffff83, 0x00000001}, 1036 {NoFlag, 0xffffff83, 0x00000002}, 1037 {NoFlag, 0xffffff83, 0x00000020}, 1038 {NoFlag, 0xffffff83, 0x0000007d}, 1039 {NoFlag, 0xffffff83, 0x0000007e}, 1040 {NoFlag, 0xffffff83, 0x0000007f}, 1041 {NoFlag, 0xffffff83, 0x00007ffd}, 1042 {NoFlag, 0xffffff83, 0x00007ffe}, 1043 {NoFlag, 0xffffff83, 0x00007fff}, 1044 {NoFlag, 0xffffff83, 0x33333333}, 1045 {NoFlag, 0xffffff83, 0x55555555}, 1046 {NoFlag, 0xffffff83, 0x7ffffffd}, 1047 {NoFlag, 0xffffff83, 0x7ffffffe}, 1048 {NoFlag, 0xffffff83, 0x7fffffff}, 1049 {NoFlag, 0xffffff83, 0x80000000}, 1050 {NoFlag, 0xffffff83, 0x80000001}, 1051 {NoFlag, 0xffffff83, 0xaaaaaaaa}, 1052 {NoFlag, 0xffffff83, 0xcccccccc}, 1053 {NoFlag, 0xffffff83, 0xffff8000}, 1054 {NoFlag, 0xffffff83, 0xffff8001}, 1055 {NoFlag, 0xffffff83, 0xffff8002}, 1056 {NoFlag, 0xffffff83, 0xffff8003}, 1057 {NoFlag, 0xffffff83, 0xffffff80}, 1058 {NoFlag, 0xffffff83, 0xffffff81}, 1059 {NoFlag, 0xffffff83, 0xffffff82}, 1060 {NoFlag, 0xffffff83, 0xffffff83}, 1061 {NoFlag, 0xffffff83, 0xffffffe0}, 1062 {NoFlag, 0xffffff83, 0xfffffffd}, 1063 {NoFlag, 0xffffff83, 0xfffffffe}, 1064 {NoFlag, 0xffffff83, 0xffffffff}, 1065 {NoFlag, 0xffffffe0, 0x00000000}, 1066 {NoFlag, 0xffffffe0, 0x00000001}, 1067 {NoFlag, 0xffffffe0, 0x00000002}, 1068 {NoFlag, 0xffffffe0, 0x00000020}, 1069 {NoFlag, 0xffffffe0, 0x0000007d}, 1070 {NoFlag, 0xffffffe0, 0x0000007e}, 1071 {NoFlag, 0xffffffe0, 0x0000007f}, 1072 {NoFlag, 0xffffffe0, 0x00007ffd}, 1073 {NoFlag, 0xffffffe0, 0x00007ffe}, 1074 {NoFlag, 0xffffffe0, 0x00007fff}, 1075 {NoFlag, 0xffffffe0, 0x33333333}, 1076 {NoFlag, 0xffffffe0, 0x55555555}, 1077 {NoFlag, 0xffffffe0, 0x7ffffffd}, 1078 {NoFlag, 0xffffffe0, 0x7ffffffe}, 1079 {NoFlag, 0xffffffe0, 0x7fffffff}, 1080 {NoFlag, 0xffffffe0, 0x80000000}, 1081 {NoFlag, 0xffffffe0, 0x80000001}, 1082 {NoFlag, 0xffffffe0, 0xaaaaaaaa}, 1083 {NoFlag, 0xffffffe0, 0xcccccccc}, 1084 {NoFlag, 0xffffffe0, 0xffff8000}, 1085 {NoFlag, 0xffffffe0, 0xffff8001}, 1086 {NoFlag, 0xffffffe0, 0xffff8002}, 1087 {NoFlag, 0xffffffe0, 0xffff8003}, 1088 {NoFlag, 0xffffffe0, 0xffffff80}, 1089 {NoFlag, 0xffffffe0, 0xffffff81}, 1090 {NoFlag, 0xffffffe0, 0xffffff82}, 1091 {NoFlag, 0xffffffe0, 0xffffff83}, 1092 {NoFlag, 0xffffffe0, 0xffffffe0}, 1093 {NoFlag, 0xffffffe0, 0xfffffffd}, 1094 {NoFlag, 0xffffffe0, 0xfffffffe}, 1095 {NoFlag, 0xffffffe0, 0xffffffff}, 1096 {NoFlag, 0xfffffffd, 0x00000000}, 1097 {NoFlag, 0xfffffffd, 0x00000001}, 1098 {NoFlag, 0xfffffffd, 0x00000002}, 1099 {NoFlag, 0xfffffffd, 0x00000020}, 1100 {NoFlag, 0xfffffffd, 0x0000007d}, 1101 {NoFlag, 0xfffffffd, 0x0000007e}, 1102 {NoFlag, 0xfffffffd, 0x0000007f}, 1103 {NoFlag, 0xfffffffd, 0x00007ffd}, 1104 {NoFlag, 0xfffffffd, 0x00007ffe}, 1105 {NoFlag, 0xfffffffd, 0x00007fff}, 1106 {NoFlag, 0xfffffffd, 0x33333333}, 1107 {NoFlag, 0xfffffffd, 0x55555555}, 1108 {NoFlag, 0xfffffffd, 0x7ffffffd}, 1109 {NoFlag, 0xfffffffd, 0x7ffffffe}, 1110 {NoFlag, 0xfffffffd, 0x7fffffff}, 1111 {NoFlag, 0xfffffffd, 0x80000000}, 1112 {NoFlag, 0xfffffffd, 0x80000001}, 1113 {NoFlag, 0xfffffffd, 0xaaaaaaaa}, 1114 {NoFlag, 0xfffffffd, 0xcccccccc}, 1115 {NoFlag, 0xfffffffd, 0xffff8000}, 1116 {NoFlag, 0xfffffffd, 0xffff8001}, 1117 {NoFlag, 0xfffffffd, 0xffff8002}, 1118 {NoFlag, 0xfffffffd, 0xffff8003}, 1119 {NoFlag, 0xfffffffd, 0xffffff80}, 1120 {NoFlag, 0xfffffffd, 0xffffff81}, 1121 {NoFlag, 0xfffffffd, 0xffffff82}, 1122 {NoFlag, 0xfffffffd, 0xffffff83}, 1123 {NoFlag, 0xfffffffd, 0xffffffe0}, 1124 {NoFlag, 0xfffffffd, 0xfffffffd}, 1125 {NoFlag, 0xfffffffd, 0xfffffffe}, 1126 {NoFlag, 0xfffffffd, 0xffffffff}, 1127 {NoFlag, 0xfffffffe, 0x00000000}, 1128 {NoFlag, 0xfffffffe, 0x00000001}, 1129 {NoFlag, 0xfffffffe, 0x00000002}, 1130 {NoFlag, 0xfffffffe, 0x00000020}, 1131 {NoFlag, 0xfffffffe, 0x0000007d}, 1132 {NoFlag, 0xfffffffe, 0x0000007e}, 1133 {NoFlag, 0xfffffffe, 0x0000007f}, 1134 {NoFlag, 0xfffffffe, 0x00007ffd}, 1135 {NoFlag, 0xfffffffe, 0x00007ffe}, 1136 {NoFlag, 0xfffffffe, 0x00007fff}, 1137 {NoFlag, 0xfffffffe, 0x33333333}, 1138 {NoFlag, 0xfffffffe, 0x55555555}, 1139 {NoFlag, 0xfffffffe, 0x7ffffffd}, 1140 {NoFlag, 0xfffffffe, 0x7ffffffe}, 1141 {NoFlag, 0xfffffffe, 0x7fffffff}, 1142 {NoFlag, 0xfffffffe, 0x80000000}, 1143 {NoFlag, 0xfffffffe, 0x80000001}, 1144 {NoFlag, 0xfffffffe, 0xaaaaaaaa}, 1145 {NoFlag, 0xfffffffe, 0xcccccccc}, 1146 {NoFlag, 0xfffffffe, 0xffff8000}, 1147 {NoFlag, 0xfffffffe, 0xffff8001}, 1148 {NoFlag, 0xfffffffe, 0xffff8002}, 1149 {NoFlag, 0xfffffffe, 0xffff8003}, 1150 {NoFlag, 0xfffffffe, 0xffffff80}, 1151 {NoFlag, 0xfffffffe, 0xffffff81}, 1152 {NoFlag, 0xfffffffe, 0xffffff82}, 1153 {NoFlag, 0xfffffffe, 0xffffff83}, 1154 {NoFlag, 0xfffffffe, 0xffffffe0}, 1155 {NoFlag, 0xfffffffe, 0xfffffffd}, 1156 {NoFlag, 0xfffffffe, 0xfffffffe}, 1157 {NoFlag, 0xfffffffe, 0xffffffff}, 1158 {NoFlag, 0xffffffff, 0x00000000}, 1159 {NoFlag, 0xffffffff, 0x00000001}, 1160 {NoFlag, 0xffffffff, 0x00000002}, 1161 {NoFlag, 0xffffffff, 0x00000020}, 1162 {NoFlag, 0xffffffff, 0x0000007d}, 1163 {NoFlag, 0xffffffff, 0x0000007e}, 1164 {NoFlag, 0xffffffff, 0x0000007f}, 1165 {NoFlag, 0xffffffff, 0x00007ffd}, 1166 {NoFlag, 0xffffffff, 0x00007ffe}, 1167 {NoFlag, 0xffffffff, 0x00007fff}, 1168 {NoFlag, 0xffffffff, 0x33333333}, 1169 {NoFlag, 0xffffffff, 0x55555555}, 1170 {NoFlag, 0xffffffff, 0x7ffffffd}, 1171 {NoFlag, 0xffffffff, 0x7ffffffe}, 1172 {NoFlag, 0xffffffff, 0x7fffffff}, 1173 {NoFlag, 0xffffffff, 0x80000000}, 1174 {NoFlag, 0xffffffff, 0x80000001}, 1175 {NoFlag, 0xffffffff, 0xaaaaaaaa}, 1176 {NoFlag, 0xffffffff, 0xcccccccc}, 1177 {NoFlag, 0xffffffff, 0xffff8000}, 1178 {NoFlag, 0xffffffff, 0xffff8001}, 1179 {NoFlag, 0xffffffff, 0xffff8002}, 1180 {NoFlag, 0xffffffff, 0xffff8003}, 1181 {NoFlag, 0xffffffff, 0xffffff80}, 1182 {NoFlag, 0xffffffff, 0xffffff81}, 1183 {NoFlag, 0xffffffff, 0xffffff82}, 1184 {NoFlag, 0xffffffff, 0xffffff83}, 1185 {NoFlag, 0xffffffff, 0xffffffe0}, 1186 {NoFlag, 0xffffffff, 0xfffffffd}, 1187 {NoFlag, 0xffffffff, 0xfffffffe}, 1188 {NoFlag, 0xffffffff, 0xffffffff}}; 1189 1190 static const Inputs kModifiedImmediate[] = {{NoFlag, 0xabababab, 0x00000000}, 1191 {NoFlag, 0xabababab, 0x00000001}, 1192 {NoFlag, 0xabababab, 0x00000002}, 1193 {NoFlag, 0xabababab, 0x00000020}, 1194 {NoFlag, 0xabababab, 0x0000007d}, 1195 {NoFlag, 0xabababab, 0x0000007e}, 1196 {NoFlag, 0xabababab, 0x0000007f}, 1197 {NoFlag, 0xabababab, 0x00007ffd}, 1198 {NoFlag, 0xabababab, 0x00007ffe}, 1199 {NoFlag, 0xabababab, 0x00007fff}, 1200 {NoFlag, 0xabababab, 0x33333333}, 1201 {NoFlag, 0xabababab, 0x55555555}, 1202 {NoFlag, 0xabababab, 0x7ffffffd}, 1203 {NoFlag, 0xabababab, 0x7ffffffe}, 1204 {NoFlag, 0xabababab, 0x7fffffff}, 1205 {NoFlag, 0xabababab, 0x80000000}, 1206 {NoFlag, 0xabababab, 0x80000001}, 1207 {NoFlag, 0xabababab, 0xaaaaaaaa}, 1208 {NoFlag, 0xabababab, 0xcccccccc}, 1209 {NoFlag, 0xabababab, 0xffff8000}, 1210 {NoFlag, 0xabababab, 0xffff8001}, 1211 {NoFlag, 0xabababab, 0xffff8002}, 1212 {NoFlag, 0xabababab, 0xffff8003}, 1213 {NoFlag, 0xabababab, 0xffffff80}, 1214 {NoFlag, 0xabababab, 0xffffff81}, 1215 {NoFlag, 0xabababab, 0xffffff82}, 1216 {NoFlag, 0xabababab, 0xffffff83}, 1217 {NoFlag, 0xabababab, 0xffffffe0}, 1218 {NoFlag, 0xabababab, 0xfffffffd}, 1219 {NoFlag, 0xabababab, 0xfffffffe}, 1220 {NoFlag, 0xabababab, 0xffffffff}}; 1221 1222 1223 // A loop will be generated for each element of this array. 1224 const TestLoopData kTests[] = {{{eq, r0, r0, 0x000000ab}, 1225 "eq r0 r0 0x000000ab", 1226 "Condition_eq_r0_r0_0x000000ab", 1227 ARRAY_SIZE(kCondition), 1228 kCondition}, 1229 {{ne, r0, r0, 0x000000ab}, 1230 "ne r0 r0 0x000000ab", 1231 "Condition_ne_r0_r0_0x000000ab", 1232 ARRAY_SIZE(kCondition), 1233 kCondition}, 1234 {{cs, r0, r0, 0x000000ab}, 1235 "cs r0 r0 0x000000ab", 1236 "Condition_cs_r0_r0_0x000000ab", 1237 ARRAY_SIZE(kCondition), 1238 kCondition}, 1239 {{cc, r0, r0, 0x000000ab}, 1240 "cc r0 r0 0x000000ab", 1241 "Condition_cc_r0_r0_0x000000ab", 1242 ARRAY_SIZE(kCondition), 1243 kCondition}, 1244 {{mi, r0, r0, 0x000000ab}, 1245 "mi r0 r0 0x000000ab", 1246 "Condition_mi_r0_r0_0x000000ab", 1247 ARRAY_SIZE(kCondition), 1248 kCondition}, 1249 {{pl, r0, r0, 0x000000ab}, 1250 "pl r0 r0 0x000000ab", 1251 "Condition_pl_r0_r0_0x000000ab", 1252 ARRAY_SIZE(kCondition), 1253 kCondition}, 1254 {{vs, r0, r0, 0x000000ab}, 1255 "vs r0 r0 0x000000ab", 1256 "Condition_vs_r0_r0_0x000000ab", 1257 ARRAY_SIZE(kCondition), 1258 kCondition}, 1259 {{vc, r0, r0, 0x000000ab}, 1260 "vc r0 r0 0x000000ab", 1261 "Condition_vc_r0_r0_0x000000ab", 1262 ARRAY_SIZE(kCondition), 1263 kCondition}, 1264 {{hi, r0, r0, 0x000000ab}, 1265 "hi r0 r0 0x000000ab", 1266 "Condition_hi_r0_r0_0x000000ab", 1267 ARRAY_SIZE(kCondition), 1268 kCondition}, 1269 {{ls, r0, r0, 0x000000ab}, 1270 "ls r0 r0 0x000000ab", 1271 "Condition_ls_r0_r0_0x000000ab", 1272 ARRAY_SIZE(kCondition), 1273 kCondition}, 1274 {{ge, r0, r0, 0x000000ab}, 1275 "ge r0 r0 0x000000ab", 1276 "Condition_ge_r0_r0_0x000000ab", 1277 ARRAY_SIZE(kCondition), 1278 kCondition}, 1279 {{lt, r0, r0, 0x000000ab}, 1280 "lt r0 r0 0x000000ab", 1281 "Condition_lt_r0_r0_0x000000ab", 1282 ARRAY_SIZE(kCondition), 1283 kCondition}, 1284 {{gt, r0, r0, 0x000000ab}, 1285 "gt r0 r0 0x000000ab", 1286 "Condition_gt_r0_r0_0x000000ab", 1287 ARRAY_SIZE(kCondition), 1288 kCondition}, 1289 {{le, r0, r0, 0x000000ab}, 1290 "le r0 r0 0x000000ab", 1291 "Condition_le_r0_r0_0x000000ab", 1292 ARRAY_SIZE(kCondition), 1293 kCondition}, 1294 {{al, r0, r0, 0x000000ab}, 1295 "al r0 r0 0x000000ab", 1296 "Condition_al_r0_r0_0x000000ab", 1297 ARRAY_SIZE(kCondition), 1298 kCondition}, 1299 {{al, r4, r4, 0x02ac0000}, 1300 "al r4 r4 0x02ac0000", 1301 "RdIsRn_al_r4_r4_0x02ac0000", 1302 ARRAY_SIZE(kRdIsRn), 1303 kRdIsRn}, 1304 {{al, r0, r0, 0xf000000f}, 1305 "al r0 r0 0xf000000f", 1306 "RdIsRn_al_r0_r0_0xf000000f", 1307 ARRAY_SIZE(kRdIsRn), 1308 kRdIsRn}, 1309 {{al, r1, r1, 0x00000ff0}, 1310 "al r1 r1 0x00000ff0", 1311 "RdIsRn_al_r1_r1_0x00000ff0", 1312 ARRAY_SIZE(kRdIsRn), 1313 kRdIsRn}, 1314 {{al, r9, r9, 0x0ff00000}, 1315 "al r9 r9 0x0ff00000", 1316 "RdIsRn_al_r9_r9_0x0ff00000", 1317 ARRAY_SIZE(kRdIsRn), 1318 kRdIsRn}, 1319 {{al, r14, r14, 0xf000000f}, 1320 "al r14 r14 0xf000000f", 1321 "RdIsRn_al_r14_r14_0xf000000f", 1322 ARRAY_SIZE(kRdIsRn), 1323 kRdIsRn}, 1324 {{al, r1, r1, 0x00ab0000}, 1325 "al r1 r1 0x00ab0000", 1326 "RdIsRn_al_r1_r1_0x00ab0000", 1327 ARRAY_SIZE(kRdIsRn), 1328 kRdIsRn}, 1329 {{al, r10, r10, 0x00002ac0}, 1330 "al r10 r10 0x00002ac0", 1331 "RdIsRn_al_r10_r10_0x00002ac0", 1332 ARRAY_SIZE(kRdIsRn), 1333 kRdIsRn}, 1334 {{al, r6, r6, 0x0002ac00}, 1335 "al r6 r6 0x0002ac00", 1336 "RdIsRn_al_r6_r6_0x0002ac00", 1337 ARRAY_SIZE(kRdIsRn), 1338 kRdIsRn}, 1339 {{al, r3, r3, 0xac000002}, 1340 "al r3 r3 0xac000002", 1341 "RdIsRn_al_r3_r3_0xac000002", 1342 ARRAY_SIZE(kRdIsRn), 1343 kRdIsRn}, 1344 {{al, r6, r6, 0x00000ab0}, 1345 "al r6 r6 0x00000ab0", 1346 "RdIsRn_al_r6_r6_0x00000ab0", 1347 ARRAY_SIZE(kRdIsRn), 1348 kRdIsRn}, 1349 {{al, r4, r10, 0xac000002}, 1350 "al r4 r10 0xac000002", 1351 "RdIsNotRn_al_r4_r10_0xac000002", 1352 ARRAY_SIZE(kRdIsNotRn), 1353 kRdIsNotRn}, 1354 {{al, r0, r4, 0xc000003f}, 1355 "al r0 r4 0xc000003f", 1356 "RdIsNotRn_al_r0_r4_0xc000003f", 1357 ARRAY_SIZE(kRdIsNotRn), 1358 kRdIsNotRn}, 1359 {{al, r8, r0, 0xc000003f}, 1360 "al r8 r0 0xc000003f", 1361 "RdIsNotRn_al_r8_r0_0xc000003f", 1362 ARRAY_SIZE(kRdIsNotRn), 1363 kRdIsNotRn}, 1364 {{al, r5, r0, 0x00ab0000}, 1365 "al r5 r0 0x00ab0000", 1366 "RdIsNotRn_al_r5_r0_0x00ab0000", 1367 ARRAY_SIZE(kRdIsNotRn), 1368 kRdIsNotRn}, 1369 {{al, r8, r14, 0x002ac000}, 1370 "al r8 r14 0x002ac000", 1371 "RdIsNotRn_al_r8_r14_0x002ac000", 1372 ARRAY_SIZE(kRdIsNotRn), 1373 kRdIsNotRn}, 1374 {{al, r2, r11, 0x0002ac00}, 1375 "al r2 r11 0x0002ac00", 1376 "RdIsNotRn_al_r2_r11_0x0002ac00", 1377 ARRAY_SIZE(kRdIsNotRn), 1378 kRdIsNotRn}, 1379 {{al, r1, r0, 0x0000ff00}, 1380 "al r1 r0 0x0000ff00", 1381 "RdIsNotRn_al_r1_r0_0x0000ff00", 1382 ARRAY_SIZE(kRdIsNotRn), 1383 kRdIsNotRn}, 1384 {{al, r1, r7, 0x003fc000}, 1385 "al r1 r7 0x003fc000", 1386 "RdIsNotRn_al_r1_r7_0x003fc000", 1387 ARRAY_SIZE(kRdIsNotRn), 1388 kRdIsNotRn}, 1389 {{al, r11, r8, 0x0ab00000}, 1390 "al r11 r8 0x0ab00000", 1391 "RdIsNotRn_al_r11_r8_0x0ab00000", 1392 ARRAY_SIZE(kRdIsNotRn), 1393 kRdIsNotRn}, 1394 {{al, r14, r12, 0x3fc00000}, 1395 "al r14 r12 0x3fc00000", 1396 "RdIsNotRn_al_r14_r12_0x3fc00000", 1397 ARRAY_SIZE(kRdIsNotRn), 1398 kRdIsNotRn}, 1399 {{al, r0, r0, 0x00000000}, 1400 "al r0 r0 0x00000000", 1401 "ModifiedImmediate_al_r0_r0_0x00000000", 1402 ARRAY_SIZE(kModifiedImmediate), 1403 kModifiedImmediate}, 1404 {{al, r0, r0, 0x000000ff}, 1405 "al r0 r0 0x000000ff", 1406 "ModifiedImmediate_al_r0_r0_0x000000ff", 1407 ARRAY_SIZE(kModifiedImmediate), 1408 kModifiedImmediate}, 1409 {{al, r0, r0, 0xc000003f}, 1410 "al r0 r0 0xc000003f", 1411 "ModifiedImmediate_al_r0_r0_0xc000003f", 1412 ARRAY_SIZE(kModifiedImmediate), 1413 kModifiedImmediate}, 1414 {{al, r0, r0, 0xf000000f}, 1415 "al r0 r0 0xf000000f", 1416 "ModifiedImmediate_al_r0_r0_0xf000000f", 1417 ARRAY_SIZE(kModifiedImmediate), 1418 kModifiedImmediate}, 1419 {{al, r0, r0, 0xfc000003}, 1420 "al r0 r0 0xfc000003", 1421 "ModifiedImmediate_al_r0_r0_0xfc000003", 1422 ARRAY_SIZE(kModifiedImmediate), 1423 kModifiedImmediate}, 1424 {{al, r0, r0, 0xff000000}, 1425 "al r0 r0 0xff000000", 1426 "ModifiedImmediate_al_r0_r0_0xff000000", 1427 ARRAY_SIZE(kModifiedImmediate), 1428 kModifiedImmediate}, 1429 {{al, r0, r0, 0x3fc00000}, 1430 "al r0 r0 0x3fc00000", 1431 "ModifiedImmediate_al_r0_r0_0x3fc00000", 1432 ARRAY_SIZE(kModifiedImmediate), 1433 kModifiedImmediate}, 1434 {{al, r0, r0, 0x0ff00000}, 1435 "al r0 r0 0x0ff00000", 1436 "ModifiedImmediate_al_r0_r0_0x0ff00000", 1437 ARRAY_SIZE(kModifiedImmediate), 1438 kModifiedImmediate}, 1439 {{al, r0, r0, 0x03fc0000}, 1440 "al r0 r0 0x03fc0000", 1441 "ModifiedImmediate_al_r0_r0_0x03fc0000", 1442 ARRAY_SIZE(kModifiedImmediate), 1443 kModifiedImmediate}, 1444 {{al, r0, r0, 0x00ff0000}, 1445 "al r0 r0 0x00ff0000", 1446 "ModifiedImmediate_al_r0_r0_0x00ff0000", 1447 ARRAY_SIZE(kModifiedImmediate), 1448 kModifiedImmediate}, 1449 {{al, r0, r0, 0x003fc000}, 1450 "al r0 r0 0x003fc000", 1451 "ModifiedImmediate_al_r0_r0_0x003fc000", 1452 ARRAY_SIZE(kModifiedImmediate), 1453 kModifiedImmediate}, 1454 {{al, r0, r0, 0x000ff000}, 1455 "al r0 r0 0x000ff000", 1456 "ModifiedImmediate_al_r0_r0_0x000ff000", 1457 ARRAY_SIZE(kModifiedImmediate), 1458 kModifiedImmediate}, 1459 {{al, r0, r0, 0x0003fc00}, 1460 "al r0 r0 0x0003fc00", 1461 "ModifiedImmediate_al_r0_r0_0x0003fc00", 1462 ARRAY_SIZE(kModifiedImmediate), 1463 kModifiedImmediate}, 1464 {{al, r0, r0, 0x0000ff00}, 1465 "al r0 r0 0x0000ff00", 1466 "ModifiedImmediate_al_r0_r0_0x0000ff00", 1467 ARRAY_SIZE(kModifiedImmediate), 1468 kModifiedImmediate}, 1469 {{al, r0, r0, 0x00003fc0}, 1470 "al r0 r0 0x00003fc0", 1471 "ModifiedImmediate_al_r0_r0_0x00003fc0", 1472 ARRAY_SIZE(kModifiedImmediate), 1473 kModifiedImmediate}, 1474 {{al, r0, r0, 0x00000ff0}, 1475 "al r0 r0 0x00000ff0", 1476 "ModifiedImmediate_al_r0_r0_0x00000ff0", 1477 ARRAY_SIZE(kModifiedImmediate), 1478 kModifiedImmediate}, 1479 {{al, r0, r0, 0x000003fc}, 1480 "al r0 r0 0x000003fc", 1481 "ModifiedImmediate_al_r0_r0_0x000003fc", 1482 ARRAY_SIZE(kModifiedImmediate), 1483 kModifiedImmediate}, 1484 {{al, r0, r0, 0x000000ab}, 1485 "al r0 r0 0x000000ab", 1486 "ModifiedImmediate_al_r0_r0_0x000000ab", 1487 ARRAY_SIZE(kModifiedImmediate), 1488 kModifiedImmediate}, 1489 {{al, r0, r0, 0xc000002a}, 1490 "al r0 r0 0xc000002a", 1491 "ModifiedImmediate_al_r0_r0_0xc000002a", 1492 ARRAY_SIZE(kModifiedImmediate), 1493 kModifiedImmediate}, 1494 {{al, r0, r0, 0xb000000a}, 1495 "al r0 r0 0xb000000a", 1496 "ModifiedImmediate_al_r0_r0_0xb000000a", 1497 ARRAY_SIZE(kModifiedImmediate), 1498 kModifiedImmediate}, 1499 {{al, r0, r0, 0xac000002}, 1500 "al r0 r0 0xac000002", 1501 "ModifiedImmediate_al_r0_r0_0xac000002", 1502 ARRAY_SIZE(kModifiedImmediate), 1503 kModifiedImmediate}, 1504 {{al, r0, r0, 0xab000000}, 1505 "al r0 r0 0xab000000", 1506 "ModifiedImmediate_al_r0_r0_0xab000000", 1507 ARRAY_SIZE(kModifiedImmediate), 1508 kModifiedImmediate}, 1509 {{al, r0, r0, 0x2ac00000}, 1510 "al r0 r0 0x2ac00000", 1511 "ModifiedImmediate_al_r0_r0_0x2ac00000", 1512 ARRAY_SIZE(kModifiedImmediate), 1513 kModifiedImmediate}, 1514 {{al, r0, r0, 0x0ab00000}, 1515 "al r0 r0 0x0ab00000", 1516 "ModifiedImmediate_al_r0_r0_0x0ab00000", 1517 ARRAY_SIZE(kModifiedImmediate), 1518 kModifiedImmediate}, 1519 {{al, r0, r0, 0x02ac0000}, 1520 "al r0 r0 0x02ac0000", 1521 "ModifiedImmediate_al_r0_r0_0x02ac0000", 1522 ARRAY_SIZE(kModifiedImmediate), 1523 kModifiedImmediate}, 1524 {{al, r0, r0, 0x00ab0000}, 1525 "al r0 r0 0x00ab0000", 1526 "ModifiedImmediate_al_r0_r0_0x00ab0000", 1527 ARRAY_SIZE(kModifiedImmediate), 1528 kModifiedImmediate}, 1529 {{al, r0, r0, 0x002ac000}, 1530 "al r0 r0 0x002ac000", 1531 "ModifiedImmediate_al_r0_r0_0x002ac000", 1532 ARRAY_SIZE(kModifiedImmediate), 1533 kModifiedImmediate}, 1534 {{al, r0, r0, 0x000ab000}, 1535 "al r0 r0 0x000ab000", 1536 "ModifiedImmediate_al_r0_r0_0x000ab000", 1537 ARRAY_SIZE(kModifiedImmediate), 1538 kModifiedImmediate}, 1539 {{al, r0, r0, 0x0002ac00}, 1540 "al r0 r0 0x0002ac00", 1541 "ModifiedImmediate_al_r0_r0_0x0002ac00", 1542 ARRAY_SIZE(kModifiedImmediate), 1543 kModifiedImmediate}, 1544 {{al, r0, r0, 0x0000ab00}, 1545 "al r0 r0 0x0000ab00", 1546 "ModifiedImmediate_al_r0_r0_0x0000ab00", 1547 ARRAY_SIZE(kModifiedImmediate), 1548 kModifiedImmediate}, 1549 {{al, r0, r0, 0x00002ac0}, 1550 "al r0 r0 0x00002ac0", 1551 "ModifiedImmediate_al_r0_r0_0x00002ac0", 1552 ARRAY_SIZE(kModifiedImmediate), 1553 kModifiedImmediate}, 1554 {{al, r0, r0, 0x00000ab0}, 1555 "al r0 r0 0x00000ab0", 1556 "ModifiedImmediate_al_r0_r0_0x00000ab0", 1557 ARRAY_SIZE(kModifiedImmediate), 1558 kModifiedImmediate}, 1559 {{al, r0, r0, 0x000002ac}, 1560 "al r0 r0 0x000002ac", 1561 "ModifiedImmediate_al_r0_r0_0x000002ac", 1562 ARRAY_SIZE(kModifiedImmediate), 1563 kModifiedImmediate}}; 1564 1565 // We record all inputs to the instructions as outputs. This way, we also check 1566 // that what shouldn't change didn't change. 1567 struct TestResult { 1568 size_t output_size; 1569 const Inputs* outputs; 1570 }; 1571 1572 // These headers each contain an array of `TestResult` with the reference output 1573 // values. The reference arrays are names `kReference{mnemonic}`. 1574 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-adc.h" 1575 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-adcs.h" 1576 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-add.h" 1577 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-adds.h" 1578 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-and.h" 1579 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-ands.h" 1580 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-bic.h" 1581 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-bics.h" 1582 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-eor.h" 1583 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-eors.h" 1584 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-orr.h" 1585 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-orrs.h" 1586 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rsb.h" 1587 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rsbs.h" 1588 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rsc.h" 1589 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-rscs.h" 1590 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-sbc.h" 1591 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-sbcs.h" 1592 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-sub.h" 1593 #include "aarch32/traces/simulator-cond-rd-rn-operand-const-a32-subs.h" 1594 1595 1596 // The maximum number of errors to report in detail for each test. 1597 const unsigned kErrorReportLimit = 8; 1598 1599 typedef void (MacroAssembler::*Fn)(Condition cond, 1600 Register rd, 1601 Register rn, 1602 const Operand& op); 1603 1604 void TestHelper(Fn instruction, 1605 const char* mnemonic, 1606 const TestResult reference[]) { 1607 SETUP(); 1608 masm.UseA32(); 1609 START(); 1610 1611 // Data to compare to `reference`. 1612 TestResult* results[ARRAY_SIZE(kTests)]; 1613 1614 // Test cases for memory bound instructions may allocate a buffer and save its 1615 // address in this array. 1616 byte* scratch_memory_buffers[ARRAY_SIZE(kTests)]; 1617 1618 // Generate a loop for each element in `kTests`. Each loop tests one specific 1619 // instruction. 1620 for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) { 1621 // Allocate results on the heap for this test. 1622 results[i] = new TestResult; 1623 results[i]->outputs = new Inputs[kTests[i].input_size]; 1624 results[i]->output_size = kTests[i].input_size; 1625 1626 size_t input_stride = sizeof(kTests[i].inputs[0]) * kTests[i].input_size; 1627 VIXL_ASSERT(IsUint32(input_stride)); 1628 1629 scratch_memory_buffers[i] = NULL; 1630 1631 Label loop; 1632 UseScratchRegisterScope scratch_registers(&masm); 1633 // Include all registers from r0 ro r12. 1634 scratch_registers.Include(RegisterList(0x1fff)); 1635 1636 // Values to pass to the macro-assembler. 1637 Condition cond = kTests[i].operands.cond; 1638 Register rd = kTests[i].operands.rd; 1639 Register rn = kTests[i].operands.rn; 1640 uint32_t immediate = kTests[i].operands.immediate; 1641 Operand op(immediate); 1642 scratch_registers.Exclude(rd); 1643 scratch_registers.Exclude(rn); 1644 1645 // Allocate reserved registers for our own use. 1646 Register input_ptr = scratch_registers.Acquire(); 1647 Register input_end = scratch_registers.Acquire(); 1648 Register result_ptr = scratch_registers.Acquire(); 1649 1650 // Initialize `input_ptr` to the first element and `input_end` the address 1651 // after the array. 1652 __ Mov(input_ptr, Operand::From(kTests[i].inputs)); 1653 __ Add(input_end, input_ptr, static_cast<uint32_t>(input_stride)); 1654 __ Mov(result_ptr, Operand::From(results[i]->outputs)); 1655 __ Bind(&loop); 1656 1657 { 1658 UseScratchRegisterScope temp_registers(&masm); 1659 Register nzcv_bits = temp_registers.Acquire(); 1660 Register saved_q_bit = temp_registers.Acquire(); 1661 // Save the `Q` bit flag. 1662 __ Mrs(saved_q_bit, APSR); 1663 __ And(saved_q_bit, saved_q_bit, QFlag); 1664 // Set the `NZCV` and `Q` flags together. 1665 __ Ldr(nzcv_bits, MemOperand(input_ptr, offsetof(Inputs, apsr))); 1666 __ Orr(nzcv_bits, nzcv_bits, saved_q_bit); 1667 __ Msr(APSR_nzcvq, nzcv_bits); 1668 } 1669 __ Ldr(rd, MemOperand(input_ptr, offsetof(Inputs, rd))); 1670 __ Ldr(rn, MemOperand(input_ptr, offsetof(Inputs, rn))); 1671 1672 (masm.*instruction)(cond, rd, rn, op); 1673 1674 { 1675 UseScratchRegisterScope temp_registers(&masm); 1676 Register nzcv_bits = temp_registers.Acquire(); 1677 __ Mrs(nzcv_bits, APSR); 1678 // Only record the NZCV bits. 1679 __ And(nzcv_bits, nzcv_bits, NZCVFlag); 1680 __ Str(nzcv_bits, MemOperand(result_ptr, offsetof(Inputs, apsr))); 1681 } 1682 __ Str(rd, MemOperand(result_ptr, offsetof(Inputs, rd))); 1683 __ Str(rn, MemOperand(result_ptr, offsetof(Inputs, rn))); 1684 1685 // Advance the result pointer. 1686 __ Add(result_ptr, result_ptr, Operand::From(sizeof(kTests[i].inputs[0]))); 1687 // Loop back until `input_ptr` is lower than `input_base`. 1688 __ Add(input_ptr, input_ptr, Operand::From(sizeof(kTests[i].inputs[0]))); 1689 __ Cmp(input_ptr, input_end); 1690 __ B(ne, &loop); 1691 } 1692 1693 END(); 1694 1695 RUN(); 1696 1697 if (Test::generate_test_trace()) { 1698 // Print the results. 1699 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1700 printf("const Inputs kOutputs_%s_%s[] = {\n", 1701 mnemonic, 1702 kTests[i].identifier); 1703 for (size_t j = 0; j < results[i]->output_size; j++) { 1704 printf(" { "); 1705 printf("0x%08" PRIx32, results[i]->outputs[j].apsr); 1706 printf(", "); 1707 printf("0x%08" PRIx32, results[i]->outputs[j].rd); 1708 printf(", "); 1709 printf("0x%08" PRIx32, results[i]->outputs[j].rn); 1710 printf(" },\n"); 1711 } 1712 printf("};\n"); 1713 } 1714 printf("const TestResult kReference%s[] = {\n", mnemonic); 1715 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1716 printf(" {\n"); 1717 printf(" ARRAY_SIZE(kOutputs_%s_%s),\n", 1718 mnemonic, 1719 kTests[i].identifier); 1720 printf(" kOutputs_%s_%s,\n", mnemonic, kTests[i].identifier); 1721 printf(" },\n"); 1722 } 1723 printf("};\n"); 1724 } else if (kCheckSimulatorTestResults) { 1725 // Check the results. 1726 unsigned total_error_count = 0; 1727 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1728 bool instruction_has_errors = false; 1729 for (size_t j = 0; j < kTests[i].input_size; j++) { 1730 uint32_t apsr = results[i]->outputs[j].apsr; 1731 uint32_t rd = results[i]->outputs[j].rd; 1732 uint32_t rn = results[i]->outputs[j].rn; 1733 uint32_t apsr_input = kTests[i].inputs[j].apsr; 1734 uint32_t rd_input = kTests[i].inputs[j].rd; 1735 uint32_t rn_input = kTests[i].inputs[j].rn; 1736 uint32_t apsr_ref = reference[i].outputs[j].apsr; 1737 uint32_t rd_ref = reference[i].outputs[j].rd; 1738 uint32_t rn_ref = reference[i].outputs[j].rn; 1739 1740 if (((apsr != apsr_ref) || (rd != rd_ref) || (rn != rn_ref)) && 1741 (++total_error_count <= kErrorReportLimit)) { 1742 // Print the instruction once even if it triggered multiple failures. 1743 if (!instruction_has_errors) { 1744 printf("Error(s) when testing \"%s %s\":\n", 1745 mnemonic, 1746 kTests[i].operands_description); 1747 instruction_has_errors = true; 1748 } 1749 // Print subsequent errors. 1750 printf(" Input: "); 1751 printf("0x%08" PRIx32, apsr_input); 1752 printf(", "); 1753 printf("0x%08" PRIx32, rd_input); 1754 printf(", "); 1755 printf("0x%08" PRIx32, rn_input); 1756 printf("\n"); 1757 printf(" Expected: "); 1758 printf("0x%08" PRIx32, apsr_ref); 1759 printf(", "); 1760 printf("0x%08" PRIx32, rd_ref); 1761 printf(", "); 1762 printf("0x%08" PRIx32, rn_ref); 1763 printf("\n"); 1764 printf(" Found: "); 1765 printf("0x%08" PRIx32, apsr); 1766 printf(", "); 1767 printf("0x%08" PRIx32, rd); 1768 printf(", "); 1769 printf("0x%08" PRIx32, rn); 1770 printf("\n\n"); 1771 } 1772 } 1773 } 1774 1775 if (total_error_count > kErrorReportLimit) { 1776 printf("%u other errors follow.\n", 1777 total_error_count - kErrorReportLimit); 1778 } 1779 VIXL_CHECK(total_error_count == 0); 1780 } else { 1781 VIXL_WARNING("Assembled the code, but did not run anything.\n"); 1782 } 1783 1784 for (size_t i = 0; i < ARRAY_SIZE(kTests); i++) { 1785 delete[] results[i]->outputs; 1786 delete results[i]; 1787 delete[] scratch_memory_buffers[i]; 1788 } 1789 1790 TEARDOWN(); 1791 } 1792 1793 // Instantiate tests for each instruction in the list. 1794 // TODO: Remove this limitation by having a sandboxing mechanism. 1795 #if defined(VIXL_HOST_POINTER_32) 1796 #define TEST(mnemonic) \ 1797 void Test_##mnemonic() { \ 1798 TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \ 1799 } \ 1800 Test test_##mnemonic( \ 1801 "AARCH32_SIMULATOR_COND_RD_RN_OPERAND_CONST_A32_" #mnemonic, \ 1802 &Test_##mnemonic); 1803 #else 1804 #define TEST(mnemonic) \ 1805 void Test_##mnemonic() { \ 1806 VIXL_WARNING("This test can only run on a 32-bit host.\n"); \ 1807 USE(TestHelper); \ 1808 } \ 1809 Test test_##mnemonic( \ 1810 "AARCH32_SIMULATOR_COND_RD_RN_OPERAND_CONST_A32_" #mnemonic, \ 1811 &Test_##mnemonic); 1812 #endif 1813 1814 FOREACH_INSTRUCTION(TEST) 1815 #undef TEST 1816 1817 } // namespace 1818 #endif 1819 1820 } // namespace aarch32 1821 } // namespace vixl 1822