aarch64-asm-2.c revision 1.1.1.3
1/* This file is automatically generated by aarch64-gen. Do not edit! */ 2/* Copyright (C) 2012-2015 Free Software Foundation, Inc. 3 Contributed by ARM Ltd. 4 5 This file is part of the GNU opcodes library. 6 7 This library is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3, or (at your option) 10 any later version. 11 12 It is distributed in the hope that it will be useful, but WITHOUT 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15 License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; see the file COPYING3. If not, 19 see <http://www.gnu.org/licenses/>. */ 20 21#include "sysdep.h" 22#include "aarch64-asm.h" 23 24 25const aarch64_opcode * 26aarch64_find_real_opcode (const aarch64_opcode *opcode) 27{ 28 /* Use the index as the key to locate the real opcode. */ 29 int key = opcode - aarch64_opcode_table; 30 int value; 31 switch (key) 32 { 33 case 3: /* ngc */ 34 value = 2; /* --> sbc. */ 35 break; 36 case 5: /* ngcs */ 37 value = 4; /* --> sbcs. */ 38 break; 39 case 8: /* cmn */ 40 value = 7; /* --> adds. */ 41 break; 42 case 11: /* cmp */ 43 value = 10; /* --> subs. */ 44 break; 45 case 13: /* mov */ 46 value = 12; /* --> add. */ 47 break; 48 case 15: /* cmn */ 49 value = 14; /* --> adds. */ 50 break; 51 case 18: /* cmp */ 52 value = 17; /* --> subs. */ 53 break; 54 case 21: /* cmn */ 55 value = 20; /* --> adds. */ 56 break; 57 case 23: /* neg */ 58 value = 22; /* --> sub. */ 59 break; 60 case 26: /* negs */ 61 case 25: /* cmp */ 62 value = 24; /* --> subs. */ 63 break; 64 case 139: /* mov */ 65 value = 138; /* --> umov. */ 66 break; 67 case 141: /* mov */ 68 value = 140; /* --> ins. */ 69 break; 70 case 143: /* mov */ 71 value = 142; /* --> ins. */ 72 break; 73 case 204: /* mvn */ 74 value = 203; /* --> not. */ 75 break; 76 case 259: /* mov */ 77 value = 258; /* --> orr. */ 78 break; 79 case 314: /* sxtl */ 80 value = 313; /* --> sshll. */ 81 break; 82 case 316: /* sxtl2 */ 83 value = 315; /* --> sshll2. */ 84 break; 85 case 336: /* uxtl */ 86 value = 335; /* --> ushll. */ 87 break; 88 case 338: /* uxtl2 */ 89 value = 337; /* --> ushll2. */ 90 break; 91 case 431: /* mov */ 92 value = 430; /* --> dup. */ 93 break; 94 case 498: /* sxtw */ 95 case 497: /* sxth */ 96 case 496: /* sxtb */ 97 case 499: /* asr */ 98 case 495: /* sbfx */ 99 case 494: /* sbfiz */ 100 value = 493; /* --> sbfm. */ 101 break; 102 case 502: /* bfxil */ 103 case 501: /* bfi */ 104 value = 500; /* --> bfm. */ 105 break; 106 case 507: /* uxth */ 107 case 506: /* uxtb */ 108 case 509: /* lsr */ 109 case 508: /* lsl */ 110 case 505: /* ubfx */ 111 case 504: /* ubfiz */ 112 value = 503; /* --> ubfm. */ 113 break; 114 case 527: /* cset */ 115 case 526: /* cinc */ 116 value = 525; /* --> csinc. */ 117 break; 118 case 530: /* csetm */ 119 case 529: /* cinv */ 120 value = 528; /* --> csinv. */ 121 break; 122 case 532: /* cneg */ 123 value = 531; /* --> csneg. */ 124 break; 125 case 557: /* lsl */ 126 value = 556; /* --> lslv. */ 127 break; 128 case 559: /* lsr */ 129 value = 558; /* --> lsrv. */ 130 break; 131 case 561: /* asr */ 132 value = 560; /* --> asrv. */ 133 break; 134 case 563: /* ror */ 135 value = 562; /* --> rorv. */ 136 break; 137 case 573: /* mul */ 138 value = 572; /* --> madd. */ 139 break; 140 case 575: /* mneg */ 141 value = 574; /* --> msub. */ 142 break; 143 case 577: /* smull */ 144 value = 576; /* --> smaddl. */ 145 break; 146 case 579: /* smnegl */ 147 value = 578; /* --> smsubl. */ 148 break; 149 case 582: /* umull */ 150 value = 581; /* --> umaddl. */ 151 break; 152 case 584: /* umnegl */ 153 value = 583; /* --> umsubl. */ 154 break; 155 case 595: /* ror */ 156 value = 594; /* --> extr. */ 157 break; 158 case 695: /* strb */ 159 value = 693; /* --> sturb. */ 160 break; 161 case 696: /* ldrb */ 162 value = 694; /* --> ldurb. */ 163 break; 164 case 698: /* ldrsb */ 165 value = 697; /* --> ldursb. */ 166 break; 167 case 701: /* str */ 168 value = 699; /* --> stur. */ 169 break; 170 case 702: /* ldr */ 171 value = 700; /* --> ldur. */ 172 break; 173 case 705: /* strh */ 174 value = 703; /* --> sturh. */ 175 break; 176 case 706: /* ldrh */ 177 value = 704; /* --> ldurh. */ 178 break; 179 case 708: /* ldrsh */ 180 value = 707; /* --> ldursh. */ 181 break; 182 case 711: /* str */ 183 value = 709; /* --> stur. */ 184 break; 185 case 712: /* ldr */ 186 value = 710; /* --> ldur. */ 187 break; 188 case 714: /* ldrsw */ 189 value = 713; /* --> ldursw. */ 190 break; 191 case 716: /* prfm */ 192 value = 715; /* --> prfum. */ 193 break; 194 case 758: /* bic */ 195 value = 757; /* --> and. */ 196 break; 197 case 760: /* mov */ 198 value = 759; /* --> orr. */ 199 break; 200 case 763: /* tst */ 201 value = 762; /* --> ands. */ 202 break; 203 case 768: /* uxtw */ 204 case 767: /* mov */ 205 value = 766; /* --> orr. */ 206 break; 207 case 770: /* mvn */ 208 value = 769; /* --> orn. */ 209 break; 210 case 774: /* tst */ 211 value = 773; /* --> ands. */ 212 break; 213 case 900: /* staddb */ 214 value = 804; /* --> ldaddb. */ 215 break; 216 case 901: /* staddh */ 217 value = 805; /* --> ldaddh. */ 218 break; 219 case 902: /* stadd */ 220 value = 806; /* --> ldadd. */ 221 break; 222 case 903: /* staddlb */ 223 value = 808; /* --> ldaddlb. */ 224 break; 225 case 904: /* staddlh */ 226 value = 811; /* --> ldaddlh. */ 227 break; 228 case 905: /* staddl */ 229 value = 814; /* --> ldaddl. */ 230 break; 231 case 906: /* stclrb */ 232 value = 816; /* --> ldclrb. */ 233 break; 234 case 907: /* stclrh */ 235 value = 817; /* --> ldclrh. */ 236 break; 237 case 908: /* stclr */ 238 value = 818; /* --> ldclr. */ 239 break; 240 case 909: /* stclrlb */ 241 value = 820; /* --> ldclrlb. */ 242 break; 243 case 910: /* stclrlh */ 244 value = 823; /* --> ldclrlh. */ 245 break; 246 case 911: /* stclrl */ 247 value = 826; /* --> ldclrl. */ 248 break; 249 case 912: /* steorb */ 250 value = 828; /* --> ldeorb. */ 251 break; 252 case 913: /* steorh */ 253 value = 829; /* --> ldeorh. */ 254 break; 255 case 914: /* steor */ 256 value = 830; /* --> ldeor. */ 257 break; 258 case 915: /* steorlb */ 259 value = 832; /* --> ldeorlb. */ 260 break; 261 case 916: /* steorlh */ 262 value = 835; /* --> ldeorlh. */ 263 break; 264 case 917: /* steorl */ 265 value = 838; /* --> ldeorl. */ 266 break; 267 case 918: /* stsetb */ 268 value = 840; /* --> ldsetb. */ 269 break; 270 case 919: /* stseth */ 271 value = 841; /* --> ldseth. */ 272 break; 273 case 920: /* stset */ 274 value = 842; /* --> ldset. */ 275 break; 276 case 921: /* stsetlb */ 277 value = 844; /* --> ldsetlb. */ 278 break; 279 case 922: /* stsetlh */ 280 value = 847; /* --> ldsetlh. */ 281 break; 282 case 923: /* stsetl */ 283 value = 850; /* --> ldsetl. */ 284 break; 285 case 924: /* stsmaxb */ 286 value = 852; /* --> ldsmaxb. */ 287 break; 288 case 925: /* stsmaxh */ 289 value = 853; /* --> ldsmaxh. */ 290 break; 291 case 926: /* stsmax */ 292 value = 854; /* --> ldsmax. */ 293 break; 294 case 927: /* stsmaxlb */ 295 value = 856; /* --> ldsmaxlb. */ 296 break; 297 case 928: /* stsmaxlh */ 298 value = 859; /* --> ldsmaxlh. */ 299 break; 300 case 929: /* stsmaxl */ 301 value = 862; /* --> ldsmaxl. */ 302 break; 303 case 930: /* stsminb */ 304 value = 864; /* --> ldsminb. */ 305 break; 306 case 931: /* stsminh */ 307 value = 865; /* --> ldsminh. */ 308 break; 309 case 932: /* stsmin */ 310 value = 866; /* --> ldsmin. */ 311 break; 312 case 933: /* stsminlb */ 313 value = 868; /* --> ldsminlb. */ 314 break; 315 case 934: /* stsminlh */ 316 value = 871; /* --> ldsminlh. */ 317 break; 318 case 935: /* stsminl */ 319 value = 874; /* --> ldsminl. */ 320 break; 321 case 936: /* stumaxb */ 322 value = 876; /* --> ldumaxb. */ 323 break; 324 case 937: /* stumaxh */ 325 value = 877; /* --> ldumaxh. */ 326 break; 327 case 938: /* stumax */ 328 value = 878; /* --> ldumax. */ 329 break; 330 case 939: /* stumaxlb */ 331 value = 880; /* --> ldumaxlb. */ 332 break; 333 case 940: /* stumaxlh */ 334 value = 883; /* --> ldumaxlh. */ 335 break; 336 case 941: /* stumaxl */ 337 value = 886; /* --> ldumaxl. */ 338 break; 339 case 942: /* stuminb */ 340 value = 888; /* --> lduminb. */ 341 break; 342 case 943: /* stuminh */ 343 value = 889; /* --> lduminh. */ 344 break; 345 case 944: /* stumin */ 346 value = 890; /* --> ldumin. */ 347 break; 348 case 945: /* stuminlb */ 349 value = 892; /* --> lduminlb. */ 350 break; 351 case 946: /* stuminlh */ 352 value = 895; /* --> lduminlh. */ 353 break; 354 case 947: /* stuminl */ 355 value = 898; /* --> lduminl. */ 356 break; 357 case 949: /* mov */ 358 value = 948; /* --> movn. */ 359 break; 360 case 951: /* mov */ 361 value = 950; /* --> movz. */ 362 break; 363 case 962: /* sevl */ 364 case 961: /* sev */ 365 case 960: /* wfi */ 366 case 959: /* wfe */ 367 case 958: /* yield */ 368 case 957: /* nop */ 369 value = 956; /* --> hint. */ 370 break; 371 case 971: /* tlbi */ 372 case 970: /* ic */ 373 case 969: /* dc */ 374 case 968: /* at */ 375 value = 967; /* --> sys. */ 376 break; 377 default: return NULL; 378 } 379 380 return aarch64_opcode_table + value; 381} 382 383const char* 384aarch64_insert_operand (const aarch64_operand *self, 385 const aarch64_opnd_info *info, 386 aarch64_insn *code, const aarch64_inst *inst) 387{ 388 /* Use the index as the key. */ 389 int key = self - aarch64_operands; 390 switch (key) 391 { 392 case 1: 393 case 2: 394 case 3: 395 case 4: 396 case 5: 397 case 6: 398 case 7: 399 case 8: 400 case 9: 401 case 10: 402 case 14: 403 case 15: 404 case 16: 405 case 17: 406 case 19: 407 case 20: 408 case 21: 409 case 22: 410 case 23: 411 case 24: 412 case 25: 413 case 26: 414 case 27: 415 case 35: 416 case 36: 417 return aarch64_ins_regno (self, info, code, inst); 418 case 12: 419 return aarch64_ins_reg_extended (self, info, code, inst); 420 case 13: 421 return aarch64_ins_reg_shifted (self, info, code, inst); 422 case 18: 423 return aarch64_ins_ft (self, info, code, inst); 424 case 28: 425 case 29: 426 case 30: 427 return aarch64_ins_reglane (self, info, code, inst); 428 case 31: 429 return aarch64_ins_reglist (self, info, code, inst); 430 case 32: 431 return aarch64_ins_ldst_reglist (self, info, code, inst); 432 case 33: 433 return aarch64_ins_ldst_reglist_r (self, info, code, inst); 434 case 34: 435 return aarch64_ins_ldst_elemlist (self, info, code, inst); 436 case 37: 437 case 46: 438 case 47: 439 case 48: 440 case 49: 441 case 50: 442 case 51: 443 case 52: 444 case 53: 445 case 54: 446 case 55: 447 case 56: 448 case 57: 449 case 58: 450 case 67: 451 case 68: 452 case 69: 453 case 70: 454 return aarch64_ins_imm (self, info, code, inst); 455 case 38: 456 case 39: 457 return aarch64_ins_advsimd_imm_shift (self, info, code, inst); 458 case 40: 459 case 41: 460 case 42: 461 return aarch64_ins_advsimd_imm_modified (self, info, code, inst); 462 case 59: 463 return aarch64_ins_limm (self, info, code, inst); 464 case 60: 465 return aarch64_ins_aimm (self, info, code, inst); 466 case 61: 467 return aarch64_ins_imm_half (self, info, code, inst); 468 case 62: 469 return aarch64_ins_fbits (self, info, code, inst); 470 case 64: 471 case 65: 472 return aarch64_ins_cond (self, info, code, inst); 473 case 71: 474 case 77: 475 return aarch64_ins_addr_simple (self, info, code, inst); 476 case 72: 477 return aarch64_ins_addr_regoff (self, info, code, inst); 478 case 73: 479 case 74: 480 case 75: 481 return aarch64_ins_addr_simm (self, info, code, inst); 482 case 76: 483 return aarch64_ins_addr_uimm12 (self, info, code, inst); 484 case 78: 485 return aarch64_ins_simd_addr_post (self, info, code, inst); 486 case 79: 487 return aarch64_ins_sysreg (self, info, code, inst); 488 case 80: 489 return aarch64_ins_pstatefield (self, info, code, inst); 490 case 81: 491 case 82: 492 case 83: 493 case 84: 494 return aarch64_ins_sysins_op (self, info, code, inst); 495 case 85: 496 case 86: 497 return aarch64_ins_barrier (self, info, code, inst); 498 case 87: 499 return aarch64_ins_prfop (self, info, code, inst); 500 default: assert (0); abort (); 501 } 502} 503