• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2016, VIXL authors
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are met:
6//
7//   * Redistributions of source code must retain the above copyright notice,
8//     this list of conditions and the following disclaimer.
9//   * Redistributions in binary form must reproduce the above copyright notice,
10//     this list of conditions and the following disclaimer in the documentation
11//     and/or other materials provided with the distribution.
12//   * Neither the name of ARM Limited nor the names of its contributors may be
13//     used to endorse or promote products derived from this software without
14//     specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27// 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