+2015-11-27 Matthew Wahab <matthew.wahab@arm.com>
+
+ * aarch64-asm-2.c: Regenerate.
+ * aarch64-dis-2.c: Regenerate.
+ * aarch64-dis.c: Weaken assert.
+ * aarch64-gen.c: Include the instruction in the list of its
+ possible aliases.
+
2015-11-27 Matthew Wahab <matthew.wahab@arm.com>
* aarch64-opc.c (aarch64_sys_regs): Add "id_aa64mmfr2_el1".
switch (key)
{
case 3: /* ngc */
+ case 2: /* sbc */
value = 2; /* --> sbc. */
break;
case 5: /* ngcs */
+ case 4: /* sbcs */
value = 4; /* --> sbcs. */
break;
case 8: /* cmn */
+ case 7: /* adds */
value = 7; /* --> adds. */
break;
case 11: /* cmp */
+ case 10: /* subs */
value = 10; /* --> subs. */
break;
case 13: /* mov */
+ case 12: /* add */
value = 12; /* --> add. */
break;
case 15: /* cmn */
+ case 14: /* adds */
value = 14; /* --> adds. */
break;
case 18: /* cmp */
+ case 17: /* subs */
value = 17; /* --> subs. */
break;
case 21: /* cmn */
+ case 20: /* adds */
value = 20; /* --> adds. */
break;
case 23: /* neg */
+ case 22: /* sub */
value = 22; /* --> sub. */
break;
case 26: /* negs */
case 25: /* cmp */
+ case 24: /* subs */
value = 24; /* --> subs. */
break;
case 141: /* mov */
+ case 140: /* umov */
value = 140; /* --> umov. */
break;
case 143: /* mov */
+ case 142: /* ins */
value = 142; /* --> ins. */
break;
case 145: /* mov */
+ case 144: /* ins */
value = 144; /* --> ins. */
break;
case 206: /* mvn */
+ case 205: /* not */
value = 205; /* --> not. */
break;
case 261: /* mov */
+ case 260: /* orr */
value = 260; /* --> orr. */
break;
case 318: /* sxtl */
+ case 317: /* sshll */
value = 317; /* --> sshll. */
break;
case 320: /* sxtl2 */
+ case 319: /* sshll2 */
value = 319; /* --> sshll2. */
break;
case 340: /* uxtl */
+ case 339: /* ushll */
value = 339; /* --> ushll. */
break;
case 342: /* uxtl2 */
+ case 341: /* ushll2 */
value = 341; /* --> ushll2. */
break;
case 437: /* mov */
+ case 436: /* dup */
value = 436; /* --> dup. */
break;
case 506: /* sxtw */
case 507: /* asr */
case 503: /* sbfx */
case 502: /* sbfiz */
+ case 501: /* sbfm */
value = 501; /* --> sbfm. */
break;
case 510: /* bfxil */
case 509: /* bfi */
+ case 508: /* bfm */
value = 508; /* --> bfm. */
break;
case 515: /* uxth */
case 516: /* lsl */
case 513: /* ubfx */
case 512: /* ubfiz */
+ case 511: /* ubfm */
value = 511; /* --> ubfm. */
break;
case 535: /* cset */
case 534: /* cinc */
+ case 533: /* csinc */
value = 533; /* --> csinc. */
break;
case 538: /* csetm */
case 537: /* cinv */
+ case 536: /* csinv */
value = 536; /* --> csinv. */
break;
case 540: /* cneg */
+ case 539: /* csneg */
value = 539; /* --> csneg. */
break;
case 565: /* lsl */
+ case 564: /* lslv */
value = 564; /* --> lslv. */
break;
case 567: /* lsr */
+ case 566: /* lsrv */
value = 566; /* --> lsrv. */
break;
case 569: /* asr */
+ case 568: /* asrv */
value = 568; /* --> asrv. */
break;
case 571: /* ror */
+ case 570: /* rorv */
value = 570; /* --> rorv. */
break;
case 581: /* mul */
+ case 580: /* madd */
value = 580; /* --> madd. */
break;
case 583: /* mneg */
+ case 582: /* msub */
value = 582; /* --> msub. */
break;
case 585: /* smull */
+ case 584: /* smaddl */
value = 584; /* --> smaddl. */
break;
case 587: /* smnegl */
+ case 586: /* smsubl */
value = 586; /* --> smsubl. */
break;
case 590: /* umull */
+ case 589: /* umaddl */
value = 589; /* --> umaddl. */
break;
case 592: /* umnegl */
+ case 591: /* umsubl */
value = 591; /* --> umsubl. */
break;
case 603: /* ror */
+ case 602: /* extr */
value = 602; /* --> extr. */
break;
case 760: /* bic */
+ case 759: /* and */
value = 759; /* --> and. */
break;
case 762: /* mov */
+ case 761: /* orr */
value = 761; /* --> orr. */
break;
case 765: /* tst */
+ case 764: /* ands */
value = 764; /* --> ands. */
break;
case 770: /* uxtw */
case 769: /* mov */
+ case 768: /* orr */
value = 768; /* --> orr. */
break;
case 772: /* mvn */
+ case 771: /* orn */
value = 771; /* --> orn. */
break;
case 776: /* tst */
+ case 775: /* ands */
value = 775; /* --> ands. */
break;
case 902: /* staddb */
+ case 806: /* ldaddb */
value = 806; /* --> ldaddb. */
break;
case 903: /* staddh */
+ case 807: /* ldaddh */
value = 807; /* --> ldaddh. */
break;
case 904: /* stadd */
+ case 808: /* ldadd */
value = 808; /* --> ldadd. */
break;
case 905: /* staddlb */
+ case 810: /* ldaddlb */
value = 810; /* --> ldaddlb. */
break;
case 906: /* staddlh */
+ case 813: /* ldaddlh */
value = 813; /* --> ldaddlh. */
break;
case 907: /* staddl */
+ case 816: /* ldaddl */
value = 816; /* --> ldaddl. */
break;
case 908: /* stclrb */
+ case 818: /* ldclrb */
value = 818; /* --> ldclrb. */
break;
case 909: /* stclrh */
+ case 819: /* ldclrh */
value = 819; /* --> ldclrh. */
break;
case 910: /* stclr */
+ case 820: /* ldclr */
value = 820; /* --> ldclr. */
break;
case 911: /* stclrlb */
+ case 822: /* ldclrlb */
value = 822; /* --> ldclrlb. */
break;
case 912: /* stclrlh */
+ case 825: /* ldclrlh */
value = 825; /* --> ldclrlh. */
break;
case 913: /* stclrl */
+ case 828: /* ldclrl */
value = 828; /* --> ldclrl. */
break;
case 914: /* steorb */
+ case 830: /* ldeorb */
value = 830; /* --> ldeorb. */
break;
case 915: /* steorh */
+ case 831: /* ldeorh */
value = 831; /* --> ldeorh. */
break;
case 916: /* steor */
+ case 832: /* ldeor */
value = 832; /* --> ldeor. */
break;
case 917: /* steorlb */
+ case 834: /* ldeorlb */
value = 834; /* --> ldeorlb. */
break;
case 918: /* steorlh */
+ case 837: /* ldeorlh */
value = 837; /* --> ldeorlh. */
break;
case 919: /* steorl */
+ case 840: /* ldeorl */
value = 840; /* --> ldeorl. */
break;
case 920: /* stsetb */
+ case 842: /* ldsetb */
value = 842; /* --> ldsetb. */
break;
case 921: /* stseth */
+ case 843: /* ldseth */
value = 843; /* --> ldseth. */
break;
case 922: /* stset */
+ case 844: /* ldset */
value = 844; /* --> ldset. */
break;
case 923: /* stsetlb */
+ case 846: /* ldsetlb */
value = 846; /* --> ldsetlb. */
break;
case 924: /* stsetlh */
+ case 849: /* ldsetlh */
value = 849; /* --> ldsetlh. */
break;
case 925: /* stsetl */
+ case 852: /* ldsetl */
value = 852; /* --> ldsetl. */
break;
case 926: /* stsmaxb */
+ case 854: /* ldsmaxb */
value = 854; /* --> ldsmaxb. */
break;
case 927: /* stsmaxh */
+ case 855: /* ldsmaxh */
value = 855; /* --> ldsmaxh. */
break;
case 928: /* stsmax */
+ case 856: /* ldsmax */
value = 856; /* --> ldsmax. */
break;
case 929: /* stsmaxlb */
+ case 858: /* ldsmaxlb */
value = 858; /* --> ldsmaxlb. */
break;
case 930: /* stsmaxlh */
+ case 861: /* ldsmaxlh */
value = 861; /* --> ldsmaxlh. */
break;
case 931: /* stsmaxl */
+ case 864: /* ldsmaxl */
value = 864; /* --> ldsmaxl. */
break;
case 932: /* stsminb */
+ case 866: /* ldsminb */
value = 866; /* --> ldsminb. */
break;
case 933: /* stsminh */
+ case 867: /* ldsminh */
value = 867; /* --> ldsminh. */
break;
case 934: /* stsmin */
+ case 868: /* ldsmin */
value = 868; /* --> ldsmin. */
break;
case 935: /* stsminlb */
+ case 870: /* ldsminlb */
value = 870; /* --> ldsminlb. */
break;
case 936: /* stsminlh */
+ case 873: /* ldsminlh */
value = 873; /* --> ldsminlh. */
break;
case 937: /* stsminl */
+ case 876: /* ldsminl */
value = 876; /* --> ldsminl. */
break;
case 938: /* stumaxb */
+ case 878: /* ldumaxb */
value = 878; /* --> ldumaxb. */
break;
case 939: /* stumaxh */
+ case 879: /* ldumaxh */
value = 879; /* --> ldumaxh. */
break;
case 940: /* stumax */
+ case 880: /* ldumax */
value = 880; /* --> ldumax. */
break;
case 941: /* stumaxlb */
+ case 882: /* ldumaxlb */
value = 882; /* --> ldumaxlb. */
break;
case 942: /* stumaxlh */
+ case 885: /* ldumaxlh */
value = 885; /* --> ldumaxlh. */
break;
case 943: /* stumaxl */
+ case 888: /* ldumaxl */
value = 888; /* --> ldumaxl. */
break;
case 944: /* stuminb */
+ case 890: /* lduminb */
value = 890; /* --> lduminb. */
break;
case 945: /* stuminh */
+ case 891: /* lduminh */
value = 891; /* --> lduminh. */
break;
case 946: /* stumin */
+ case 892: /* ldumin */
value = 892; /* --> ldumin. */
break;
case 947: /* stuminlb */
+ case 894: /* lduminlb */
value = 894; /* --> lduminlb. */
break;
case 948: /* stuminlh */
+ case 897: /* lduminlh */
value = 897; /* --> lduminlh. */
break;
case 949: /* stuminl */
+ case 900: /* lduminl */
value = 900; /* --> lduminl. */
break;
case 951: /* mov */
+ case 950: /* movn */
value = 950; /* --> movn. */
break;
case 953: /* mov */
+ case 952: /* movz */
value = 952; /* --> movz. */
break;
case 964: /* sevl */
case 961: /* wfe */
case 960: /* yield */
case 959: /* nop */
+ case 958: /* hint */
value = 958; /* --> hint. */
break;
case 973: /* tlbi */
case 972: /* ic */
case 971: /* dc */
case 970: /* at */
+ case 969: /* sys */
value = 969; /* --> sys. */
break;
default: return NULL;
int value;
switch (key)
{
+ case 3: value = 2; break; /* ngc --> sbc. */
+ case 5: value = 4; break; /* ngcs --> sbcs. */
+ case 8: value = 7; break; /* cmn --> adds. */
+ case 11: value = 10; break; /* cmp --> subs. */
+ case 13: value = 12; break; /* mov --> add. */
+ case 15: value = 14; break; /* cmn --> adds. */
+ case 18: value = 17; break; /* cmp --> subs. */
+ case 21: value = 20; break; /* cmn --> adds. */
+ case 23: value = 22; break; /* neg --> sub. */
case 26: value = 25; break; /* negs --> cmp. */
+ case 25: value = 24; break; /* cmp --> subs. */
+ case 141: value = 140; break; /* mov --> umov. */
+ case 143: value = 142; break; /* mov --> ins. */
+ case 145: value = 144; break; /* mov --> ins. */
+ case 206: value = 205; break; /* mvn --> not. */
+ case 261: value = 260; break; /* mov --> orr. */
+ case 318: value = 317; break; /* sxtl --> sshll. */
+ case 320: value = 319; break; /* sxtl2 --> sshll2. */
+ case 340: value = 339; break; /* uxtl --> ushll. */
+ case 342: value = 341; break; /* uxtl2 --> ushll2. */
+ case 437: value = 436; break; /* mov --> dup. */
case 506: value = 505; break; /* sxtw --> sxth. */
case 505: value = 504; break; /* sxth --> sxtb. */
case 504: value = 507; break; /* sxtb --> asr. */
case 507: value = 503; break; /* asr --> sbfx. */
case 503: value = 502; break; /* sbfx --> sbfiz. */
+ case 502: value = 501; break; /* sbfiz --> sbfm. */
case 510: value = 509; break; /* bfxil --> bfi. */
+ case 509: value = 508; break; /* bfi --> bfm. */
case 515: value = 514; break; /* uxth --> uxtb. */
case 514: value = 517; break; /* uxtb --> lsr. */
case 517: value = 516; break; /* lsr --> lsl. */
case 516: value = 513; break; /* lsl --> ubfx. */
case 513: value = 512; break; /* ubfx --> ubfiz. */
+ case 512: value = 511; break; /* ubfiz --> ubfm. */
case 535: value = 534; break; /* cset --> cinc. */
+ case 534: value = 533; break; /* cinc --> csinc. */
case 538: value = 537; break; /* csetm --> cinv. */
+ case 537: value = 536; break; /* cinv --> csinv. */
+ case 540: value = 539; break; /* cneg --> csneg. */
+ case 565: value = 564; break; /* lsl --> lslv. */
+ case 567: value = 566; break; /* lsr --> lsrv. */
+ case 569: value = 568; break; /* asr --> asrv. */
+ case 571: value = 570; break; /* ror --> rorv. */
+ case 581: value = 580; break; /* mul --> madd. */
+ case 583: value = 582; break; /* mneg --> msub. */
+ case 585: value = 584; break; /* smull --> smaddl. */
+ case 587: value = 586; break; /* smnegl --> smsubl. */
+ case 590: value = 589; break; /* umull --> umaddl. */
+ case 592: value = 591; break; /* umnegl --> umsubl. */
+ case 603: value = 602; break; /* ror --> extr. */
+ case 760: value = 759; break; /* bic --> and. */
+ case 762: value = 761; break; /* mov --> orr. */
+ case 765: value = 764; break; /* tst --> ands. */
case 770: value = 769; break; /* uxtw --> mov. */
+ case 769: value = 768; break; /* mov --> orr. */
+ case 772: value = 771; break; /* mvn --> orn. */
+ case 776: value = 775; break; /* tst --> ands. */
+ case 902: value = 806; break; /* staddb --> ldaddb. */
+ case 903: value = 807; break; /* staddh --> ldaddh. */
+ case 904: value = 808; break; /* stadd --> ldadd. */
+ case 905: value = 810; break; /* staddlb --> ldaddlb. */
+ case 906: value = 813; break; /* staddlh --> ldaddlh. */
+ case 907: value = 816; break; /* staddl --> ldaddl. */
+ case 908: value = 818; break; /* stclrb --> ldclrb. */
+ case 909: value = 819; break; /* stclrh --> ldclrh. */
+ case 910: value = 820; break; /* stclr --> ldclr. */
+ case 911: value = 822; break; /* stclrlb --> ldclrlb. */
+ case 912: value = 825; break; /* stclrlh --> ldclrlh. */
+ case 913: value = 828; break; /* stclrl --> ldclrl. */
+ case 914: value = 830; break; /* steorb --> ldeorb. */
+ case 915: value = 831; break; /* steorh --> ldeorh. */
+ case 916: value = 832; break; /* steor --> ldeor. */
+ case 917: value = 834; break; /* steorlb --> ldeorlb. */
+ case 918: value = 837; break; /* steorlh --> ldeorlh. */
+ case 919: value = 840; break; /* steorl --> ldeorl. */
+ case 920: value = 842; break; /* stsetb --> ldsetb. */
+ case 921: value = 843; break; /* stseth --> ldseth. */
+ case 922: value = 844; break; /* stset --> ldset. */
+ case 923: value = 846; break; /* stsetlb --> ldsetlb. */
+ case 924: value = 849; break; /* stsetlh --> ldsetlh. */
+ case 925: value = 852; break; /* stsetl --> ldsetl. */
+ case 926: value = 854; break; /* stsmaxb --> ldsmaxb. */
+ case 927: value = 855; break; /* stsmaxh --> ldsmaxh. */
+ case 928: value = 856; break; /* stsmax --> ldsmax. */
+ case 929: value = 858; break; /* stsmaxlb --> ldsmaxlb. */
+ case 930: value = 861; break; /* stsmaxlh --> ldsmaxlh. */
+ case 931: value = 864; break; /* stsmaxl --> ldsmaxl. */
+ case 932: value = 866; break; /* stsminb --> ldsminb. */
+ case 933: value = 867; break; /* stsminh --> ldsminh. */
+ case 934: value = 868; break; /* stsmin --> ldsmin. */
+ case 935: value = 870; break; /* stsminlb --> ldsminlb. */
+ case 936: value = 873; break; /* stsminlh --> ldsminlh. */
+ case 937: value = 876; break; /* stsminl --> ldsminl. */
+ case 938: value = 878; break; /* stumaxb --> ldumaxb. */
+ case 939: value = 879; break; /* stumaxh --> ldumaxh. */
+ case 940: value = 880; break; /* stumax --> ldumax. */
+ case 941: value = 882; break; /* stumaxlb --> ldumaxlb. */
+ case 942: value = 885; break; /* stumaxlh --> ldumaxlh. */
+ case 943: value = 888; break; /* stumaxl --> ldumaxl. */
+ case 944: value = 890; break; /* stuminb --> lduminb. */
+ case 945: value = 891; break; /* stuminh --> lduminh. */
+ case 946: value = 892; break; /* stumin --> ldumin. */
+ case 947: value = 894; break; /* stuminlb --> lduminlb. */
+ case 948: value = 897; break; /* stuminlh --> lduminlh. */
+ case 949: value = 900; break; /* stuminl --> lduminl. */
+ case 951: value = 950; break; /* mov --> movn. */
+ case 953: value = 952; break; /* mov --> movz. */
case 964: value = 963; break; /* sevl --> sev. */
case 963: value = 962; break; /* sev --> wfi. */
case 962: value = 961; break; /* wfi --> wfe. */
case 961: value = 960; break; /* wfe --> yield. */
case 960: value = 959; break; /* yield --> nop. */
+ case 959: value = 958; break; /* nop --> hint. */
case 973: value = 972; break; /* tlbi --> ic. */
case 972: value = 971; break; /* ic --> dc. */
case 971: value = 970; break; /* dc --> at. */
+ case 970: value = 969; break; /* at --> sys. */
default: return NULL;
}
for (; alias; alias = aarch64_find_next_alias_opcode (alias))
{
DEBUG_TRACE ("try %s", alias->name);
- assert (alias_opcode_p (alias));
+ assert (alias_opcode_p (alias) || opcode_has_alias (opcode));
/* An alias can be a pseudo opcode which will never be used in the
disassembly, e.g. BIC logical immediate is such a pseudo opcode
/* Assume maximum of 8 disassemble preference candidates. */
const int max_num_aliases = 8;
const aarch64_opcode *ent;
- const aarch64_opcode *preferred[max_num_aliases];
+ const aarch64_opcode *preferred[max_num_aliases + 1];
opcode_node head, **next;
assert (opcode_has_alias (opcode));
i = 0;
+ if (opcode->name != NULL)
+ preferred[i++] = opcode;
ent = aarch64_opcode_table;
while (ent->name != NULL)
{