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// Data type description shared by test case descriptions. 28 29{ 30 // List of operand types. They describe what can be passed to the assembler to 31 // encode an instruction. 32 // 33 // - name: Identifier for the operand. It allows test case descriptions to 34 // refer to it. 35 // - type: C++ type used by VIXL to represent this operand. 36 // - variants: List of variant this operand can take. 37 // - default: Which variant to use by default. 38 "operands": [ 39 { 40 "identifier": "Condition", 41 "type": "Condition", 42 "variants": [ 43 "eq", 44 "ne", 45 "cs", 46 "cc", 47 "mi", 48 "pl", 49 "vs", 50 "vc", 51 "hi", 52 "ls", 53 "ge", 54 "lt", 55 "gt", 56 "le", 57 "al" 58 ], 59 "default": "al" 60 }, 61 { 62 "identifier": "Always", 63 "type": "Condition", 64 "variants": [ 65 "al" 66 ], 67 "default": "al" 68 }, 69 { 70 "identifier": "NotAlways", 71 "type": "Condition", 72 "variants": [ 73 "eq", 74 "ne", 75 "cs", 76 "cc", 77 "mi", 78 "pl", 79 "vs", 80 "vc", 81 "hi", 82 "ls", 83 "ge", 84 "lt", 85 "gt", 86 "le" 87 ], 88 "default": "eq" 89 }, 90 { 91 "identifier": "AllRegisters", 92 "type": "Register", 93 "variants": [ 94 "r0", 95 "r1", 96 "r2", 97 "r3", 98 "r4", 99 "r5", 100 "r6", 101 "r7", 102 "r8", 103 "r9", 104 "r10", 105 "r11", 106 "r12", 107 "r13", 108 "r14", 109 "r15" 110 ], 111 "default": "r0" 112 }, 113 { 114 "identifier": "AllRegistersButPC", 115 "type": "Register", 116 "variants": [ 117 "r0", 118 "r1", 119 "r2", 120 "r3", 121 "r4", 122 "r5", 123 "r6", 124 "r7", 125 "r8", 126 "r9", 127 "r10", 128 "r11", 129 "r12", 130 "r13", 131 "r14" 132 ], 133 "default": "r0" 134 }, 135 { 136 "identifier": "LowRegisters", 137 "type": "Register", 138 "variants": [ 139 "r0", 140 "r1", 141 "r2", 142 "r3", 143 "r4", 144 "r5", 145 "r6", 146 "r7" 147 ], 148 "default": "r0" 149 }, 150 { 151 "identifier": "RegisterPC", 152 "type": "Register", 153 "variants": [ 154 "pc" 155 ], 156 "default": "pc" 157 }, 158 { 159 "identifier": "RegisterSP", 160 "type": "Register", 161 "variants": [ 162 "sp" 163 ], 164 "default": "sp" 165 }, 166 { 167 "identifier": "A32ModifiedImmediate", 168 "type": "uint32_t", 169 "variants": [ 170 "0x00000000", 171 "0x000000ff", 172 "0xc000003f", 173 "0xf000000f", 174 "0xfc000003", 175 "0xff000000", 176 "0x3fc00000", 177 "0x0ff00000", 178 "0x03fc0000", 179 "0x00ff0000", 180 "0x003fc000", 181 "0x000ff000", 182 "0x0003fc00", 183 "0x0000ff00", 184 "0x00003fc0", 185 "0x00000ff0", 186 "0x000003fc", 187 "0x000000ab", 188 "0xc000002a", 189 "0xb000000a", 190 "0xac000002", 191 "0xab000000", 192 "0x2ac00000", 193 "0x0ab00000", 194 "0x02ac0000", 195 "0x00ab0000", 196 "0x002ac000", 197 "0x000ab000", 198 "0x0002ac00", 199 "0x0000ab00", 200 "0x00002ac0", 201 "0x00000ab0", 202 "0x000002ac" 203 ], 204 "default": "0x000000ab" 205 }, 206 { 207 "identifier": "T32ModifiedImmediate", 208 "type": "uint32_t", 209 "variants": [ 210 "0x000001fe", 211 "0x000003fc", 212 "0x000007f8", 213 "0x00000ff0", 214 "0x00001fe0", 215 "0x00003fc0", 216 "0x00007f80", 217 "0x0000ff00", 218 "0x0001fe00", 219 "0x0003fc00", 220 "0x0007f800", 221 "0x000ff000", 222 "0x001fe000", 223 "0x003fc000", 224 "0x007f8000", 225 "0x00ff0000", 226 "0x01fe0000", 227 "0x03fc0000", 228 "0x07f80000", 229 "0x0ff00000", 230 "0x1fe00000", 231 "0x3fc00000", 232 "0x7f800000", 233 "0xff000000", 234 "0x000000ff", 235 "0x00ff00ff", 236 "0xff00ff00", 237 "0xffffffff", 238 "0x00000156", 239 "0x000002ac", 240 "0x00000558", 241 "0x00000ab0", 242 "0x00001560", 243 "0x00002ac0", 244 "0x00005580", 245 "0x0000ab00", 246 "0x00015600", 247 "0x0002ac00", 248 "0x00055800", 249 "0x000ab000", 250 "0x00156000", 251 "0x002ac000", 252 "0x00558000", 253 "0x00ab0000", 254 "0x01560000", 255 "0x02ac0000", 256 "0x05580000", 257 "0x0ab00000", 258 "0x15600000", 259 "0x2ac00000", 260 "0x55800000", 261 "0xab000000", 262 "0x000000ab", 263 "0x00ab00ab", 264 "0xab00ab00", 265 "0xabababab" 266 ], 267 "default": "0xabababab" 268 }, 269 { 270 "identifier": "Imm16", 271 "type": "uint32_t", 272 "variants": [ 273 "0x0000", 274 "0x0001", 275 "0x0002", 276 "0x0020", 277 "0x007d", 278 "0x007e", 279 "0x007f", 280 "0x7ffd", 281 "0x7ffe", 282 "0x7fff", 283 "0x3333", 284 "0x5555", 285 "0xaaaa", 286 "0xcccc", 287 "0x8000", 288 "0x8001", 289 "0x8002", 290 "0x8003", 291 "0xff80", 292 "0xff81", 293 "0xff82", 294 "0xff83", 295 "0xffe0", 296 "0xfffd", 297 "0xfffe", 298 "0xffff" 299 ], 300 "default": "0x0" 301 }, 302 { 303 "identifier": "Imm8x4", 304 "type": "uint32_t", 305 "variants": [ 306 "0x0", 307 "0x4", 308 "0x8", 309 "0xc", 310 "0x10", 311 "0x14", 312 "0x18", 313 "0x1c", 314 "0x20", 315 "0x24", 316 "0x28", 317 "0x2c", 318 "0x30", 319 "0x34", 320 "0x38", 321 "0x3c", 322 "0x40", 323 "0x44", 324 "0x48", 325 "0x4c", 326 "0x50", 327 "0x54", 328 "0x58", 329 "0x5c", 330 "0x60", 331 "0x64", 332 "0x68", 333 "0x6c", 334 "0x70", 335 "0x74", 336 "0x78", 337 "0x7c", 338 "0x80", 339 "0x84", 340 "0x88", 341 "0x8c", 342 "0x90", 343 "0x94", 344 "0x98", 345 "0x9c", 346 "0xa0", 347 "0xa4", 348 "0xa8", 349 "0xac", 350 "0xb0", 351 "0xb4", 352 "0xb8", 353 "0xbc", 354 "0xc0", 355 "0xc4", 356 "0xc8", 357 "0xcc", 358 "0xd0", 359 "0xd4", 360 "0xd8", 361 "0xdc", 362 "0xe0", 363 "0xe4", 364 "0xe8", 365 "0xec", 366 "0xf0", 367 "0xf4", 368 "0xf8", 369 "0xfc", 370 "0x100", 371 "0x104", 372 "0x108", 373 "0x10c", 374 "0x110", 375 "0x114", 376 "0x118", 377 "0x11c", 378 "0x120", 379 "0x124", 380 "0x128", 381 "0x12c", 382 "0x130", 383 "0x134", 384 "0x138", 385 "0x13c", 386 "0x140", 387 "0x144", 388 "0x148", 389 "0x14c", 390 "0x150", 391 "0x154", 392 "0x158", 393 "0x15c", 394 "0x160", 395 "0x164", 396 "0x168", 397 "0x16c", 398 "0x170", 399 "0x174", 400 "0x178", 401 "0x17c", 402 "0x180", 403 "0x184", 404 "0x188", 405 "0x18c", 406 "0x190", 407 "0x194", 408 "0x198", 409 "0x19c", 410 "0x1a0", 411 "0x1a4", 412 "0x1a8", 413 "0x1ac", 414 "0x1b0", 415 "0x1b4", 416 "0x1b8", 417 "0x1bc", 418 "0x1c0", 419 "0x1c4", 420 "0x1c8", 421 "0x1cc", 422 "0x1d0", 423 "0x1d4", 424 "0x1d8", 425 "0x1dc", 426 "0x1e0", 427 "0x1e4", 428 "0x1e8", 429 "0x1ec", 430 "0x1f0", 431 "0x1f4", 432 "0x1f8", 433 "0x1fc", 434 "0x200", 435 "0x204", 436 "0x208", 437 "0x20c", 438 "0x210", 439 "0x214", 440 "0x218", 441 "0x21c", 442 "0x220", 443 "0x224", 444 "0x228", 445 "0x22c", 446 "0x230", 447 "0x234", 448 "0x238", 449 "0x23c", 450 "0x240", 451 "0x244", 452 "0x248", 453 "0x24c", 454 "0x250", 455 "0x254", 456 "0x258", 457 "0x25c", 458 "0x260", 459 "0x264", 460 "0x268", 461 "0x26c", 462 "0x270", 463 "0x274", 464 "0x278", 465 "0x27c", 466 "0x280", 467 "0x284", 468 "0x288", 469 "0x28c", 470 "0x290", 471 "0x294", 472 "0x298", 473 "0x29c", 474 "0x2a0", 475 "0x2a4", 476 "0x2a8", 477 "0x2ac", 478 "0x2b0", 479 "0x2b4", 480 "0x2b8", 481 "0x2bc", 482 "0x2c0", 483 "0x2c4", 484 "0x2c8", 485 "0x2cc", 486 "0x2d0", 487 "0x2d4", 488 "0x2d8", 489 "0x2dc", 490 "0x2e0", 491 "0x2e4", 492 "0x2e8", 493 "0x2ec", 494 "0x2f0", 495 "0x2f4", 496 "0x2f8", 497 "0x2fc", 498 "0x300", 499 "0x304", 500 "0x308", 501 "0x30c", 502 "0x310", 503 "0x314", 504 "0x318", 505 "0x31c", 506 "0x320", 507 "0x324", 508 "0x328", 509 "0x32c", 510 "0x330", 511 "0x334", 512 "0x338", 513 "0x33c", 514 "0x340", 515 "0x344", 516 "0x348", 517 "0x34c", 518 "0x350", 519 "0x354", 520 "0x358", 521 "0x35c", 522 "0x360", 523 "0x364", 524 "0x368", 525 "0x36c", 526 "0x370", 527 "0x374", 528 "0x378", 529 "0x37c", 530 "0x380", 531 "0x384", 532 "0x388", 533 "0x38c", 534 "0x390", 535 "0x394", 536 "0x398", 537 "0x39c", 538 "0x3a0", 539 "0x3a4", 540 "0x3a8", 541 "0x3ac", 542 "0x3b0", 543 "0x3b4", 544 "0x3b8", 545 "0x3bc", 546 "0x3c0", 547 "0x3c4", 548 "0x3c8", 549 "0x3cc", 550 "0x3d0", 551 "0x3d4", 552 "0x3d8", 553 "0x3dc", 554 "0x3e0", 555 "0x3e4", 556 "0x3e8", 557 "0x3ec", 558 "0x3f0", 559 "0x3f4", 560 "0x3f8", 561 "0x3fc" 562 ], 563 "default": "0x3d4" 564 }, 565 { 566 "identifier": "Imm7x4", 567 "type": "uint32_t", 568 "variants": [ 569 "0x0", 570 "0x4", 571 "0x8", 572 "0xc", 573 "0x10", 574 "0x14", 575 "0x18", 576 "0x1c", 577 "0x20", 578 "0x24", 579 "0x28", 580 "0x2c", 581 "0x30", 582 "0x34", 583 "0x38", 584 "0x3c", 585 "0x40", 586 "0x44", 587 "0x48", 588 "0x4c", 589 "0x50", 590 "0x54", 591 "0x58", 592 "0x5c", 593 "0x60", 594 "0x64", 595 "0x68", 596 "0x6c", 597 "0x70", 598 "0x74", 599 "0x78", 600 "0x7c", 601 "0x80", 602 "0x84", 603 "0x88", 604 "0x8c", 605 "0x90", 606 "0x94", 607 "0x98", 608 "0x9c", 609 "0xa0", 610 "0xa4", 611 "0xa8", 612 "0xac", 613 "0xb0", 614 "0xb4", 615 "0xb8", 616 "0xbc", 617 "0xc0", 618 "0xc4", 619 "0xc8", 620 "0xcc", 621 "0xd0", 622 "0xd4", 623 "0xd8", 624 "0xdc", 625 "0xe0", 626 "0xe4", 627 "0xe8", 628 "0xec", 629 "0xf0", 630 "0xf4", 631 "0xf8", 632 "0xfc", 633 "0x100", 634 "0x104", 635 "0x108", 636 "0x10c", 637 "0x110", 638 "0x114", 639 "0x118", 640 "0x11c", 641 "0x120", 642 "0x124", 643 "0x128", 644 "0x12c", 645 "0x130", 646 "0x134", 647 "0x138", 648 "0x13c", 649 "0x140", 650 "0x144", 651 "0x148", 652 "0x14c", 653 "0x150", 654 "0x154", 655 "0x158", 656 "0x15c", 657 "0x160", 658 "0x164", 659 "0x168", 660 "0x16c", 661 "0x170", 662 "0x174", 663 "0x178", 664 "0x17c", 665 "0x180", 666 "0x184", 667 "0x188", 668 "0x18c", 669 "0x190", 670 "0x194", 671 "0x198", 672 "0x19c", 673 "0x1a0", 674 "0x1a4", 675 "0x1a8", 676 "0x1ac", 677 "0x1b0", 678 "0x1b4", 679 "0x1b8", 680 "0x1bc", 681 "0x1c0", 682 "0x1c4", 683 "0x1c8", 684 "0x1cc", 685 "0x1d0", 686 "0x1d4", 687 "0x1d8", 688 "0x1dc", 689 "0x1e0", 690 "0x1e4", 691 "0x1e8", 692 "0x1ec", 693 "0x1f0", 694 "0x1f4", 695 "0x1f8", 696 "0x1fc" 697 ], 698 "default": "0x1d4" 699 }, 700 { 701 "identifier": "Shift", 702 "type": "ShiftType", 703 "variants": [ 704 "LSL", 705 "LSR", 706 "ASR", 707 "ROR" 708 ], 709 "default": "LSL" 710 }, 711 { 712 "identifier": "Shift1To31", 713 "type": "ShiftType", 714 "variants": [ 715 "LSL", 716 "ROR" 717 ], 718 "default": "LSL" 719 }, 720 { 721 "identifier": "Shift1To32", 722 "type": "ShiftType", 723 "variants": [ 724 "LSR", 725 "ASR" 726 ], 727 "default": "LSR" 728 }, 729 { 730 "identifier": "ShiftROR", 731 "type": "ShiftType", 732 "variants": [ 733 "ROR" 734 ], 735 "default": "ROR" 736 }, 737 { 738 "identifier": "ShiftAmount1To31", 739 "type": "uint32_t", 740 "variants": [ 741 "1", 742 "2", 743 "3", 744 "4", 745 "5", 746 "6", 747 "7", 748 "8", 749 "9", 750 "10", 751 "11", 752 "12", 753 "13", 754 "14", 755 "15", 756 "16", 757 "17", 758 "18", 759 "19", 760 "20", 761 "21", 762 "22", 763 "23", 764 "24", 765 "25", 766 "26", 767 "27", 768 "28", 769 "29", 770 "30", 771 "31" 772 ], 773 "default": "1" 774 }, 775 { 776 "identifier": "ShiftAmount1To32", 777 "type": "uint32_t", 778 "variants": [ 779 "1", 780 "2", 781 "3", 782 "4", 783 "5", 784 "6", 785 "7", 786 "8", 787 "9", 788 "10", 789 "11", 790 "12", 791 "13", 792 "14", 793 "15", 794 "16", 795 "17", 796 "18", 797 "19", 798 "20", 799 "21", 800 "22", 801 "23", 802 "24", 803 "25", 804 "26", 805 "27", 806 "28", 807 "29", 808 "30", 809 "31", 810 "32" 811 ], 812 "default": "1" 813 }, 814 // Some instructions have a rotation amount restricted to "0", 815 // "8", "16" and "24". 816 { 817 "identifier": "ShiftRotationAmountX8", 818 "type": "uint32_t", 819 "variants": [ 820 "0", 821 "8", 822 "16", 823 "24" 824 ], 825 "default": "0" 826 }, 827 { 828 "identifier": "Sign", 829 "type": "Sign", 830 "variants": [ 831 "plus", 832 "minus" 833 ], 834 "default": "plus" 835 }, 836 { 837 "identifier": "OffsetLowerThan256", 838 "type": "int32_t", 839 "variants": [ 840 "0", 841 "1", 842 "2", 843 "3", 844 "4", 845 "5", 846 "6", 847 "7", 848 "8", 849 "9", 850 "10", 851 "11", 852 "12", 853 "13", 854 "14", 855 "15", 856 "16", 857 "17", 858 "18", 859 "19", 860 "20", 861 "21", 862 "22", 863 "23", 864 "24", 865 "25", 866 "26", 867 "27", 868 "28", 869 "29", 870 "30", 871 "31", 872 "32", 873 "33", 874 "34", 875 "35", 876 "36", 877 "37", 878 "38", 879 "39", 880 "40", 881 "41", 882 "42", 883 "43", 884 "44", 885 "45", 886 "46", 887 "47", 888 "48", 889 "49", 890 "50", 891 "51", 892 "52", 893 "53", 894 "54", 895 "55", 896 "56", 897 "57", 898 "58", 899 "59", 900 "60", 901 "61", 902 "62", 903 "63", 904 "64", 905 "65", 906 "66", 907 "67", 908 "68", 909 "69", 910 "70", 911 "71", 912 "72", 913 "73", 914 "74", 915 "75", 916 "76", 917 "77", 918 "78", 919 "79", 920 "80", 921 "81", 922 "82", 923 "83", 924 "84", 925 "85", 926 "86", 927 "87", 928 "88", 929 "89", 930 "90", 931 "91", 932 "92", 933 "93", 934 "94", 935 "95", 936 "96", 937 "97", 938 "98", 939 "99", 940 "100", 941 "101", 942 "102", 943 "103", 944 "104", 945 "105", 946 "106", 947 "107", 948 "108", 949 "109", 950 "110", 951 "111", 952 "112", 953 "113", 954 "114", 955 "115", 956 "116", 957 "117", 958 "118", 959 "119", 960 "120", 961 "121", 962 "122", 963 "123", 964 "124", 965 "125", 966 "126", 967 "127", 968 "128", 969 "129", 970 "130", 971 "131", 972 "132", 973 "133", 974 "134", 975 "135", 976 "136", 977 "137", 978 "138", 979 "139", 980 "140", 981 "141", 982 "142", 983 "143", 984 "144", 985 "145", 986 "146", 987 "147", 988 "148", 989 "149", 990 "150", 991 "151", 992 "152", 993 "153", 994 "154", 995 "155", 996 "156", 997 "157", 998 "158", 999 "159", 1000 "160", 1001 "161", 1002 "162", 1003 "163", 1004 "164", 1005 "165", 1006 "166", 1007 "167", 1008 "168", 1009 "169", 1010 "170", 1011 "171", 1012 "172", 1013 "173", 1014 "174", 1015 "175", 1016 "176", 1017 "177", 1018 "178", 1019 "179", 1020 "180", 1021 "181", 1022 "182", 1023 "183", 1024 "184", 1025 "185", 1026 "186", 1027 "187", 1028 "188", 1029 "189", 1030 "190", 1031 "191", 1032 "192", 1033 "193", 1034 "194", 1035 "195", 1036 "196", 1037 "197", 1038 "198", 1039 "199", 1040 "200", 1041 "201", 1042 "202", 1043 "203", 1044 "204", 1045 "205", 1046 "206", 1047 "207", 1048 "208", 1049 "209", 1050 "210", 1051 "211", 1052 "212", 1053 "213", 1054 "214", 1055 "215", 1056 "216", 1057 "217", 1058 "218", 1059 "219", 1060 "220", 1061 "221", 1062 "222", 1063 "223", 1064 "224", 1065 "225", 1066 "226", 1067 "227", 1068 "228", 1069 "229", 1070 "230", 1071 "231", 1072 "232", 1073 "233", 1074 "234", 1075 "235", 1076 "236", 1077 "237", 1078 "238", 1079 "239", 1080 "240", 1081 "241", 1082 "242", 1083 "243", 1084 "244", 1085 "245", 1086 "246", 1087 "247", 1088 "248", 1089 "249", 1090 "250", 1091 "251", 1092 "252", 1093 "253", 1094 "254", 1095 "255" 1096 ], 1097 "default": "0" 1098 }, 1099 { 1100 "identifier": "OffsetLowerThan4096", 1101 "type": "int32_t", 1102 // These variants are a random sample of 500 integers out of all integers 1103 // from 1 to 4094 (included). We've added 0 and 4095 explicitely. 1104 "variants": [ 1105 "0", 1106 "4095", 1107 "2", 1108 "4", 1109 "19", 1110 "22", 1111 "47", 1112 "48", 1113 "53", 1114 "55", 1115 "57", 1116 "70", 1117 "72", 1118 "83", 1119 "98", 1120 "106", 1121 "132", 1122 "136", 1123 "138", 1124 "180", 1125 "188", 1126 "192", 1127 "198", 1128 "199", 1129 "200", 1130 "210", 1131 "213", 1132 "216", 1133 "227", 1134 "233", 1135 "251", 1136 "263", 1137 "264", 1138 "270", 1139 "282", 1140 "306", 1141 "322", 1142 "342", 1143 "348", 1144 "358", 1145 "362", 1146 "365", 1147 "371", 1148 "386", 1149 "398", 1150 "421", 1151 "429", 1152 "441", 1153 "459", 1154 "462", 1155 "470", 1156 "478", 1157 "479", 1158 "481", 1159 "484", 1160 "490", 1161 "496", 1162 "510", 1163 "513", 1164 "517", 1165 "523", 1166 "524", 1167 "525", 1168 "542", 1169 "547", 1170 "565", 1171 "580", 1172 "582", 1173 "595", 1174 "601", 1175 "606", 1176 "612", 1177 "618", 1178 "624", 1179 "662", 1180 "663", 1181 "669", 1182 "670", 1183 "672", 1184 "674", 1185 "678", 1186 "679", 1187 "685", 1188 "688", 1189 "689", 1190 "704", 1191 "712", 1192 "719", 1193 "732", 1194 "766", 1195 "770", 1196 "774", 1197 "778", 1198 "783", 1199 "791", 1200 "794", 1201 "796", 1202 "797", 1203 "806", 1204 "811", 1205 "828", 1206 "831", 1207 "837", 1208 "844", 1209 "850", 1210 "871", 1211 "872", 1212 "875", 1213 "893", 1214 "915", 1215 "932", 1216 "955", 1217 "958", 1218 "960", 1219 "964", 1220 "969", 1221 "970", 1222 "977", 1223 "988", 1224 "997", 1225 "998", 1226 "999", 1227 "1009", 1228 "1017", 1229 "1027", 1230 "1035", 1231 "1043", 1232 "1050", 1233 "1066", 1234 "1079", 1235 "1097", 1236 "1099", 1237 "1116", 1238 "1135", 1239 "1159", 1240 "1168", 1241 "1171", 1242 "1175", 1243 "1186", 1244 "1198", 1245 "1231", 1246 "1234", 1247 "1241", 1248 "1246", 1249 "1261", 1250 "1266", 1251 "1274", 1252 "1295", 1253 "1309", 1254 "1323", 1255 "1348", 1256 "1357", 1257 "1359", 1258 "1372", 1259 "1374", 1260 "1377", 1261 "1389", 1262 "1390", 1263 "1394", 1264 "1399", 1265 "1407", 1266 "1428", 1267 "1437", 1268 "1438", 1269 "1445", 1270 "1455", 1271 "1458", 1272 "1459", 1273 "1472", 1274 "1475", 1275 "1479", 1276 "1485", 1277 "1498", 1278 "1505", 1279 "1506", 1280 "1526", 1281 "1527", 1282 "1536", 1283 "1537", 1284 "1542", 1285 "1551", 1286 "1556", 1287 "1567", 1288 "1585", 1289 "1601", 1290 "1610", 1291 "1635", 1292 "1642", 1293 "1651", 1294 "1652", 1295 "1655", 1296 "1660", 1297 "1665", 1298 "1666", 1299 "1677", 1300 "1687", 1301 "1695", 1302 "1699", 1303 "1712", 1304 "1732", 1305 "1736", 1306 "1740", 1307 "1750", 1308 "1759", 1309 "1769", 1310 "1804", 1311 "1808", 1312 "1823", 1313 "1824", 1314 "1835", 1315 "1845", 1316 "1848", 1317 "1859", 1318 "1860", 1319 "1867", 1320 "1870", 1321 "1872", 1322 "1887", 1323 "1892", 1324 "1896", 1325 "1899", 1326 "1916", 1327 "1922", 1328 "1924", 1329 "1934", 1330 "1948", 1331 "1961", 1332 "1967", 1333 "1975", 1334 "1981", 1335 "1991", 1336 "1999", 1337 "2011", 1338 "2012", 1339 "2016", 1340 "2021", 1341 "2023", 1342 "2025", 1343 "2026", 1344 "2036", 1345 "2038", 1346 "2040", 1347 "2044", 1348 "2046", 1349 "2047", 1350 "2052", 1351 "2069", 1352 "2072", 1353 "2086", 1354 "2091", 1355 "2098", 1356 "2119", 1357 "2124", 1358 "2137", 1359 "2139", 1360 "2175", 1361 "2180", 1362 "2183", 1363 "2202", 1364 "2208", 1365 "2217", 1366 "2224", 1367 "2233", 1368 "2240", 1369 "2245", 1370 "2247", 1371 "2254", 1372 "2281", 1373 "2290", 1374 "2311", 1375 "2314", 1376 "2323", 1377 "2326", 1378 "2338", 1379 "2345", 1380 "2358", 1381 "2359", 1382 "2365", 1383 "2366", 1384 "2374", 1385 "2381", 1386 "2395", 1387 "2402", 1388 "2403", 1389 "2427", 1390 "2442", 1391 "2451", 1392 "2453", 1393 "2454", 1394 "2462", 1395 "2464", 1396 "2475", 1397 "2483", 1398 "2490", 1399 "2507", 1400 "2519", 1401 "2523", 1402 "2532", 1403 "2535", 1404 "2541", 1405 "2545", 1406 "2546", 1407 "2559", 1408 "2582", 1409 "2588", 1410 "2590", 1411 "2591", 1412 "2617", 1413 "2619", 1414 "2627", 1415 "2628", 1416 "2642", 1417 "2650", 1418 "2651", 1419 "2662", 1420 "2665", 1421 "2669", 1422 "2677", 1423 "2689", 1424 "2690", 1425 "2695", 1426 "2701", 1427 "2703", 1428 "2710", 1429 "2718", 1430 "2721", 1431 "2726", 1432 "2728", 1433 "2749", 1434 "2768", 1435 "2775", 1436 "2792", 1437 "2794", 1438 "2796", 1439 "2797", 1440 "2799", 1441 "2800", 1442 "2810", 1443 "2813", 1444 "2821", 1445 "2839", 1446 "2849", 1447 "2864", 1448 "2866", 1449 "2892", 1450 "2901", 1451 "2906", 1452 "2929", 1453 "2933", 1454 "2944", 1455 "2945", 1456 "2946", 1457 "2948", 1458 "2963", 1459 "2976", 1460 "2978", 1461 "2982", 1462 "2984", 1463 "2994", 1464 "2999", 1465 "3002", 1466 "3003", 1467 "3007", 1468 "3008", 1469 "3015", 1470 "3028", 1471 "3034", 1472 "3039", 1473 "3041", 1474 "3057", 1475 "3063", 1476 "3069", 1477 "3071", 1478 "3072", 1479 "3076", 1480 "3078", 1481 "3079", 1482 "3082", 1483 "3088", 1484 "3094", 1485 "3099", 1486 "3105", 1487 "3109", 1488 "3117", 1489 "3136", 1490 "3138", 1491 "3139", 1492 "3142", 1493 "3157", 1494 "3162", 1495 "3170", 1496 "3194", 1497 "3195", 1498 "3209", 1499 "3221", 1500 "3239", 1501 "3254", 1502 "3256", 1503 "3266", 1504 "3282", 1505 "3287", 1506 "3308", 1507 "3313", 1508 "3325", 1509 "3343", 1510 "3344", 1511 "3366", 1512 "3384", 1513 "3391", 1514 "3397", 1515 "3399", 1516 "3405", 1517 "3413", 1518 "3417", 1519 "3425", 1520 "3438", 1521 "3439", 1522 "3443", 1523 "3449", 1524 "3450", 1525 "3472", 1526 "3481", 1527 "3487", 1528 "3491", 1529 "3504", 1530 "3517", 1531 "3522", 1532 "3529", 1533 "3541", 1534 "3544", 1535 "3548", 1536 "3564", 1537 "3566", 1538 "3570", 1539 "3572", 1540 "3583", 1541 "3585", 1542 "3597", 1543 "3603", 1544 "3607", 1545 "3608", 1546 "3610", 1547 "3625", 1548 "3626", 1549 "3633", 1550 "3636", 1551 "3638", 1552 "3652", 1553 "3659", 1554 "3660", 1555 "3662", 1556 "3663", 1557 "3685", 1558 "3688", 1559 "3696", 1560 "3702", 1561 "3714", 1562 "3717", 1563 "3728", 1564 "3739", 1565 "3743", 1566 "3752", 1567 "3765", 1568 "3771", 1569 "3772", 1570 "3774", 1571 "3787", 1572 "3802", 1573 "3811", 1574 "3821", 1575 "3856", 1576 "3865", 1577 "3867", 1578 "3870", 1579 "3871", 1580 "3880", 1581 "3899", 1582 "3907", 1583 "3914", 1584 "3918", 1585 "3921", 1586 "3949", 1587 "3952", 1588 "3963", 1589 "3975", 1590 "3978", 1591 "3986", 1592 "3989", 1593 "3994", 1594 "4018", 1595 "4037", 1596 "4046", 1597 "4056", 1598 "4058", 1599 "4065", 1600 "4076", 1601 "4079", 1602 "4082", 1603 "4090", 1604 "4091", 1605 "4092", 1606 "4093" 1607 ], 1608 "default": "0" 1609 }, 1610 { 1611 "identifier": "AddressingMode", 1612 "type": "AddrMode", 1613 "variants": [ 1614 "Offset", 1615 "PreIndex", 1616 "PostIndex" 1617 ], 1618 "default": "Offset" 1619 } 1620 ], 1621 // List of input types. They describe what can be fed to an instruction at 1622 // runtime. 1623 // 1624 // - name: Identifer for the input. It allows test case descriptions to refer 1625 // to it. 1626 // - type: Python type associated with this input, implemented as a subclass 1627 // of `test_generator.data_types.Inputs`. There should be a Python 1628 // class for every input type. 1629 // - values: List of possible values. 1630 // - default: Value to use by default. 1631 "inputs": [ 1632 { 1633 "identifier": "NZCV", 1634 "type": "NZCV", 1635 "values": [ 1636 "NFlag", 1637 "ZFlag", 1638 "CFlag", 1639 "VFlag", 1640 "NZFlag", 1641 "NCFlag", 1642 "NVFlag", 1643 "ZCFlag", 1644 "ZVFlag", 1645 "CVFlag", 1646 "NZCFlag", 1647 "NZVFlag", 1648 "NCVFlag", 1649 "ZCVFlag", 1650 "NZCVFlag" 1651 ], 1652 "default": "NoFlag" 1653 }, 1654 // TODO: Consider having a seperate list for inputs for which we are only 1655 // interested in recording the value after the instruction has executed. 1656 // This applies to `Q` and `GE`. 1657 { 1658 "identifier": "Q", 1659 "type": "Q", 1660 "values": [ 1661 "NoFlag", 1662 "QFlag" 1663 ], 1664 "default": "NoFlag" 1665 }, 1666 { 1667 "identifier": "GE", 1668 "type": "GE", 1669 "values": [ 1670 "NoFlag", 1671 "GE01Flag", 1672 "GE02Flag", 1673 "GE03Flag", 1674 "GE12Flag", 1675 "GE13Flag", 1676 "GE23Flag", 1677 "GE012Flag", 1678 "GE013Flag", 1679 "GE023Flag", 1680 "GE123Flag", 1681 "GE0123Flag" 1682 ], 1683 "default": "NoFlag" 1684 }, 1685 { 1686 "identifier": "Register", 1687 "type": "Register", 1688 "values": [ 1689 "0x00000000", 1690 "0x00000001", 1691 "0x00000002", 1692 "0x00000020", 1693 "0x0000007d", 1694 "0x0000007e", 1695 "0x0000007f", 1696 "0x00007ffd", 1697 "0x00007ffe", 1698 "0x00007fff", 1699 "0x33333333", 1700 "0x55555555", 1701 "0x7ffffffd", 1702 "0x7ffffffe", 1703 "0x7fffffff", 1704 "0x80000000", 1705 "0x80000001", 1706 "0xaaaaaaaa", 1707 "0xcccccccc", 1708 "0xffff8000", 1709 "0xffff8001", 1710 "0xffff8002", 1711 "0xffff8003", 1712 "0xffffff80", 1713 "0xffffff81", 1714 "0xffffff82", 1715 "0xffffff83", 1716 "0xffffffe0", 1717 "0xfffffffd", 1718 "0xfffffffe", 1719 "0xffffffff" 1720 ], 1721 "default": "0xabababab" 1722 }, 1723 { 1724 "identifier": "RegisterOffsetLowerThan4096", 1725 "type": "Register", 1726 // These values are a random sample of 500 integers out of all integers 1727 // from 1 to 4094 (included). We've added 0 and 4095 explicitely. 1728 "values": [ 1729 "0", 1730 "4095", 1731 "2", 1732 "4", 1733 "19", 1734 "22", 1735 "47", 1736 "48", 1737 "53", 1738 "55", 1739 "57", 1740 "70", 1741 "72", 1742 "83", 1743 "98", 1744 "106", 1745 "132", 1746 "136", 1747 "138", 1748 "180", 1749 "188", 1750 "192", 1751 "198", 1752 "199", 1753 "200", 1754 "210", 1755 "213", 1756 "216", 1757 "227", 1758 "233", 1759 "251", 1760 "263", 1761 "264", 1762 "270", 1763 "282", 1764 "306", 1765 "322", 1766 "342", 1767 "348", 1768 "358", 1769 "362", 1770 "365", 1771 "371", 1772 "386", 1773 "398", 1774 "421", 1775 "429", 1776 "441", 1777 "459", 1778 "462", 1779 "470", 1780 "478", 1781 "479", 1782 "481", 1783 "484", 1784 "490", 1785 "496", 1786 "510", 1787 "513", 1788 "517", 1789 "523", 1790 "524", 1791 "525", 1792 "542", 1793 "547", 1794 "565", 1795 "580", 1796 "582", 1797 "595", 1798 "601", 1799 "606", 1800 "612", 1801 "618", 1802 "624", 1803 "662", 1804 "663", 1805 "669", 1806 "670", 1807 "672", 1808 "674", 1809 "678", 1810 "679", 1811 "685", 1812 "688", 1813 "689", 1814 "704", 1815 "712", 1816 "719", 1817 "732", 1818 "766", 1819 "770", 1820 "774", 1821 "778", 1822 "783", 1823 "791", 1824 "794", 1825 "796", 1826 "797", 1827 "806", 1828 "811", 1829 "828", 1830 "831", 1831 "837", 1832 "844", 1833 "850", 1834 "871", 1835 "872", 1836 "875", 1837 "893", 1838 "915", 1839 "932", 1840 "955", 1841 "958", 1842 "960", 1843 "964", 1844 "969", 1845 "970", 1846 "977", 1847 "988", 1848 "997", 1849 "998", 1850 "999", 1851 "1009", 1852 "1017", 1853 "1027", 1854 "1035", 1855 "1043", 1856 "1050", 1857 "1066", 1858 "1079", 1859 "1097", 1860 "1099", 1861 "1116", 1862 "1135", 1863 "1159", 1864 "1168", 1865 "1171", 1866 "1175", 1867 "1186", 1868 "1198", 1869 "1231", 1870 "1234", 1871 "1241", 1872 "1246", 1873 "1261", 1874 "1266", 1875 "1274", 1876 "1295", 1877 "1309", 1878 "1323", 1879 "1348", 1880 "1357", 1881 "1359", 1882 "1372", 1883 "1374", 1884 "1377", 1885 "1389", 1886 "1390", 1887 "1394", 1888 "1399", 1889 "1407", 1890 "1428", 1891 "1437", 1892 "1438", 1893 "1445", 1894 "1455", 1895 "1458", 1896 "1459", 1897 "1472", 1898 "1475", 1899 "1479", 1900 "1485", 1901 "1498", 1902 "1505", 1903 "1506", 1904 "1526", 1905 "1527", 1906 "1536", 1907 "1537", 1908 "1542", 1909 "1551", 1910 "1556", 1911 "1567", 1912 "1585", 1913 "1601", 1914 "1610", 1915 "1635", 1916 "1642", 1917 "1651", 1918 "1652", 1919 "1655", 1920 "1660", 1921 "1665", 1922 "1666", 1923 "1677", 1924 "1687", 1925 "1695", 1926 "1699", 1927 "1712", 1928 "1732", 1929 "1736", 1930 "1740", 1931 "1750", 1932 "1759", 1933 "1769", 1934 "1804", 1935 "1808", 1936 "1823", 1937 "1824", 1938 "1835", 1939 "1845", 1940 "1848", 1941 "1859", 1942 "1860", 1943 "1867", 1944 "1870", 1945 "1872", 1946 "1887", 1947 "1892", 1948 "1896", 1949 "1899", 1950 "1916", 1951 "1922", 1952 "1924", 1953 "1934", 1954 "1948", 1955 "1961", 1956 "1967", 1957 "1975", 1958 "1981", 1959 "1991", 1960 "1999", 1961 "2011", 1962 "2012", 1963 "2016", 1964 "2021", 1965 "2023", 1966 "2025", 1967 "2026", 1968 "2036", 1969 "2038", 1970 "2040", 1971 "2044", 1972 "2046", 1973 "2047", 1974 "2052", 1975 "2069", 1976 "2072", 1977 "2086", 1978 "2091", 1979 "2098", 1980 "2119", 1981 "2124", 1982 "2137", 1983 "2139", 1984 "2175", 1985 "2180", 1986 "2183", 1987 "2202", 1988 "2208", 1989 "2217", 1990 "2224", 1991 "2233", 1992 "2240", 1993 "2245", 1994 "2247", 1995 "2254", 1996 "2281", 1997 "2290", 1998 "2311", 1999 "2314", 2000 "2323", 2001 "2326", 2002 "2338", 2003 "2345", 2004 "2358", 2005 "2359", 2006 "2365", 2007 "2366", 2008 "2374", 2009 "2381", 2010 "2395", 2011 "2402", 2012 "2403", 2013 "2427", 2014 "2442", 2015 "2451", 2016 "2453", 2017 "2454", 2018 "2462", 2019 "2464", 2020 "2475", 2021 "2483", 2022 "2490", 2023 "2507", 2024 "2519", 2025 "2523", 2026 "2532", 2027 "2535", 2028 "2541", 2029 "2545", 2030 "2546", 2031 "2559", 2032 "2582", 2033 "2588", 2034 "2590", 2035 "2591", 2036 "2617", 2037 "2619", 2038 "2627", 2039 "2628", 2040 "2642", 2041 "2650", 2042 "2651", 2043 "2662", 2044 "2665", 2045 "2669", 2046 "2677", 2047 "2689", 2048 "2690", 2049 "2695", 2050 "2701", 2051 "2703", 2052 "2710", 2053 "2718", 2054 "2721", 2055 "2726", 2056 "2728", 2057 "2749", 2058 "2768", 2059 "2775", 2060 "2792", 2061 "2794", 2062 "2796", 2063 "2797", 2064 "2799", 2065 "2800", 2066 "2810", 2067 "2813", 2068 "2821", 2069 "2839", 2070 "2849", 2071 "2864", 2072 "2866", 2073 "2892", 2074 "2901", 2075 "2906", 2076 "2929", 2077 "2933", 2078 "2944", 2079 "2945", 2080 "2946", 2081 "2948", 2082 "2963", 2083 "2976", 2084 "2978", 2085 "2982", 2086 "2984", 2087 "2994", 2088 "2999", 2089 "3002", 2090 "3003", 2091 "3007", 2092 "3008", 2093 "3015", 2094 "3028", 2095 "3034", 2096 "3039", 2097 "3041", 2098 "3057", 2099 "3063", 2100 "3069", 2101 "3071", 2102 "3072", 2103 "3076", 2104 "3078", 2105 "3079", 2106 "3082", 2107 "3088", 2108 "3094", 2109 "3099", 2110 "3105", 2111 "3109", 2112 "3117", 2113 "3136", 2114 "3138", 2115 "3139", 2116 "3142", 2117 "3157", 2118 "3162", 2119 "3170", 2120 "3194", 2121 "3195", 2122 "3209", 2123 "3221", 2124 "3239", 2125 "3254", 2126 "3256", 2127 "3266", 2128 "3282", 2129 "3287", 2130 "3308", 2131 "3313", 2132 "3325", 2133 "3343", 2134 "3344", 2135 "3366", 2136 "3384", 2137 "3391", 2138 "3397", 2139 "3399", 2140 "3405", 2141 "3413", 2142 "3417", 2143 "3425", 2144 "3438", 2145 "3439", 2146 "3443", 2147 "3449", 2148 "3450", 2149 "3472", 2150 "3481", 2151 "3487", 2152 "3491", 2153 "3504", 2154 "3517", 2155 "3522", 2156 "3529", 2157 "3541", 2158 "3544", 2159 "3548", 2160 "3564", 2161 "3566", 2162 "3570", 2163 "3572", 2164 "3583", 2165 "3585", 2166 "3597", 2167 "3603", 2168 "3607", 2169 "3608", 2170 "3610", 2171 "3625", 2172 "3626", 2173 "3633", 2174 "3636", 2175 "3638", 2176 "3652", 2177 "3659", 2178 "3660", 2179 "3662", 2180 "3663", 2181 "3685", 2182 "3688", 2183 "3696", 2184 "3702", 2185 "3714", 2186 "3717", 2187 "3728", 2188 "3739", 2189 "3743", 2190 "3752", 2191 "3765", 2192 "3771", 2193 "3772", 2194 "3774", 2195 "3787", 2196 "3802", 2197 "3811", 2198 "3821", 2199 "3856", 2200 "3865", 2201 "3867", 2202 "3870", 2203 "3871", 2204 "3880", 2205 "3899", 2206 "3907", 2207 "3914", 2208 "3918", 2209 "3921", 2210 "3949", 2211 "3952", 2212 "3963", 2213 "3975", 2214 "3978", 2215 "3986", 2216 "3989", 2217 "3994", 2218 "4018", 2219 "4037", 2220 "4046", 2221 "4056", 2222 "4058", 2223 "4065", 2224 "4076", 2225 "4079", 2226 "4082", 2227 "4090", 2228 "4091", 2229 "4092", 2230 "4093" 2231 ], 2232 "default": "0" 2233 }, 2234 { 2235 "identifier": "RegisterShift", 2236 "type": "Register", 2237 "values": [ 2238 "0", 2239 "1", 2240 "2", 2241 "3", 2242 "4", 2243 "5", 2244 "6", 2245 "7", 2246 "8", 2247 "9", 2248 "10", 2249 "11", 2250 "12", 2251 "13", 2252 "14", 2253 "15", 2254 "16", 2255 "17", 2256 "18", 2257 "19", 2258 "20", 2259 "21", 2260 "22", 2261 "23", 2262 "24", 2263 "25", 2264 "26", 2265 "27", 2266 "28", 2267 "29", 2268 "30", 2269 "31", 2270 "32" 2271 ], 2272 "default": "0" 2273 }, 2274 { 2275 "identifier": "MemOperand", 2276 "type": "MemOperand", 2277 // MemOperand inputs are represented by an offset and a 32 bit word placed 2278 // in memory. 2279 // The word will be placed into a scratch buffer and we will compute the 2280 // address of the base register according to what the `MemOperand` does. 2281 // The offset is used to record the value of the base register. 2282 "values": [ 2283 "{0, 0x77777777}", 2284 "{0, 0x55555555}", 2285 "{0, 0x0badbeef}", 2286 "{0, 0x0cabba9e}" 2287 ], 2288 "default": "{0, 0x77777777}" 2289 } 2290 ] 2291} 2292