Home | History | Annotate | Download | only in aarch32
      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-assembler-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 
     45 #define BUF_SIZE (4096)
     46 
     47 namespace vixl {
     48 namespace aarch32 {
     49 
     50 // List of instruction mnemonics.
     51 #define FOREACH_INSTRUCTION(M) \
     52   M(mov)                       \
     53   M(movs)                      \
     54   M(mvn)                       \
     55   M(mvns)
     56 
     57 
     58 // The following definitions are defined again in each generated test, therefore
     59 // we need to place them in an anomymous namespace. It expresses that they are
     60 // local to this file only, and the compiler is not allowed to share these types
     61 // across test files during template instantiation. Specifically, `Operands` has
     62 // various layouts across generated tests so it absolutely cannot be shared.
     63 
     64 #ifdef VIXL_INCLUDE_TARGET_A32
     65 namespace {
     66 
     67 // Values to be passed to the assembler to produce the instruction under test.
     68 struct Operands {
     69   Condition cond;
     70   Register rd;
     71   uint32_t immediate;
     72 };
     73 
     74 // This structure contains all data needed to test one specific
     75 // instruction.
     76 struct TestData {
     77   // The `operands` field represents what to pass to the assembler to
     78   // produce the instruction.
     79   Operands operands;
     80   // True if we need to generate an IT instruction for this test to be valid.
     81   bool in_it_block;
     82   // The condition to give the IT instruction, this will be set to "al" by
     83   // default.
     84   Condition it_condition;
     85   // Description of the operands, used for error reporting.
     86   const char* operands_description;
     87   // Unique identifier, used for generating traces.
     88   const char* identifier;
     89 };
     90 
     91 struct TestResult {
     92   size_t size;
     93   const byte* encoding;
     94 };
     95 
     96 // Each element of this array produce one instruction encoding.
     97 const TestData kTests[] =
     98     {{{ls, r0, 0x003fc000}, false, al, "ls r0 0x003fc000", "ls_r0_0x003fc000"},
     99      {{eq, r13, 0xff000000},
    100       false,
    101       al,
    102       "eq r13 0xff000000",
    103       "eq_r13_"
    104       "0xff000000"},
    105      {{al, r0, 0x0002ac00}, false, al, "al r0 0x0002ac00", "al_r0_0x0002ac00"},
    106      {{gt, r13, 0x002ac000},
    107       false,
    108       al,
    109       "gt r13 0x002ac000",
    110       "gt_r13_"
    111       "0x002ac000"},
    112      {{mi, r3, 0x000002ac}, false, al, "mi r3 0x000002ac", "mi_r3_0x000002ac"},
    113      {{ls, r0, 0x000000ff}, false, al, "ls r0 0x000000ff", "ls_r0_0x000000ff"},
    114      {{ls, r7, 0x0000ab00}, false, al, "ls r7 0x0000ab00", "ls_r7_0x0000ab00"},
    115      {{cc, r11, 0x0ff00000},
    116       false,
    117       al,
    118       "cc r11 0x0ff00000",
    119       "cc_r11_"
    120       "0x0ff00000"},
    121      {{vs, r5, 0xc000003f}, false, al, "vs r5 0xc000003f", "vs_r5_0xc000003f"},
    122      {{gt, r3, 0x00ab0000}, false, al, "gt r3 0x00ab0000", "gt_r3_0x00ab0000"},
    123      {{hi, r7, 0xff000000}, false, al, "hi r7 0xff000000", "hi_r7_0xff000000"},
    124      {{vc, r10, 0xff000000},
    125       false,
    126       al,
    127       "vc r10 0xff000000",
    128       "vc_r10_"
    129       "0xff000000"},
    130      {{hi, r10, 0x002ac000},
    131       false,
    132       al,
    133       "hi r10 0x002ac000",
    134       "hi_r10_"
    135       "0x002ac000"},
    136      {{ne, r9, 0x00ff0000}, false, al, "ne r9 0x00ff0000", "ne_r9_0x00ff0000"},
    137      {{ge, r3, 0xf000000f}, false, al, "ge r3 0xf000000f", "ge_r3_0xf000000f"},
    138      {{hi, r0, 0x000ff000}, false, al, "hi r0 0x000ff000", "hi_r0_0x000ff000"},
    139      {{mi, r2, 0x00002ac0}, false, al, "mi r2 0x00002ac0", "mi_r2_0x00002ac0"},
    140      {{ge, r6, 0x000ab000}, false, al, "ge r6 0x000ab000", "ge_r6_0x000ab000"},
    141      {{mi, r9, 0x00ff0000}, false, al, "mi r9 0x00ff0000", "mi_r9_0x00ff0000"},
    142      {{cs, r2, 0x000ff000}, false, al, "cs r2 0x000ff000", "cs_r2_0x000ff000"},
    143      {{lt, r5, 0x003fc000}, false, al, "lt r5 0x003fc000", "lt_r5_0x003fc000"},
    144      {{al, r1, 0x000ff000}, false, al, "al r1 0x000ff000", "al_r1_0x000ff000"},
    145      {{mi, r6, 0x000000ab}, false, al, "mi r6 0x000000ab", "mi_r6_0x000000ab"},
    146      {{pl, r9, 0xac000002}, false, al, "pl r9 0xac000002", "pl_r9_0xac000002"},
    147      {{hi, r8, 0x000ff000}, false, al, "hi r8 0x000ff000", "hi_r8_0x000ff000"},
    148      {{vs, r0, 0x00002ac0}, false, al, "vs r0 0x00002ac0", "vs_r0_0x00002ac0"},
    149      {{ls, r4, 0xab000000}, false, al, "ls r4 0xab000000", "ls_r4_0xab000000"},
    150      {{vs, r6, 0x000ab000}, false, al, "vs r6 0x000ab000", "vs_r6_0x000ab000"},
    151      {{vc, r13, 0x0000ab00},
    152       false,
    153       al,
    154       "vc r13 0x0000ab00",
    155       "vc_r13_"
    156       "0x0000ab00"},
    157      {{mi, r0, 0xab000000}, false, al, "mi r0 0xab000000", "mi_r0_0xab000000"},
    158      {{vs, r9, 0x0ab00000}, false, al, "vs r9 0x0ab00000", "vs_r9_0x0ab00000"},
    159      {{pl, r0, 0x00003fc0}, false, al, "pl r0 0x00003fc0", "pl_r0_0x00003fc0"},
    160      {{al, r2, 0x0000ff00}, false, al, "al r2 0x0000ff00", "al_r2_0x0000ff00"},
    161      {{gt, r11, 0x00000ab0},
    162       false,
    163       al,
    164       "gt r11 0x00000ab0",
    165       "gt_r11_"
    166       "0x00000ab0"},
    167      {{vs, r10, 0xac000002},
    168       false,
    169       al,
    170       "vs r10 0xac000002",
    171       "vs_r10_"
    172       "0xac000002"},
    173      {{cs, r3, 0x0002ac00}, false, al, "cs r3 0x0002ac00", "cs_r3_0x0002ac00"},
    174      {{vc, r13, 0x000000ab},
    175       false,
    176       al,
    177       "vc r13 0x000000ab",
    178       "vc_r13_"
    179       "0x000000ab"},
    180      {{cs, r11, 0x003fc000},
    181       false,
    182       al,
    183       "cs r11 0x003fc000",
    184       "cs_r11_"
    185       "0x003fc000"},
    186      {{vs, r14, 0x0000ab00},
    187       false,
    188       al,
    189       "vs r14 0x0000ab00",
    190       "vs_r14_"
    191       "0x0000ab00"},
    192      {{eq, r11, 0xfc000003},
    193       false,
    194       al,
    195       "eq r11 0xfc000003",
    196       "eq_r11_"
    197       "0xfc000003"},
    198      {{pl, r13, 0x00000ab0},
    199       false,
    200       al,
    201       "pl r13 0x00000ab0",
    202       "pl_r13_"
    203       "0x00000ab0"},
    204      {{ge, r4, 0xb000000a}, false, al, "ge r4 0xb000000a", "ge_r4_0xb000000a"},
    205      {{pl, r12, 0x00003fc0},
    206       false,
    207       al,
    208       "pl r12 0x00003fc0",
    209       "pl_r12_"
    210       "0x00003fc0"},
    211      {{le, r4, 0x0000ff00}, false, al, "le r4 0x0000ff00", "le_r4_0x0000ff00"},
    212      {{pl, r4, 0x003fc000}, false, al, "pl r4 0x003fc000", "pl_r4_0x003fc000"},
    213      {{hi, r0, 0x002ac000}, false, al, "hi r0 0x002ac000", "hi_r0_0x002ac000"},
    214      {{mi, r1, 0x00003fc0}, false, al, "mi r1 0x00003fc0", "mi_r1_0x00003fc0"},
    215      {{hi, r9, 0xf000000f}, false, al, "hi r9 0xf000000f", "hi_r9_0xf000000f"},
    216      {{al, r11, 0x0000ab00},
    217       false,
    218       al,
    219       "al r11 0x0000ab00",
    220       "al_r11_"
    221       "0x0000ab00"},
    222      {{ne, r6, 0x00ab0000}, false, al, "ne r6 0x00ab0000", "ne_r6_0x00ab0000"},
    223      {{lt, r4, 0xff000000}, false, al, "lt r4 0xff000000", "lt_r4_0xff000000"},
    224      {{pl, r0, 0x0ab00000}, false, al, "pl r0 0x0ab00000", "pl_r0_0x0ab00000"},
    225      {{ls, r2, 0xc000002a}, false, al, "ls r2 0xc000002a", "ls_r2_0xc000002a"},
    226      {{lt, r5, 0x00003fc0}, false, al, "lt r5 0x00003fc0", "lt_r5_0x00003fc0"},
    227      {{mi, r5, 0x000003fc}, false, al, "mi r5 0x000003fc", "mi_r5_0x000003fc"},
    228      {{ls, r11, 0xb000000a},
    229       false,
    230       al,
    231       "ls r11 0xb000000a",
    232       "ls_r11_"
    233       "0xb000000a"},
    234      {{al, r3, 0x0000ff00}, false, al, "al r3 0x0000ff00", "al_r3_0x0000ff00"},
    235      {{vs, r3, 0xfc000003}, false, al, "vs r3 0xfc000003", "vs_r3_0xfc000003"},
    236      {{ne, r1, 0xc000002a}, false, al, "ne r1 0xc000002a", "ne_r1_0xc000002a"},
    237      {{eq, r10, 0x0003fc00},
    238       false,
    239       al,
    240       "eq r10 0x0003fc00",
    241       "eq_r10_"
    242       "0x0003fc00"},
    243      {{eq, r3, 0xf000000f}, false, al, "eq r3 0xf000000f", "eq_r3_0xf000000f"},
    244      {{vs, r5, 0x000ff000}, false, al, "vs r5 0x000ff000", "vs_r5_0x000ff000"},
    245      {{ge, r12, 0x000000ab},
    246       false,
    247       al,
    248       "ge r12 0x000000ab",
    249       "ge_r12_"
    250       "0x000000ab"},
    251      {{vc, r12, 0xf000000f},
    252       false,
    253       al,
    254       "vc r12 0xf000000f",
    255       "vc_r12_"
    256       "0xf000000f"},
    257      {{lt, r11, 0x02ac0000},
    258       false,
    259       al,
    260       "lt r11 0x02ac0000",
    261       "lt_r11_"
    262       "0x02ac0000"},
    263      {{vs, r6, 0x003fc000}, false, al, "vs r6 0x003fc000", "vs_r6_0x003fc000"},
    264      {{cs, r8, 0x3fc00000}, false, al, "cs r8 0x3fc00000", "cs_r8_0x3fc00000"},
    265      {{le, r5, 0x0002ac00}, false, al, "le r5 0x0002ac00", "le_r5_0x0002ac00"},
    266      {{ls, r9, 0x0002ac00}, false, al, "ls r9 0x0002ac00", "ls_r9_0x0002ac00"},
    267      {{al, r4, 0x3fc00000}, false, al, "al r4 0x3fc00000", "al_r4_0x3fc00000"},
    268      {{lt, r5, 0x000000ff}, false, al, "lt r5 0x000000ff", "lt_r5_0x000000ff"},
    269      {{cs, r8, 0xc000002a}, false, al, "cs r8 0xc000002a", "cs_r8_0xc000002a"},
    270      {{cs, r0, 0x00000ab0}, false, al, "cs r0 0x00000ab0", "cs_r0_0x00000ab0"},
    271      {{cs, r2, 0x3fc00000}, false, al, "cs r2 0x3fc00000", "cs_r2_0x3fc00000"},
    272      {{vs, r14, 0xab000000},
    273       false,
    274       al,
    275       "vs r14 0xab000000",
    276       "vs_r14_"
    277       "0xab000000"},
    278      {{ne, r8, 0x002ac000}, false, al, "ne r8 0x002ac000", "ne_r8_0x002ac000"},
    279      {{vs, r1, 0x003fc000}, false, al, "vs r1 0x003fc000", "vs_r1_0x003fc000"},
    280      {{al, r7, 0x003fc000}, false, al, "al r7 0x003fc000", "al_r7_0x003fc000"},
    281      {{vs, r7, 0x000ab000}, false, al, "vs r7 0x000ab000", "vs_r7_0x000ab000"},
    282      {{vc, r12, 0xb000000a},
    283       false,
    284       al,
    285       "vc r12 0xb000000a",
    286       "vc_r12_"
    287       "0xb000000a"},
    288      {{eq, r2, 0xc000002a}, false, al, "eq r2 0xc000002a", "eq_r2_0xc000002a"},
    289      {{lt, r4, 0x0000ff00}, false, al, "lt r4 0x0000ff00", "lt_r4_0x0000ff00"},
    290      {{eq, r8, 0x2ac00000}, false, al, "eq r8 0x2ac00000", "eq_r8_0x2ac00000"},
    291      {{hi, r7, 0x3fc00000}, false, al, "hi r7 0x3fc00000", "hi_r7_0x3fc00000"},
    292      {{mi, r13, 0x3fc00000},
    293       false,
    294       al,
    295       "mi r13 0x3fc00000",
    296       "mi_r13_"
    297       "0x3fc00000"},
    298      {{al, r2, 0x0002ac00}, false, al, "al r2 0x0002ac00", "al_r2_0x0002ac00"},
    299      {{gt, r13, 0xab000000},
    300       false,
    301       al,
    302       "gt r13 0xab000000",
    303       "gt_r13_"
    304       "0xab000000"},
    305      {{vs, r3, 0x00000ab0}, false, al, "vs r3 0x00000ab0", "vs_r3_0x00000ab0"},
    306      {{mi, r14, 0x00000000},
    307       false,
    308       al,
    309       "mi r14 0x00000000",
    310       "mi_r14_"
    311       "0x00000000"},
    312      {{vs, r10, 0x3fc00000},
    313       false,
    314       al,
    315       "vs r10 0x3fc00000",
    316       "vs_r10_"
    317       "0x3fc00000"},
    318      {{vc, r7, 0x0ff00000}, false, al, "vc r7 0x0ff00000", "vc_r7_0x0ff00000"},
    319      {{al, r3, 0xf000000f}, false, al, "al r3 0xf000000f", "al_r3_0xf000000f"},
    320      {{cs, r12, 0x03fc0000},
    321       false,
    322       al,
    323       "cs r12 0x03fc0000",
    324       "cs_r12_"
    325       "0x03fc0000"},
    326      {{hi, r14, 0xab000000},
    327       false,
    328       al,
    329       "hi r14 0xab000000",
    330       "hi_r14_"
    331       "0xab000000"},
    332      {{mi, r13, 0x000002ac},
    333       false,
    334       al,
    335       "mi r13 0x000002ac",
    336       "mi_r13_"
    337       "0x000002ac"},
    338      {{ge, r8, 0x2ac00000}, false, al, "ge r8 0x2ac00000", "ge_r8_0x2ac00000"},
    339      {{vc, r14, 0x000003fc},
    340       false,
    341       al,
    342       "vc r14 0x000003fc",
    343       "vc_r14_"
    344       "0x000003fc"},
    345      {{mi, r4, 0x0000ab00}, false, al, "mi r4 0x0000ab00", "mi_r4_0x0000ab00"},
    346      {{hi, r11, 0x0ff00000},
    347       false,
    348       al,
    349       "hi r11 0x0ff00000",
    350       "hi_r11_"
    351       "0x0ff00000"},
    352      {{gt, r8, 0x000ff000}, false, al, "gt r8 0x000ff000", "gt_r8_0x000ff000"},
    353      {{lt, r1, 0x3fc00000}, false, al, "lt r1 0x3fc00000", "lt_r1_0x3fc00000"},
    354      {{mi, r12, 0x000000ab},
    355       false,
    356       al,
    357       "mi r12 0x000000ab",
    358       "mi_r12_"
    359       "0x000000ab"},
    360      {{vs, r12, 0x000003fc},
    361       false,
    362       al,
    363       "vs r12 0x000003fc",
    364       "vs_r12_"
    365       "0x000003fc"},
    366      {{cs, r10, 0x000ff000},
    367       false,
    368       al,
    369       "cs r10 0x000ff000",
    370       "cs_r10_"
    371       "0x000ff000"},
    372      {{mi, r12, 0xfc000003},
    373       false,
    374       al,
    375       "mi r12 0xfc000003",
    376       "mi_r12_"
    377       "0xfc000003"},
    378      {{pl, r8, 0x000000ff}, false, al, "pl r8 0x000000ff", "pl_r8_0x000000ff"},
    379      {{lt, r5, 0x00002ac0}, false, al, "lt r5 0x00002ac0", "lt_r5_0x00002ac0"},
    380      {{ge, r0, 0xff000000}, false, al, "ge r0 0xff000000", "ge_r0_0xff000000"},
    381      {{pl, r0, 0xab000000}, false, al, "pl r0 0xab000000", "pl_r0_0xab000000"},
    382      {{ls, r8, 0x000ab000}, false, al, "ls r8 0x000ab000", "ls_r8_0x000ab000"},
    383      {{al, r12, 0x00000ff0},
    384       false,
    385       al,
    386       "al r12 0x00000ff0",
    387       "al_r12_"
    388       "0x00000ff0"},
    389      {{hi, r5, 0x00003fc0}, false, al, "hi r5 0x00003fc0", "hi_r5_0x00003fc0"},
    390      {{vs, r7, 0x0003fc00}, false, al, "vs r7 0x0003fc00", "vs_r7_0x0003fc00"},
    391      {{ls, r13, 0x0ff00000},
    392       false,
    393       al,
    394       "ls r13 0x0ff00000",
    395       "ls_r13_"
    396       "0x0ff00000"},
    397      {{al, r7, 0x000000ab}, false, al, "al r7 0x000000ab", "al_r7_0x000000ab"},
    398      {{lt, r6, 0x000003fc}, false, al, "lt r6 0x000003fc", "lt_r6_0x000003fc"},
    399      {{mi, r9, 0xc000002a}, false, al, "mi r9 0xc000002a", "mi_r9_0xc000002a"},
    400      {{ne, r11, 0x003fc000},
    401       false,
    402       al,
    403       "ne r11 0x003fc000",
    404       "ne_r11_"
    405       "0x003fc000"},
    406      {{cs, r4, 0x00000ab0}, false, al, "cs r4 0x00000ab0", "cs_r4_0x00000ab0"},
    407      {{vc, r14, 0x2ac00000},
    408       false,
    409       al,
    410       "vc r14 0x2ac00000",
    411       "vc_r14_"
    412       "0x2ac00000"},
    413      {{vc, r8, 0x2ac00000}, false, al, "vc r8 0x2ac00000", "vc_r8_0x2ac00000"},
    414      {{ge, r10, 0x003fc000},
    415       false,
    416       al,
    417       "ge r10 0x003fc000",
    418       "ge_r10_"
    419       "0x003fc000"},
    420      {{lt, r14, 0xb000000a},
    421       false,
    422       al,
    423       "lt r14 0xb000000a",
    424       "lt_r14_"
    425       "0xb000000a"},
    426      {{cs, r12, 0x000ff000},
    427       false,
    428       al,
    429       "cs r12 0x000ff000",
    430       "cs_r12_"
    431       "0x000ff000"},
    432      {{eq, r2, 0xac000002}, false, al, "eq r2 0xac000002", "eq_r2_0xac000002"},
    433      {{le, r11, 0x2ac00000},
    434       false,
    435       al,
    436       "le r11 0x2ac00000",
    437       "le_r11_"
    438       "0x2ac00000"},
    439      {{le, r8, 0xab000000}, false, al, "le r8 0xab000000", "le_r8_0xab000000"},
    440      {{lt, r5, 0x02ac0000}, false, al, "lt r5 0x02ac0000", "lt_r5_0x02ac0000"},
    441      {{hi, r13, 0x003fc000},
    442       false,
    443       al,
    444       "hi r13 0x003fc000",
    445       "hi_r13_"
    446       "0x003fc000"},
    447      {{mi, r1, 0xfc000003}, false, al, "mi r1 0xfc000003", "mi_r1_0xfc000003"},
    448      {{cc, r4, 0x0ab00000}, false, al, "cc r4 0x0ab00000", "cc_r4_0x0ab00000"},
    449      {{lt, r7, 0x3fc00000}, false, al, "lt r7 0x3fc00000", "lt_r7_0x3fc00000"},
    450      {{lt, r3, 0x000002ac}, false, al, "lt r3 0x000002ac", "lt_r3_0x000002ac"},
    451      {{pl, r7, 0x00000000}, false, al, "pl r7 0x00000000", "pl_r7_0x00000000"},
    452      {{lt, r2, 0x00000000}, false, al, "lt r2 0x00000000", "lt_r2_0x00000000"},
    453      {{le, r1, 0x0ff00000}, false, al, "le r1 0x0ff00000", "le_r1_0x0ff00000"},
    454      {{lt, r14, 0x0000ff00},
    455       false,
    456       al,
    457       "lt r14 0x0000ff00",
    458       "lt_r14_"
    459       "0x0000ff00"},
    460      {{cs, r11, 0x3fc00000},
    461       false,
    462       al,
    463       "cs r11 0x3fc00000",
    464       "cs_r11_"
    465       "0x3fc00000"},
    466      {{ls, r7, 0x00000ff0}, false, al, "ls r7 0x00000ff0", "ls_r7_0x00000ff0"},
    467      {{vs, r3, 0x0ab00000}, false, al, "vs r3 0x0ab00000", "vs_r3_0x0ab00000"},
    468      {{cs, r12, 0x0003fc00},
    469       false,
    470       al,
    471       "cs r12 0x0003fc00",
    472       "cs_r12_"
    473       "0x0003fc00"},
    474      {{vc, r3, 0xfc000003}, false, al, "vc r3 0xfc000003", "vc_r3_0xfc000003"},
    475      {{vs, r14, 0x0ff00000},
    476       false,
    477       al,
    478       "vs r14 0x0ff00000",
    479       "vs_r14_"
    480       "0x0ff00000"},
    481      {{vc, r5, 0x00003fc0}, false, al, "vc r5 0x00003fc0", "vc_r5_0x00003fc0"},
    482      {{cc, r14, 0x0ff00000},
    483       false,
    484       al,
    485       "cc r14 0x0ff00000",
    486       "cc_r14_"
    487       "0x0ff00000"},
    488      {{cs, r7, 0x0ff00000}, false, al, "cs r7 0x0ff00000", "cs_r7_0x0ff00000"},
    489      {{al, r2, 0x00ab0000}, false, al, "al r2 0x00ab0000", "al_r2_0x00ab0000"},
    490      {{gt, r0, 0x00000000}, false, al, "gt r0 0x00000000", "gt_r0_0x00000000"},
    491      {{al, r6, 0x000003fc}, false, al, "al r6 0x000003fc", "al_r6_0x000003fc"},
    492      {{ge, r2, 0x2ac00000}, false, al, "ge r2 0x2ac00000", "ge_r2_0x2ac00000"},
    493      {{vs, r0, 0x03fc0000}, false, al, "vs r0 0x03fc0000", "vs_r0_0x03fc0000"},
    494      {{cs, r12, 0x00003fc0},
    495       false,
    496       al,
    497       "cs r12 0x00003fc0",
    498       "cs_r12_"
    499       "0x00003fc0"},
    500      {{ge, r3, 0x2ac00000}, false, al, "ge r3 0x2ac00000", "ge_r3_0x2ac00000"},
    501      {{le, r13, 0x0000ab00},
    502       false,
    503       al,
    504       "le r13 0x0000ab00",
    505       "le_r13_"
    506       "0x0000ab00"},
    507      {{al, r13, 0x02ac0000},
    508       false,
    509       al,
    510       "al r13 0x02ac0000",
    511       "al_r13_"
    512       "0x02ac0000"},
    513      {{mi, r4, 0xff000000}, false, al, "mi r4 0xff000000", "mi_r4_0xff000000"},
    514      {{cs, r3, 0x00003fc0}, false, al, "cs r3 0x00003fc0", "cs_r3_0x00003fc0"},
    515      {{ge, r13, 0x00ab0000},
    516       false,
    517       al,
    518       "ge r13 0x00ab0000",
    519       "ge_r13_"
    520       "0x00ab0000"},
    521      {{ne, r4, 0x00000ab0}, false, al, "ne r4 0x00000ab0", "ne_r4_0x00000ab0"},
    522      {{cc, r3, 0xac000002}, false, al, "cc r3 0xac000002", "cc_r3_0xac000002"},
    523      {{pl, r11, 0xab000000},
    524       false,
    525       al,
    526       "pl r11 0xab000000",
    527       "pl_r11_"
    528       "0xab000000"},
    529      {{eq, r13, 0xfc000003},
    530       false,
    531       al,
    532       "eq r13 0xfc000003",
    533       "eq_r13_"
    534       "0xfc000003"},
    535      {{ne, r5, 0xc000003f}, false, al, "ne r5 0xc000003f", "ne_r5_0xc000003f"},
    536      {{hi, r7, 0xb000000a}, false, al, "hi r7 0xb000000a", "hi_r7_0xb000000a"},
    537      {{al, r12, 0xc000002a},
    538       false,
    539       al,
    540       "al r12 0xc000002a",
    541       "al_r12_"
    542       "0xc000002a"},
    543      {{vs, r8, 0xf000000f}, false, al, "vs r8 0xf000000f", "vs_r8_0xf000000f"},
    544      {{cs, r6, 0x00ff0000}, false, al, "cs r6 0x00ff0000", "cs_r6_0x00ff0000"},
    545      {{vs, r1, 0x00002ac0}, false, al, "vs r1 0x00002ac0", "vs_r1_0x00002ac0"},
    546      {{ls, r2, 0x0ff00000}, false, al, "ls r2 0x0ff00000", "ls_r2_0x0ff00000"},
    547      {{mi, r13, 0x0000ab00},
    548       false,
    549       al,
    550       "mi r13 0x0000ab00",
    551       "mi_r13_"
    552       "0x0000ab00"},
    553      {{al, r4, 0xff000000}, false, al, "al r4 0xff000000", "al_r4_0xff000000"},
    554      {{ne, r1, 0x00002ac0}, false, al, "ne r1 0x00002ac0", "ne_r1_0x00002ac0"},
    555      {{vc, r14, 0x000002ac},
    556       false,
    557       al,
    558       "vc r14 0x000002ac",
    559       "vc_r14_"
    560       "0x000002ac"},
    561      {{al, r9, 0xb000000a}, false, al, "al r9 0xb000000a", "al_r9_0xb000000a"},
    562      {{ne, r9, 0x000002ac}, false, al, "ne r9 0x000002ac", "ne_r9_0x000002ac"},
    563      {{hi, r7, 0x0ff00000}, false, al, "hi r7 0x0ff00000", "hi_r7_0x0ff00000"},
    564      {{ne, r10, 0x000ab000},
    565       false,
    566       al,
    567       "ne r10 0x000ab000",
    568       "ne_r10_"
    569       "0x000ab000"},
    570      {{vs, r0, 0x0003fc00}, false, al, "vs r0 0x0003fc00", "vs_r0_0x0003fc00"},
    571      {{cs, r9, 0x002ac000}, false, al, "cs r9 0x002ac000", "cs_r9_0x002ac000"},
    572      {{eq, r3, 0x00000ff0}, false, al, "eq r3 0x00000ff0", "eq_r3_0x00000ff0"},
    573      {{lt, r5, 0x00ab0000}, false, al, "lt r5 0x00ab0000", "lt_r5_0x00ab0000"},
    574      {{pl, r1, 0x00ff0000}, false, al, "pl r1 0x00ff0000", "pl_r1_0x00ff0000"},
    575      {{eq, r4, 0x0000ab00}, false, al, "eq r4 0x0000ab00", "eq_r4_0x0000ab00"},
    576      {{mi, r13, 0x000000ab},
    577       false,
    578       al,
    579       "mi r13 0x000000ab",
    580       "mi_r13_"
    581       "0x000000ab"},
    582      {{pl, r12, 0x00000ff0},
    583       false,
    584       al,
    585       "pl r12 0x00000ff0",
    586       "pl_r12_"
    587       "0x00000ff0"},
    588      {{eq, r3, 0x00002ac0}, false, al, "eq r3 0x00002ac0", "eq_r3_0x00002ac0"},
    589      {{le, r12, 0x002ac000},
    590       false,
    591       al,
    592       "le r12 0x002ac000",
    593       "le_r12_"
    594       "0x002ac000"},
    595      {{ge, r10, 0x000002ac},
    596       false,
    597       al,
    598       "ge r10 0x000002ac",
    599       "ge_r10_"
    600       "0x000002ac"},
    601      {{vs, r1, 0x00ff0000}, false, al, "vs r1 0x00ff0000", "vs_r1_0x00ff0000"},
    602      {{pl, r8, 0x0000ff00}, false, al, "pl r8 0x0000ff00", "pl_r8_0x0000ff00"},
    603      {{vs, r9, 0x000ab000}, false, al, "vs r9 0x000ab000", "vs_r9_0x000ab000"},
    604      {{ls, r6, 0x003fc000}, false, al, "ls r6 0x003fc000", "ls_r6_0x003fc000"},
    605      {{vs, r14, 0x0ab00000},
    606       false,
    607       al,
    608       "vs r14 0x0ab00000",
    609       "vs_r14_"
    610       "0x0ab00000"},
    611      {{mi, r14, 0xf000000f},
    612       false,
    613       al,
    614       "mi r14 0xf000000f",
    615       "mi_r14_"
    616       "0xf000000f"},
    617      {{vc, r6, 0xf000000f}, false, al, "vc r6 0xf000000f", "vc_r6_0xf000000f"},
    618      {{ne, r4, 0x0000ff00}, false, al, "ne r4 0x0000ff00", "ne_r4_0x0000ff00"},
    619      {{gt, r10, 0xfc000003},
    620       false,
    621       al,
    622       "gt r10 0xfc000003",
    623       "gt_r10_"
    624       "0xfc000003"},
    625      {{cs, r6, 0x3fc00000}, false, al, "cs r6 0x3fc00000", "cs_r6_0x3fc00000"},
    626      {{al, r10, 0x0ff00000},
    627       false,
    628       al,
    629       "al r10 0x0ff00000",
    630       "al_r10_"
    631       "0x0ff00000"},
    632      {{pl, r12, 0x00000000},
    633       false,
    634       al,
    635       "pl r12 0x00000000",
    636       "pl_r12_"
    637       "0x00000000"},
    638      {{cc, r5, 0xfc000003}, false, al, "cc r5 0xfc000003", "cc_r5_0xfc000003"},
    639      {{pl, r10, 0x0003fc00},
    640       false,
    641       al,
    642       "pl r10 0x0003fc00",
    643       "pl_r10_"
    644       "0x0003fc00"},
    645      {{eq, r8, 0xac000002}, false, al, "eq r8 0xac000002", "eq_r8_0xac000002"},
    646      {{vs, r12, 0xac000002},
    647       false,
    648       al,
    649       "vs r12 0xac000002",
    650       "vs_r12_"
    651       "0xac000002"},
    652      {{ne, r9, 0x00ab0000}, false, al, "ne r9 0x00ab0000", "ne_r9_0x00ab0000"},
    653      {{al, r1, 0x0002ac00}, false, al, "al r1 0x0002ac00", "al_r1_0x0002ac00"},
    654      {{ne, r6, 0x0000ff00}, false, al, "ne r6 0x0000ff00", "ne_r6_0x0000ff00"},
    655      {{mi, r3, 0x03fc0000}, false, al, "mi r3 0x03fc0000", "mi_r3_0x03fc0000"},
    656      {{ge, r10, 0x0002ac00},
    657       false,
    658       al,
    659       "ge r10 0x0002ac00",
    660       "ge_r10_"
    661       "0x0002ac00"},
    662      {{vc, r5, 0xb000000a}, false, al, "vc r5 0xb000000a", "vc_r5_0xb000000a"},
    663      {{pl, r1, 0x000003fc}, false, al, "pl r1 0x000003fc", "pl_r1_0x000003fc"},
    664      {{mi, r2, 0x02ac0000}, false, al, "mi r2 0x02ac0000", "mi_r2_0x02ac0000"},
    665      {{gt, r7, 0x0003fc00}, false, al, "gt r7 0x0003fc00", "gt_r7_0x0003fc00"},
    666      {{vs, r0, 0x00000000}, false, al, "vs r0 0x00000000", "vs_r0_0x00000000"},
    667      {{vc, r11, 0xc000003f},
    668       false,
    669       al,
    670       "vc r11 0xc000003f",
    671       "vc_r11_"
    672       "0xc000003f"},
    673      {{vc, r13, 0x0ab00000},
    674       false,
    675       al,
    676       "vc r13 0x0ab00000",
    677       "vc_r13_"
    678       "0x0ab00000"},
    679      {{ge, r5, 0x0002ac00}, false, al, "ge r5 0x0002ac00", "ge_r5_0x0002ac00"},
    680      {{ge, r8, 0xc000003f}, false, al, "ge r8 0xc000003f", "ge_r8_0xc000003f"},
    681      {{al, r14, 0x000002ac},
    682       false,
    683       al,
    684       "al r14 0x000002ac",
    685       "al_r14_"
    686       "0x000002ac"},
    687      {{vs, r1, 0x00000000}, false, al, "vs r1 0x00000000", "vs_r1_0x00000000"},
    688      {{vc, r2, 0x3fc00000}, false, al, "vc r2 0x3fc00000", "vc_r2_0x3fc00000"},
    689      {{ne, r2, 0xc000003f}, false, al, "ne r2 0xc000003f", "ne_r2_0xc000003f"},
    690      {{cs, r0, 0x0ab00000}, false, al, "cs r0 0x0ab00000", "cs_r0_0x0ab00000"},
    691      {{le, r5, 0xfc000003}, false, al, "le r5 0xfc000003", "le_r5_0xfc000003"},
    692      {{cs, r3, 0x000002ac}, false, al, "cs r3 0x000002ac", "cs_r3_0x000002ac"},
    693      {{hi, r3, 0x0000ab00}, false, al, "hi r3 0x0000ab00", "hi_r3_0x0000ab00"},
    694      {{ge, r9, 0x00ab0000}, false, al, "ge r9 0x00ab0000", "ge_r9_0x00ab0000"},
    695      {{le, r0, 0x000ab000}, false, al, "le r0 0x000ab000", "le_r0_0x000ab000"},
    696      {{cc, r7, 0x000003fc}, false, al, "cc r7 0x000003fc", "cc_r7_0x000003fc"},
    697      {{pl, r7, 0x00002ac0}, false, al, "pl r7 0x00002ac0", "pl_r7_0x00002ac0"},
    698      {{cc, r1, 0x00000ab0}, false, al, "cc r1 0x00000ab0", "cc_r1_0x00000ab0"},
    699      {{le, r8, 0x0002ac00}, false, al, "le r8 0x0002ac00", "le_r8_0x0002ac00"},
    700      {{mi, r9, 0x0003fc00}, false, al, "mi r9 0x0003fc00", "mi_r9_0x0003fc00"},
    701      {{cs, r2, 0x000002ac}, false, al, "cs r2 0x000002ac", "cs_r2_0x000002ac"},
    702      {{vc, r2, 0xb000000a}, false, al, "vc r2 0xb000000a", "vc_r2_0xb000000a"},
    703      {{pl, r4, 0x000ab000}, false, al, "pl r4 0x000ab000", "pl_r4_0x000ab000"},
    704      {{hi, r0, 0x0003fc00}, false, al, "hi r0 0x0003fc00", "hi_r0_0x0003fc00"},
    705      {{vs, r12, 0x000ab000},
    706       false,
    707       al,
    708       "vs r12 0x000ab000",
    709       "vs_r12_"
    710       "0x000ab000"},
    711      {{lt, r9, 0x0003fc00}, false, al, "lt r9 0x0003fc00", "lt_r9_0x0003fc00"},
    712      {{mi, r11, 0x00002ac0},
    713       false,
    714       al,
    715       "mi r11 0x00002ac0",
    716       "mi_r11_"
    717       "0x00002ac0"},
    718      {{ls, r13, 0x000ab000},
    719       false,
    720       al,
    721       "ls r13 0x000ab000",
    722       "ls_r13_"
    723       "0x000ab000"},
    724      {{al, r3, 0x3fc00000}, false, al, "al r3 0x3fc00000", "al_r3_0x3fc00000"},
    725      {{eq, r14, 0x000000ff},
    726       false,
    727       al,
    728       "eq r14 0x000000ff",
    729       "eq_r14_"
    730       "0x000000ff"},
    731      {{le, r12, 0xff000000},
    732       false,
    733       al,
    734       "le r12 0xff000000",
    735       "le_r12_"
    736       "0xff000000"},
    737      {{gt, r8, 0xff000000}, false, al, "gt r8 0xff000000", "gt_r8_0xff000000"},
    738      {{eq, r0, 0x00ff0000}, false, al, "eq r0 0x00ff0000", "eq_r0_0x00ff0000"},
    739      {{cc, r5, 0xff000000}, false, al, "cc r5 0xff000000", "cc_r5_0xff000000"},
    740      {{mi, r2, 0x0003fc00}, false, al, "mi r2 0x0003fc00", "mi_r2_0x0003fc00"},
    741      {{cs, r10, 0xf000000f},
    742       false,
    743       al,
    744       "cs r10 0xf000000f",
    745       "cs_r10_"
    746       "0xf000000f"},
    747      {{eq, r0, 0xab000000}, false, al, "eq r0 0xab000000", "eq_r0_0xab000000"},
    748      {{al, r1, 0x03fc0000}, false, al, "al r1 0x03fc0000", "al_r1_0x03fc0000"},
    749      {{ne, r5, 0xff000000}, false, al, "ne r5 0xff000000", "ne_r5_0xff000000"},
    750      {{ne, r1, 0x03fc0000}, false, al, "ne r1 0x03fc0000", "ne_r1_0x03fc0000"},
    751      {{ls, r1, 0x000ff000}, false, al, "ls r1 0x000ff000", "ls_r1_0x000ff000"},
    752      {{vc, r0, 0x00003fc0}, false, al, "vc r0 0x00003fc0", "vc_r0_0x00003fc0"},
    753      {{eq, r4, 0x0003fc00}, false, al, "eq r4 0x0003fc00", "eq_r4_0x0003fc00"},
    754      {{mi, r3, 0xab000000}, false, al, "mi r3 0xab000000", "mi_r3_0xab000000"},
    755      {{mi, r5, 0xfc000003}, false, al, "mi r5 0xfc000003", "mi_r5_0xfc000003"},
    756      {{vs, r8, 0xab000000}, false, al, "vs r8 0xab000000", "vs_r8_0xab000000"},
    757      {{cs, r9, 0x00ff0000}, false, al, "cs r9 0x00ff0000", "cs_r9_0x00ff0000"},
    758      {{ge, r7, 0x00000ab0}, false, al, "ge r7 0x00000ab0", "ge_r7_0x00000ab0"},
    759      {{al, r9, 0xf000000f}, false, al, "al r9 0xf000000f", "al_r9_0xf000000f"},
    760      {{vc, r10, 0x000000ff},
    761       false,
    762       al,
    763       "vc r10 0x000000ff",
    764       "vc_r10_"
    765       "0x000000ff"},
    766      {{al, r4, 0x00ab0000}, false, al, "al r4 0x00ab0000", "al_r4_0x00ab0000"},
    767      {{ls, r6, 0x0000ff00}, false, al, "ls r6 0x0000ff00", "ls_r6_0x0000ff00"},
    768      {{cc, r14, 0x0ab00000},
    769       false,
    770       al,
    771       "cc r14 0x0ab00000",
    772       "cc_r14_"
    773       "0x0ab00000"},
    774      {{le, r5, 0x3fc00000}, false, al, "le r5 0x3fc00000", "le_r5_0x3fc00000"},
    775      {{ne, r12, 0x0ff00000},
    776       false,
    777       al,
    778       "ne r12 0x0ff00000",
    779       "ne_r12_"
    780       "0x0ff00000"},
    781      {{cc, r11, 0xf000000f},
    782       false,
    783       al,
    784       "cc r11 0xf000000f",
    785       "cc_r11_"
    786       "0xf000000f"},
    787      {{lt, r9, 0x000003fc}, false, al, "lt r9 0x000003fc", "lt_r9_0x000003fc"},
    788      {{ne, r7, 0x000002ac}, false, al, "ne r7 0x000002ac", "ne_r7_0x000002ac"},
    789      {{ge, r5, 0x00003fc0}, false, al, "ge r5 0x00003fc0", "ge_r5_0x00003fc0"},
    790      {{lt, r14, 0x00002ac0},
    791       false,
    792       al,
    793       "lt r14 0x00002ac0",
    794       "lt_r14_"
    795       "0x00002ac0"},
    796      {{vs, r8, 0x0002ac00}, false, al, "vs r8 0x0002ac00", "vs_r8_0x0002ac00"},
    797      {{gt, r7, 0x0000ff00}, false, al, "gt r7 0x0000ff00", "gt_r7_0x0000ff00"},
    798      {{gt, r11, 0x000002ac},
    799       false,
    800       al,
    801       "gt r11 0x000002ac",
    802       "gt_r11_"
    803       "0x000002ac"},
    804      {{lt, r12, 0x00003fc0},
    805       false,
    806       al,
    807       "lt r12 0x00003fc0",
    808       "lt_r12_"
    809       "0x00003fc0"},
    810      {{gt, r4, 0x00ff0000}, false, al, "gt r4 0x00ff0000", "gt_r4_0x00ff0000"},
    811      {{gt, r0, 0x000ff000}, false, al, "gt r0 0x000ff000", "gt_r0_0x000ff000"},
    812      {{hi, r3, 0x0002ac00}, false, al, "hi r3 0x0002ac00", "hi_r3_0x0002ac00"},
    813      {{al, r6, 0x003fc000}, false, al, "al r6 0x003fc000", "al_r6_0x003fc000"},
    814      {{al, r5, 0x0003fc00}, false, al, "al r5 0x0003fc00", "al_r5_0x0003fc00"},
    815      {{mi, r14, 0x03fc0000},
    816       false,
    817       al,
    818       "mi r14 0x03fc0000",
    819       "mi_r14_"
    820       "0x03fc0000"},
    821      {{le, r10, 0x0ab00000},
    822       false,
    823       al,
    824       "le r10 0x0ab00000",
    825       "le_r10_"
    826       "0x0ab00000"},
    827      {{vc, r4, 0xab000000}, false, al, "vc r4 0xab000000", "vc_r4_0xab000000"},
    828      {{lt, r12, 0xf000000f},
    829       false,
    830       al,
    831       "lt r12 0xf000000f",
    832       "lt_r12_"
    833       "0xf000000f"},
    834      {{le, r12, 0xf000000f},
    835       false,
    836       al,
    837       "le r12 0xf000000f",
    838       "le_r12_"
    839       "0xf000000f"},
    840      {{pl, r3, 0xfc000003}, false, al, "pl r3 0xfc000003", "pl_r3_0xfc000003"},
    841      {{ls, r9, 0x000003fc}, false, al, "ls r9 0x000003fc", "ls_r9_0x000003fc"},
    842      {{hi, r0, 0x00ff0000}, false, al, "hi r0 0x00ff0000", "hi_r0_0x00ff0000"},
    843      {{ge, r5, 0x000000ab}, false, al, "ge r5 0x000000ab", "ge_r5_0x000000ab"},
    844      {{pl, r1, 0x00000000}, false, al, "pl r1 0x00000000", "pl_r1_0x00000000"},
    845      {{vs, r11, 0x0002ac00},
    846       false,
    847       al,
    848       "vs r11 0x0002ac00",
    849       "vs_r11_"
    850       "0x0002ac00"},
    851      {{cc, r10, 0xac000002},
    852       false,
    853       al,
    854       "cc r10 0xac000002",
    855       "cc_r10_"
    856       "0xac000002"},
    857      {{al, r2, 0x00000000}, false, al, "al r2 0x00000000", "al_r2_0x00000000"},
    858      {{eq, r8, 0xab000000}, false, al, "eq r8 0xab000000", "eq_r8_0xab000000"},
    859      {{al, r5, 0xb000000a}, false, al, "al r5 0xb000000a", "al_r5_0xb000000a"},
    860      {{cs, r8, 0x000003fc}, false, al, "cs r8 0x000003fc", "cs_r8_0x000003fc"},
    861      {{ge, r5, 0xc000003f}, false, al, "ge r5 0xc000003f", "ge_r5_0xc000003f"},
    862      {{eq, r5, 0x00000ff0}, false, al, "eq r5 0x00000ff0", "eq_r5_0x00000ff0"},
    863      {{eq, r5, 0x000ff000}, false, al, "eq r5 0x000ff000", "eq_r5_0x000ff000"},
    864      {{ls, r7, 0x00000000}, false, al, "ls r7 0x00000000", "ls_r7_0x00000000"},
    865      {{vc, r9, 0x00ff0000}, false, al, "vc r9 0x00ff0000", "vc_r9_0x00ff0000"},
    866      {{le, r6, 0x00000ff0}, false, al, "le r6 0x00000ff0", "le_r6_0x00000ff0"},
    867      {{pl, r10, 0xac000002},
    868       false,
    869       al,
    870       "pl r10 0xac000002",
    871       "pl_r10_"
    872       "0xac000002"},
    873      {{vs, r13, 0x3fc00000},
    874       false,
    875       al,
    876       "vs r13 0x3fc00000",
    877       "vs_r13_"
    878       "0x3fc00000"},
    879      {{gt, r12, 0x000ab000},
    880       false,
    881       al,
    882       "gt r12 0x000ab000",
    883       "gt_r12_"
    884       "0x000ab000"},
    885      {{pl, r7, 0x0000ff00}, false, al, "pl r7 0x0000ff00", "pl_r7_0x0000ff00"},
    886      {{hi, r13, 0xab000000},
    887       false,
    888       al,
    889       "hi r13 0xab000000",
    890       "hi_r13_"
    891       "0xab000000"},
    892      {{vc, r3, 0x00003fc0}, false, al, "vc r3 0x00003fc0", "vc_r3_0x00003fc0"},
    893      {{eq, r8, 0x03fc0000}, false, al, "eq r8 0x03fc0000", "eq_r8_0x03fc0000"},
    894      {{ge, r7, 0x00ab0000}, false, al, "ge r7 0x00ab0000", "ge_r7_0x00ab0000"},
    895      {{ls, r5, 0x00000ab0}, false, al, "ls r5 0x00000ab0", "ls_r5_0x00000ab0"},
    896      {{ls, r8, 0xb000000a}, false, al, "ls r8 0xb000000a", "ls_r8_0xb000000a"},
    897      {{cs, r2, 0xab000000}, false, al, "cs r2 0xab000000", "cs_r2_0xab000000"},
    898      {{ne, r1, 0x0ab00000}, false, al, "ne r1 0x0ab00000", "ne_r1_0x0ab00000"},
    899      {{hi, r3, 0x0ab00000}, false, al, "hi r3 0x0ab00000", "hi_r3_0x0ab00000"},
    900      {{vc, r1, 0x00ab0000}, false, al, "vc r1 0x00ab0000", "vc_r1_0x00ab0000"},
    901      {{gt, r12, 0x0003fc00},
    902       false,
    903       al,
    904       "gt r12 0x0003fc00",
    905       "gt_r12_"
    906       "0x0003fc00"},
    907      {{lt, r11, 0x00000ff0},
    908       false,
    909       al,
    910       "lt r11 0x00000ff0",
    911       "lt_r11_"
    912       "0x00000ff0"},
    913      {{ne, r5, 0xc000002a}, false, al, "ne r5 0xc000002a", "ne_r5_0xc000002a"},
    914      {{vc, r6, 0x000003fc}, false, al, "vc r6 0x000003fc", "vc_r6_0x000003fc"},
    915      {{gt, r1, 0xab000000}, false, al, "gt r1 0xab000000", "gt_r1_0xab000000"},
    916      {{gt, r5, 0x3fc00000}, false, al, "gt r5 0x3fc00000", "gt_r5_0x3fc00000"},
    917      {{cs, r3, 0x00002ac0}, false, al, "cs r3 0x00002ac0", "cs_r3_0x00002ac0"},
    918      {{mi, r0, 0xff000000}, false, al, "mi r0 0xff000000", "mi_r0_0xff000000"},
    919      {{cs, r3, 0x00000ff0}, false, al, "cs r3 0x00000ff0", "cs_r3_0x00000ff0"},
    920      {{le, r13, 0xff000000},
    921       false,
    922       al,
    923       "le r13 0xff000000",
    924       "le_r13_"
    925       "0xff000000"},
    926      {{hi, r8, 0x00000000}, false, al, "hi r8 0x00000000", "hi_r8_0x00000000"},
    927      {{vc, r12, 0x0002ac00},
    928       false,
    929       al,
    930       "vc r12 0x0002ac00",
    931       "vc_r12_"
    932       "0x0002ac00"},
    933      {{eq, r9, 0x00000ff0}, false, al, "eq r9 0x00000ff0", "eq_r9_0x00000ff0"},
    934      {{vc, r14, 0x0ff00000},
    935       false,
    936       al,
    937       "vc r14 0x0ff00000",
    938       "vc_r14_"
    939       "0x0ff00000"},
    940      {{hi, r2, 0x00ff0000}, false, al, "hi r2 0x00ff0000", "hi_r2_0x00ff0000"},
    941      {{al, r2, 0x03fc0000}, false, al, "al r2 0x03fc0000", "al_r2_0x03fc0000"},
    942      {{mi, r14, 0x0ab00000},
    943       false,
    944       al,
    945       "mi r14 0x0ab00000",
    946       "mi_r14_"
    947       "0x0ab00000"},
    948      {{vs, r11, 0x000ff000},
    949       false,
    950       al,
    951       "vs r11 0x000ff000",
    952       "vs_r11_"
    953       "0x000ff000"},
    954      {{le, r11, 0x0003fc00},
    955       false,
    956       al,
    957       "le r11 0x0003fc00",
    958       "le_r11_"
    959       "0x0003fc00"},
    960      {{eq, r6, 0x002ac000}, false, al, "eq r6 0x002ac000", "eq_r6_0x002ac000"},
    961      {{ne, r12, 0xab000000},
    962       false,
    963       al,
    964       "ne r12 0xab000000",
    965       "ne_r12_"
    966       "0xab000000"},
    967      {{eq, r4, 0x000ff000}, false, al, "eq r4 0x000ff000", "eq_r4_0x000ff000"},
    968      {{cs, r6, 0x000003fc}, false, al, "cs r6 0x000003fc", "cs_r6_0x000003fc"},
    969      {{le, r13, 0xf000000f},
    970       false,
    971       al,
    972       "le r13 0xf000000f",
    973       "le_r13_"
    974       "0xf000000f"},
    975      {{vs, r3, 0x02ac0000}, false, al, "vs r3 0x02ac0000", "vs_r3_0x02ac0000"},
    976      {{lt, r3, 0xab000000}, false, al, "lt r3 0xab000000", "lt_r3_0xab000000"},
    977      {{pl, r5, 0xab000000}, false, al, "pl r5 0xab000000", "pl_r5_0xab000000"},
    978      {{mi, r10, 0x00002ac0},
    979       false,
    980       al,
    981       "mi r10 0x00002ac0",
    982       "mi_r10_"
    983       "0x00002ac0"},
    984      {{vc, r3, 0x000000ab}, false, al, "vc r3 0x000000ab", "vc_r3_0x000000ab"},
    985      {{pl, r10, 0x02ac0000},
    986       false,
    987       al,
    988       "pl r10 0x02ac0000",
    989       "pl_r10_"
    990       "0x02ac0000"},
    991      {{vs, r11, 0x3fc00000},
    992       false,
    993       al,
    994       "vs r11 0x3fc00000",
    995       "vs_r11_"
    996       "0x3fc00000"},
    997      {{cc, r7, 0x3fc00000}, false, al, "cc r7 0x3fc00000", "cc_r7_0x3fc00000"},
    998      {{cs, r3, 0x0000ab00}, false, al, "cs r3 0x0000ab00", "cs_r3_0x0000ab00"},
    999      {{cc, r14, 0x02ac0000},
   1000       false,
   1001       al,
   1002       "cc r14 0x02ac0000",
   1003       "cc_r14_"
   1004       "0x02ac0000"},
   1005      {{vs, r0, 0x2ac00000}, false, al, "vs r0 0x2ac00000", "vs_r0_0x2ac00000"},
   1006      {{gt, r13, 0x0ff00000},
   1007       false,
   1008       al,
   1009       "gt r13 0x0ff00000",
   1010       "gt_r13_"
   1011       "0x0ff00000"},
   1012      {{mi, r10, 0x2ac00000},
   1013       false,
   1014       al,
   1015       "mi r10 0x2ac00000",
   1016       "mi_r10_"
   1017       "0x2ac00000"},
   1018      {{ls, r2, 0x0ab00000}, false, al, "ls r2 0x0ab00000", "ls_r2_0x0ab00000"},
   1019      {{pl, r10, 0x000000ff},
   1020       false,
   1021       al,
   1022       "pl r10 0x000000ff",
   1023       "pl_r10_"
   1024       "0x000000ff"},
   1025      {{al, r9, 0x3fc00000}, false, al, "al r9 0x3fc00000", "al_r9_0x3fc00000"},
   1026      {{vs, r4, 0x2ac00000}, false, al, "vs r4 0x2ac00000", "vs_r4_0x2ac00000"},
   1027      {{vs, r12, 0x000ff000},
   1028       false,
   1029       al,
   1030       "vs r12 0x000ff000",
   1031       "vs_r12_"
   1032       "0x000ff000"},
   1033      {{ge, r7, 0xc000002a}, false, al, "ge r7 0xc000002a", "ge_r7_0xc000002a"},
   1034      {{vc, r7, 0x0002ac00}, false, al, "vc r7 0x0002ac00", "vc_r7_0x0002ac00"},
   1035      {{gt, r7, 0x000ab000}, false, al, "gt r7 0x000ab000", "gt_r7_0x000ab000"},
   1036      {{gt, r13, 0x000000ab},
   1037       false,
   1038       al,
   1039       "gt r13 0x000000ab",
   1040       "gt_r13_"
   1041       "0x000000ab"},
   1042      {{ne, r1, 0xfc000003}, false, al, "ne r1 0xfc000003", "ne_r1_0xfc000003"},
   1043      {{vc, r14, 0x000ab000},
   1044       false,
   1045       al,
   1046       "vc r14 0x000ab000",
   1047       "vc_r14_"
   1048       "0x000ab000"},
   1049      {{gt, r5, 0xf000000f}, false, al, "gt r5 0xf000000f", "gt_r5_0xf000000f"},
   1050      {{ge, r6, 0x00ff0000}, false, al, "ge r6 0x00ff0000", "ge_r6_0x00ff0000"},
   1051      {{ls, r12, 0x0000ff00},
   1052       false,
   1053       al,
   1054       "ls r12 0x0000ff00",
   1055       "ls_r12_"
   1056       "0x0000ff00"},
   1057      {{mi, r12, 0x03fc0000},
   1058       false,
   1059       al,
   1060       "mi r12 0x03fc0000",
   1061       "mi_r12_"
   1062       "0x03fc0000"},
   1063      {{vs, r10, 0x0003fc00},
   1064       false,
   1065       al,
   1066       "vs r10 0x0003fc00",
   1067       "vs_r10_"
   1068       "0x0003fc00"},
   1069      {{gt, r6, 0x0000ff00}, false, al, "gt r6 0x0000ff00", "gt_r6_0x0000ff00"},
   1070      {{pl, r6, 0x00ff0000}, false, al, "pl r6 0x00ff0000", "pl_r6_0x00ff0000"},
   1071      {{ne, r0, 0x002ac000}, false, al, "ne r0 0x002ac000", "ne_r0_0x002ac000"},
   1072      {{eq, r2, 0x003fc000}, false, al, "eq r2 0x003fc000", "eq_r2_0x003fc000"},
   1073      {{ne, r10, 0x000003fc},
   1074       false,
   1075       al,
   1076       "ne r10 0x000003fc",
   1077       "ne_r10_"
   1078       "0x000003fc"},
   1079      {{lt, r10, 0x02ac0000},
   1080       false,
   1081       al,
   1082       "lt r10 0x02ac0000",
   1083       "lt_r10_"
   1084       "0x02ac0000"},
   1085      {{lt, r2, 0x000ff000}, false, al, "lt r2 0x000ff000", "lt_r2_0x000ff000"},
   1086      {{pl, r3, 0x0000ab00}, false, al, "pl r3 0x0000ab00", "pl_r3_0x0000ab00"},
   1087      {{ge, r9, 0xc000003f}, false, al, "ge r9 0xc000003f", "ge_r9_0xc000003f"},
   1088      {{vs, r4, 0x000003fc}, false, al, "vs r4 0x000003fc", "vs_r4_0x000003fc"},
   1089      {{hi, r13, 0xf000000f},
   1090       false,
   1091       al,
   1092       "hi r13 0xf000000f",
   1093       "hi_r13_"
   1094       "0xf000000f"},
   1095      {{pl, r1, 0x02ac0000}, false, al, "pl r1 0x02ac0000", "pl_r1_0x02ac0000"},
   1096      {{pl, r1, 0x000000ff}, false, al, "pl r1 0x000000ff", "pl_r1_0x000000ff"},
   1097      {{al, r3, 0x00000ff0}, false, al, "al r3 0x00000ff0", "al_r3_0x00000ff0"},
   1098      {{gt, r0, 0x03fc0000}, false, al, "gt r0 0x03fc0000", "gt_r0_0x03fc0000"},
   1099      {{cc, r1, 0x2ac00000}, false, al, "cc r1 0x2ac00000", "cc_r1_0x2ac00000"},
   1100      {{mi, r9, 0xc000003f}, false, al, "mi r9 0xc000003f", "mi_r9_0xc000003f"},
   1101      {{vc, r4, 0xff000000}, false, al, "vc r4 0xff000000", "vc_r4_0xff000000"},
   1102      {{pl, r9, 0x0002ac00}, false, al, "pl r9 0x0002ac00", "pl_r9_0x0002ac00"},
   1103      {{vs, r8, 0x02ac0000}, false, al, "vs r8 0x02ac0000", "vs_r8_0x02ac0000"},
   1104      {{gt, r7, 0xf000000f}, false, al, "gt r7 0xf000000f", "gt_r7_0xf000000f"},
   1105      {{gt, r10, 0xff000000},
   1106       false,
   1107       al,
   1108       "gt r10 0xff000000",
   1109       "gt_r10_"
   1110       "0xff000000"},
   1111      {{cs, r0, 0x00003fc0}, false, al, "cs r0 0x00003fc0", "cs_r0_0x00003fc0"},
   1112      {{gt, r8, 0x03fc0000}, false, al, "gt r8 0x03fc0000", "gt_r8_0x03fc0000"},
   1113      {{ne, r8, 0x00002ac0}, false, al, "ne r8 0x00002ac0", "ne_r8_0x00002ac0"},
   1114      {{ne, r13, 0xc000002a},
   1115       false,
   1116       al,
   1117       "ne r13 0xc000002a",
   1118       "ne_r13_"
   1119       "0xc000002a"},
   1120      {{ne, r8, 0x3fc00000}, false, al, "ne r8 0x3fc00000", "ne_r8_0x3fc00000"},
   1121      {{vs, r2, 0x002ac000}, false, al, "vs r2 0x002ac000", "vs_r2_0x002ac000"},
   1122      {{vs, r7, 0x000000ab}, false, al, "vs r7 0x000000ab", "vs_r7_0x000000ab"},
   1123      {{cc, r6, 0x00000000}, false, al, "cc r6 0x00000000", "cc_r6_0x00000000"},
   1124      {{ls, r3, 0xf000000f}, false, al, "ls r3 0xf000000f", "ls_r3_0xf000000f"},
   1125      {{hi, r0, 0x000000ff}, false, al, "hi r0 0x000000ff", "hi_r0_0x000000ff"},
   1126      {{cs, r6, 0x00002ac0}, false, al, "cs r6 0x00002ac0", "cs_r6_0x00002ac0"},
   1127      {{al, r1, 0xb000000a}, false, al, "al r1 0xb000000a", "al_r1_0xb000000a"},
   1128      {{cc, r0, 0x00002ac0}, false, al, "cc r0 0x00002ac0", "cc_r0_0x00002ac0"},
   1129      {{cc, r12, 0x000003fc},
   1130       false,
   1131       al,
   1132       "cc r12 0x000003fc",
   1133       "cc_r12_"
   1134       "0x000003fc"},
   1135      {{ne, r14, 0xc000002a},
   1136       false,
   1137       al,
   1138       "ne r14 0xc000002a",
   1139       "ne_r14_"
   1140       "0xc000002a"},
   1141      {{al, r6, 0xc000003f}, false, al, "al r6 0xc000003f", "al_r6_0xc000003f"},
   1142      {{ls, r5, 0xf000000f}, false, al, "ls r5 0xf000000f", "ls_r5_0xf000000f"},
   1143      {{mi, r5, 0x03fc0000}, false, al, "mi r5 0x03fc0000", "mi_r5_0x03fc0000"},
   1144      {{cs, r14, 0xf000000f},
   1145       false,
   1146       al,
   1147       "cs r14 0xf000000f",
   1148       "cs_r14_"
   1149       "0xf000000f"},
   1150      {{hi, r0, 0x02ac0000}, false, al, "hi r0 0x02ac0000", "hi_r0_0x02ac0000"},
   1151      {{pl, r10, 0x00000000},
   1152       false,
   1153       al,
   1154       "pl r10 0x00000000",
   1155       "pl_r10_"
   1156       "0x00000000"},
   1157      {{ne, r6, 0xc000003f}, false, al, "ne r6 0xc000003f", "ne_r6_0xc000003f"},
   1158      {{mi, r6, 0x00002ac0}, false, al, "mi r6 0x00002ac0", "mi_r6_0x00002ac0"},
   1159      {{vs, r6, 0x000000ab}, false, al, "vs r6 0x000000ab", "vs_r6_0x000000ab"},
   1160      {{vc, r6, 0x3fc00000}, false, al, "vc r6 0x3fc00000", "vc_r6_0x3fc00000"},
   1161      {{al, r10, 0x3fc00000},
   1162       false,
   1163       al,
   1164       "al r10 0x3fc00000",
   1165       "al_r10_"
   1166       "0x3fc00000"},
   1167      {{eq, r7, 0xc000003f}, false, al, "eq r7 0xc000003f", "eq_r7_0xc000003f"},
   1168      {{vs, r9, 0x02ac0000}, false, al, "vs r9 0x02ac0000", "vs_r9_0x02ac0000"},
   1169      {{mi, r6, 0xac000002}, false, al, "mi r6 0xac000002", "mi_r6_0xac000002"},
   1170      {{vc, r8, 0xc000002a}, false, al, "vc r8 0xc000002a", "vc_r8_0xc000002a"},
   1171      {{pl, r2, 0x0000ab00}, false, al, "pl r2 0x0000ab00", "pl_r2_0x0000ab00"},
   1172      {{hi, r4, 0x00000ff0}, false, al, "hi r4 0x00000ff0", "hi_r4_0x00000ff0"},
   1173      {{al, r8, 0x003fc000}, false, al, "al r8 0x003fc000", "al_r8_0x003fc000"},
   1174      {{vs, r12, 0xfc000003},
   1175       false,
   1176       al,
   1177       "vs r12 0xfc000003",
   1178       "vs_r12_"
   1179       "0xfc000003"},
   1180      {{cs, r0, 0xac000002}, false, al, "cs r0 0xac000002", "cs_r0_0xac000002"},
   1181      {{mi, r4, 0x02ac0000}, false, al, "mi r4 0x02ac0000", "mi_r4_0x02ac0000"},
   1182      {{pl, r11, 0x00003fc0},
   1183       false,
   1184       al,
   1185       "pl r11 0x00003fc0",
   1186       "pl_r11_"
   1187       "0x00003fc0"},
   1188      {{pl, r13, 0xac000002},
   1189       false,
   1190       al,
   1191       "pl r13 0xac000002",
   1192       "pl_r13_"
   1193       "0xac000002"},
   1194      {{hi, r8, 0x0000ff00}, false, al, "hi r8 0x0000ff00", "hi_r8_0x0000ff00"},
   1195      {{cs, r13, 0x2ac00000},
   1196       false,
   1197       al,
   1198       "cs r13 0x2ac00000",
   1199       "cs_r13_"
   1200       "0x2ac00000"},
   1201      {{hi, r11, 0xc000003f},
   1202       false,
   1203       al,
   1204       "hi r11 0xc000003f",
   1205       "hi_r11_"
   1206       "0xc000003f"},
   1207      {{lt, r5, 0x000002ac}, false, al, "lt r5 0x000002ac", "lt_r5_0x000002ac"},
   1208      {{vs, r4, 0x0ff00000}, false, al, "vs r4 0x0ff00000", "vs_r4_0x0ff00000"},
   1209      {{lt, r2, 0x00000ab0}, false, al, "lt r2 0x00000ab0", "lt_r2_0x00000ab0"},
   1210      {{pl, r12, 0x000000ab},
   1211       false,
   1212       al,
   1213       "pl r12 0x000000ab",
   1214       "pl_r12_"
   1215       "0x000000ab"},
   1216      {{gt, r3, 0xb000000a}, false, al, "gt r3 0xb000000a", "gt_r3_0xb000000a"},
   1217      {{hi, r12, 0x0002ac00},
   1218       false,
   1219       al,
   1220       "hi r12 0x0002ac00",
   1221       "hi_r12_"
   1222       "0x0002ac00"},
   1223      {{le, r0, 0x00ff0000}, false, al, "le r0 0x00ff0000", "le_r0_0x00ff0000"},
   1224      {{eq, r6, 0x000ab000}, false, al, "eq r6 0x000ab000", "eq_r6_0x000ab000"},
   1225      {{lt, r6, 0x0ff00000}, false, al, "lt r6 0x0ff00000", "lt_r6_0x0ff00000"},
   1226      {{mi, r4, 0x000ff000}, false, al, "mi r4 0x000ff000", "mi_r4_0x000ff000"},
   1227      {{le, r3, 0x0ab00000}, false, al, "le r3 0x0ab00000", "le_r3_0x0ab00000"},
   1228      {{ge, r3, 0xac000002}, false, al, "ge r3 0xac000002", "ge_r3_0xac000002"},
   1229      {{gt, r13, 0x00000ff0},
   1230       false,
   1231       al,
   1232       "gt r13 0x00000ff0",
   1233       "gt_r13_"
   1234       "0x00000ff0"},
   1235      {{le, r10, 0x0000ff00},
   1236       false,
   1237       al,
   1238       "le r10 0x0000ff00",
   1239       "le_r10_"
   1240       "0x0000ff00"},
   1241      {{lt, r14, 0x00ab0000},
   1242       false,
   1243       al,
   1244       "lt r14 0x00ab0000",
   1245       "lt_r14_"
   1246       "0x00ab0000"},
   1247      {{mi, r2, 0x00003fc0}, false, al, "mi r2 0x00003fc0", "mi_r2_0x00003fc0"},
   1248      {{ge, r9, 0x00002ac0}, false, al, "ge r9 0x00002ac0", "ge_r9_0x00002ac0"},
   1249      {{al, r11, 0x2ac00000},
   1250       false,
   1251       al,
   1252       "al r11 0x2ac00000",
   1253       "al_r11_"
   1254       "0x2ac00000"},
   1255      {{pl, r6, 0x00000000}, false, al, "pl r6 0x00000000", "pl_r6_0x00000000"},
   1256      {{ls, r2, 0x002ac000}, false, al, "ls r2 0x002ac000", "ls_r2_0x002ac000"},
   1257      {{lt, r0, 0xf000000f}, false, al, "lt r0 0xf000000f", "lt_r0_0xf000000f"},
   1258      {{cs, r6, 0x00000ff0}, false, al, "cs r6 0x00000ff0", "cs_r6_0x00000ff0"},
   1259      {{lt, r12, 0x00000ff0},
   1260       false,
   1261       al,
   1262       "lt r12 0x00000ff0",
   1263       "lt_r12_"
   1264       "0x00000ff0"},
   1265      {{al, r6, 0xff000000}, false, al, "al r6 0xff000000", "al_r6_0xff000000"},
   1266      {{gt, r4, 0x0000ff00}, false, al, "gt r4 0x0000ff00", "gt_r4_0x0000ff00"},
   1267      {{al, r14, 0x0000ff00},
   1268       false,
   1269       al,
   1270       "al r14 0x0000ff00",
   1271       "al_r14_"
   1272       "0x0000ff00"},
   1273      {{al, r10, 0xf000000f},
   1274       false,
   1275       al,
   1276       "al r10 0xf000000f",
   1277       "al_r10_"
   1278       "0xf000000f"},
   1279      {{mi, r3, 0x0003fc00}, false, al, "mi r3 0x0003fc00", "mi_r3_0x0003fc00"},
   1280      {{pl, r0, 0xf000000f}, false, al, "pl r0 0xf000000f", "pl_r0_0xf000000f"},
   1281      {{al, r6, 0x00000ab0}, false, al, "al r6 0x00000ab0", "al_r6_0x00000ab0"},
   1282      {{le, r8, 0x000002ac}, false, al, "le r8 0x000002ac", "le_r8_0x000002ac"},
   1283      {{ge, r14, 0x00000000},
   1284       false,
   1285       al,
   1286       "ge r14 0x00000000",
   1287       "ge_r14_"
   1288       "0x00000000"},
   1289      {{eq, r1, 0xff000000}, false, al, "eq r1 0xff000000", "eq_r1_0xff000000"},
   1290      {{mi, r14, 0x00000ff0},
   1291       false,
   1292       al,
   1293       "mi r14 0x00000ff0",
   1294       "mi_r14_"
   1295       "0x00000ff0"},
   1296      {{eq, r3, 0xff000000}, false, al, "eq r3 0xff000000", "eq_r3_0xff000000"},
   1297      {{mi, r0, 0x0000ab00}, false, al, "mi r0 0x0000ab00", "mi_r0_0x0000ab00"},
   1298      {{mi, r5, 0x000ff000}, false, al, "mi r5 0x000ff000", "mi_r5_0x000ff000"},
   1299      {{vs, r3, 0x0ff00000}, false, al, "vs r3 0x0ff00000", "vs_r3_0x0ff00000"},
   1300      {{gt, r14, 0x0ff00000},
   1301       false,
   1302       al,
   1303       "gt r14 0x0ff00000",
   1304       "gt_r14_"
   1305       "0x0ff00000"},
   1306      {{le, r6, 0x000003fc}, false, al, "le r6 0x000003fc", "le_r6_0x000003fc"},
   1307      {{vs, r6, 0xab000000}, false, al, "vs r6 0xab000000", "vs_r6_0xab000000"},
   1308      {{le, r0, 0x000000ab}, false, al, "le r0 0x000000ab", "le_r0_0x000000ab"},
   1309      {{cc, r9, 0x0ab00000}, false, al, "cc r9 0x0ab00000", "cc_r9_0x0ab00000"},
   1310      {{vs, r10, 0x0ff00000},
   1311       false,
   1312       al,
   1313       "vs r10 0x0ff00000",
   1314       "vs_r10_"
   1315       "0x0ff00000"},
   1316      {{gt, r3, 0x002ac000}, false, al, "gt r3 0x002ac000", "gt_r3_0x002ac000"},
   1317      {{le, r2, 0x0ab00000}, false, al, "le r2 0x0ab00000", "le_r2_0x0ab00000"},
   1318      {{ne, r14, 0xc000003f},
   1319       false,
   1320       al,
   1321       "ne r14 0xc000003f",
   1322       "ne_r14_"
   1323       "0xc000003f"},
   1324      {{ne, r14, 0x000ff000},
   1325       false,
   1326       al,
   1327       "ne r14 0x000ff000",
   1328       "ne_r14_"
   1329       "0x000ff000"},
   1330      {{hi, r3, 0xb000000a}, false, al, "hi r3 0xb000000a", "hi_r3_0xb000000a"},
   1331      {{cs, r7, 0x000000ab}, false, al, "cs r7 0x000000ab", "cs_r7_0x000000ab"},
   1332      {{eq, r12, 0x3fc00000},
   1333       false,
   1334       al,
   1335       "eq r12 0x3fc00000",
   1336       "eq_r12_"
   1337       "0x3fc00000"},
   1338      {{ls, r5, 0x03fc0000}, false, al, "ls r5 0x03fc0000", "ls_r5_0x03fc0000"},
   1339      {{ne, r13, 0x003fc000},
   1340       false,
   1341       al,
   1342       "ne r13 0x003fc000",
   1343       "ne_r13_"
   1344       "0x003fc000"},
   1345      {{hi, r6, 0xac000002}, false, al, "hi r6 0xac000002", "hi_r6_0xac000002"},
   1346      {{vc, r6, 0xfc000003}, false, al, "vc r6 0xfc000003", "vc_r6_0xfc000003"},
   1347      {{pl, r10, 0x00ab0000},
   1348       false,
   1349       al,
   1350       "pl r10 0x00ab0000",
   1351       "pl_r10_"
   1352       "0x00ab0000"},
   1353      {{vc, r6, 0x0000ff00}, false, al, "vc r6 0x0000ff00", "vc_r6_0x0000ff00"},
   1354      {{cs, r0, 0x003fc000}, false, al, "cs r0 0x003fc000", "cs_r0_0x003fc000"},
   1355      {{hi, r5, 0x000003fc}, false, al, "hi r5 0x000003fc", "hi_r5_0x000003fc"},
   1356      {{mi, r7, 0x0002ac00}, false, al, "mi r7 0x0002ac00", "mi_r7_0x0002ac00"},
   1357      {{ne, r0, 0x02ac0000}, false, al, "ne r0 0x02ac0000", "ne_r0_0x02ac0000"},
   1358      {{vs, r12, 0xc000002a},
   1359       false,
   1360       al,
   1361       "vs r12 0xc000002a",
   1362       "vs_r12_"
   1363       "0xc000002a"},
   1364      {{al, r12, 0x000002ac},
   1365       false,
   1366       al,
   1367       "al r12 0x000002ac",
   1368       "al_r12_"
   1369       "0x000002ac"},
   1370      {{cs, r4, 0x3fc00000}, false, al, "cs r4 0x3fc00000", "cs_r4_0x3fc00000"},
   1371      {{ne, r9, 0x00000ab0}, false, al, "ne r9 0x00000ab0", "ne_r9_0x00000ab0"},
   1372      {{eq, r14, 0x0003fc00},
   1373       false,
   1374       al,
   1375       "eq r14 0x0003fc00",
   1376       "eq_r14_0x0003fc00"}};
   1377 
   1378 // These headers each contain an array of `TestResult` with the reference output
   1379 // values. The reference arrays are names `kReference{mnemonic}`.
   1380 #include "aarch32/traces/assembler-cond-rd-operand-const-cannot-use-pc-mov-a32.h"
   1381 #include "aarch32/traces/assembler-cond-rd-operand-const-cannot-use-pc-movs-a32.h"
   1382 #include "aarch32/traces/assembler-cond-rd-operand-const-cannot-use-pc-mvn-a32.h"
   1383 #include "aarch32/traces/assembler-cond-rd-operand-const-cannot-use-pc-mvns-a32.h"
   1384 
   1385 
   1386 // The maximum number of errors to report in detail for each test.
   1387 const unsigned kErrorReportLimit = 8;
   1388 
   1389 typedef void (MacroAssembler::*Fn)(Condition cond,
   1390                                    Register rd,
   1391                                    const Operand& op);
   1392 
   1393 void TestHelper(Fn instruction,
   1394                 const char* mnemonic,
   1395                 const TestResult reference[]) {
   1396   unsigned total_error_count = 0;
   1397   MacroAssembler masm(BUF_SIZE);
   1398 
   1399   masm.UseA32();
   1400 
   1401   for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
   1402     // Values to pass to the macro-assembler.
   1403     Condition cond = kTests[i].operands.cond;
   1404     Register rd = kTests[i].operands.rd;
   1405     uint32_t immediate = kTests[i].operands.immediate;
   1406     Operand op(immediate);
   1407 
   1408     int32_t start = masm.GetCursorOffset();
   1409     {
   1410       // We never generate more that 4 bytes, as IT instructions are only
   1411       // allowed for narrow encodings.
   1412       ExactAssemblyScope scope(&masm, 4, ExactAssemblyScope::kMaximumSize);
   1413       if (kTests[i].in_it_block) {
   1414         masm.it(kTests[i].it_condition);
   1415       }
   1416       (masm.*instruction)(cond, rd, op);
   1417     }
   1418     int32_t end = masm.GetCursorOffset();
   1419 
   1420     const byte* result_ptr =
   1421         masm.GetBuffer()->GetOffsetAddress<const byte*>(start);
   1422     VIXL_ASSERT(start < end);
   1423     uint32_t result_size = end - start;
   1424 
   1425     if (Test::generate_test_trace()) {
   1426       // Print the result bytes.
   1427       printf("const byte kInstruction_%s_%s[] = {\n",
   1428              mnemonic,
   1429              kTests[i].identifier);
   1430       for (uint32_t j = 0; j < result_size; j++) {
   1431         if (j == 0) {
   1432           printf("  0x%02" PRIx8, result_ptr[j]);
   1433         } else {
   1434           printf(", 0x%02" PRIx8, result_ptr[j]);
   1435         }
   1436       }
   1437       // This comment is meant to be used by external tools to validate
   1438       // the encoding. We can parse the comment to figure out what
   1439       // instruction this corresponds to.
   1440       if (kTests[i].in_it_block) {
   1441         printf(" // It %s; %s %s\n};\n",
   1442                kTests[i].it_condition.GetName(),
   1443                mnemonic,
   1444                kTests[i].operands_description);
   1445       } else {
   1446         printf(" // %s %s\n};\n", mnemonic, kTests[i].operands_description);
   1447       }
   1448     } else {
   1449       // Check we've emitted the exact same encoding as present in the
   1450       // trace file. Only print up to `kErrorReportLimit` errors.
   1451       if (((result_size != reference[i].size) ||
   1452            (memcmp(result_ptr, reference[i].encoding, reference[i].size) !=
   1453             0)) &&
   1454           (++total_error_count <= kErrorReportLimit)) {
   1455         printf("Error when testing \"%s\" with operands \"%s\":\n",
   1456                mnemonic,
   1457                kTests[i].operands_description);
   1458         printf("  Expected: ");
   1459         for (uint32_t j = 0; j < reference[i].size; j++) {
   1460           if (j == 0) {
   1461             printf("0x%02" PRIx8, reference[i].encoding[j]);
   1462           } else {
   1463             printf(", 0x%02" PRIx8, reference[i].encoding[j]);
   1464           }
   1465         }
   1466         printf("\n");
   1467         printf("  Found:    ");
   1468         for (uint32_t j = 0; j < result_size; j++) {
   1469           if (j == 0) {
   1470             printf("0x%02" PRIx8, result_ptr[j]);
   1471           } else {
   1472             printf(", 0x%02" PRIx8, result_ptr[j]);
   1473           }
   1474         }
   1475         printf("\n");
   1476       }
   1477     }
   1478   }
   1479 
   1480   masm.FinalizeCode();
   1481 
   1482   if (Test::generate_test_trace()) {
   1483     // Finalize the trace file by writing the final `TestResult` array
   1484     // which links all generated instruction encodings.
   1485     printf("const TestResult kReference%s[] = {\n", mnemonic);
   1486     for (unsigned i = 0; i < ARRAY_SIZE(kTests); i++) {
   1487       printf("  {\n");
   1488       printf("    ARRAY_SIZE(kInstruction_%s_%s),\n",
   1489              mnemonic,
   1490              kTests[i].identifier);
   1491       printf("    kInstruction_%s_%s,\n", mnemonic, kTests[i].identifier);
   1492       printf("  },\n");
   1493     }
   1494     printf("};\n");
   1495   } else {
   1496     if (total_error_count > kErrorReportLimit) {
   1497       printf("%u other errors follow.\n",
   1498              total_error_count - kErrorReportLimit);
   1499     }
   1500     // Crash if the test failed.
   1501     VIXL_CHECK(total_error_count == 0);
   1502   }
   1503 }
   1504 
   1505 // Instantiate tests for each instruction in the list.
   1506 #define TEST(mnemonic)                                                      \
   1507   void Test_##mnemonic() {                                                  \
   1508     TestHelper(&MacroAssembler::mnemonic, #mnemonic, kReference##mnemonic); \
   1509   }                                                                         \
   1510   Test test_##mnemonic(                                                     \
   1511       "AARCH32_ASSEMBLER_COND_RD_OPERAND_CONST_CANNOT_USE_PC_" #mnemonic    \
   1512       "_A32",                                                               \
   1513       &Test_##mnemonic);
   1514 FOREACH_INSTRUCTION(TEST)
   1515 #undef TEST
   1516 
   1517 }  // namespace
   1518 #endif
   1519 
   1520 }  // namespace aarch32
   1521 }  // namespace vixl
   1522