aarch64-asm-2.c revision 1.1.1.4
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 141: /* mov */ 65 value = 140; /* --> umov. */ 66 break; 67 case 143: /* mov */ 68 value = 142; /* --> ins. */ 69 break; 70 case 145: /* mov */ 71 value = 144; /* --> ins. */ 72 break; 73 case 206: /* mvn */ 74 value = 205; /* --> not. */ 75 break; 76 case 261: /* mov */ 77 value = 260; /* --> orr. */ 78 break; 79 case 318: /* sxtl */ 80 value = 317; /* --> sshll. */ 81 break; 82 case 320: /* sxtl2 */ 83 value = 319; /* --> sshll2. */ 84 break; 85 case 340: /* uxtl */ 86 value = 339; /* --> ushll. */ 87 break; 88 case 342: /* uxtl2 */ 89 value = 341; /* --> ushll2. */ 90 break; 91 case 437: /* mov */ 92 value = 436; /* --> dup. */ 93 break; 94 case 506: /* sxtw */ 95 case 505: /* sxth */ 96 case 504: /* sxtb */ 97 case 507: /* asr */ 98 case 503: /* sbfx */ 99 case 502: /* sbfiz */ 100 value = 501; /* --> sbfm. */ 101 break; 102 case 510: /* bfxil */ 103 case 509: /* bfi */ 104 value = 508; /* --> bfm. */ 105 break; 106 case 515: /* uxth */ 107 case 514: /* uxtb */ 108 case 517: /* lsr */ 109 case 516: /* lsl */ 110 case 513: /* ubfx */ 111 case 512: /* ubfiz */ 112 value = 511; /* --> ubfm. */ 113 break; 114 case 535: /* cset */ 115 case 534: /* cinc */ 116 value = 533; /* --> csinc. */ 117 break; 118 case 538: /* csetm */ 119 case 537: /* cinv */ 120 value = 536; /* --> csinv. */ 121 break; 122 case 540: /* cneg */ 123 value = 539; /* --> csneg. */ 124 break; 125 case 565: /* lsl */ 126 value = 564; /* --> lslv. */ 127 break; 128 case 567: /* lsr */ 129 value = 566; /* --> lsrv. */ 130 break; 131 case 569: /* asr */ 132 value = 568; /* --> asrv. */ 133 break; 134 case 571: /* ror */ 135 value = 570; /* --> rorv. */ 136 break; 137 case 581: /* mul */ 138 value = 580; /* --> madd. */ 139 break; 140 case 583: /* mneg */ 141 value = 582; /* --> msub. */ 142 break; 143 case 585: /* smull */ 144 value = 584; /* --> smaddl. */ 145 break; 146 case 587: /* smnegl */ 147 value = 586; /* --> smsubl. */ 148 break; 149 case 590: /* umull */ 150 value = 589; /* --> umaddl. */ 151 break; 152 case 592: /* umnegl */ 153 value = 591; /* --> umsubl. */ 154 break; 155 case 603: /* ror */ 156 value = 602; /* --> extr. */ 157 break; 158 case 760: /* bic */ 159 value = 759; /* --> and. */ 160 break; 161 case 762: /* mov */ 162 value = 761; /* --> orr. */ 163 break; 164 case 765: /* tst */ 165 value = 764; /* --> ands. */ 166 break; 167 case 770: /* uxtw */ 168 case 769: /* mov */ 169 value = 768; /* --> orr. */ 170 break; 171 case 772: /* mvn */ 172 value = 771; /* --> orn. */ 173 break; 174 case 776: /* tst */ 175 value = 775; /* --> ands. */ 176 break; 177 case 902: /* staddb */ 178 value = 806; /* --> ldaddb. */ 179 break; 180 case 903: /* staddh */ 181 value = 807; /* --> ldaddh. */ 182 break; 183 case 904: /* stadd */ 184 value = 808; /* --> ldadd. */ 185 break; 186 case 905: /* staddlb */ 187 value = 810; /* --> ldaddlb. */ 188 break; 189 case 906: /* staddlh */ 190 value = 813; /* --> ldaddlh. */ 191 break; 192 case 907: /* staddl */ 193 value = 816; /* --> ldaddl. */ 194 break; 195 case 908: /* stclrb */ 196 value = 818; /* --> ldclrb. */ 197 break; 198 case 909: /* stclrh */ 199 value = 819; /* --> ldclrh. */ 200 break; 201 case 910: /* stclr */ 202 value = 820; /* --> ldclr. */ 203 break; 204 case 911: /* stclrlb */ 205 value = 822; /* --> ldclrlb. */ 206 break; 207 case 912: /* stclrlh */ 208 value = 825; /* --> ldclrlh. */ 209 break; 210 case 913: /* stclrl */ 211 value = 828; /* --> ldclrl. */ 212 break; 213 case 914: /* steorb */ 214 value = 830; /* --> ldeorb. */ 215 break; 216 case 915: /* steorh */ 217 value = 831; /* --> ldeorh. */ 218 break; 219 case 916: /* steor */ 220 value = 832; /* --> ldeor. */ 221 break; 222 case 917: /* steorlb */ 223 value = 834; /* --> ldeorlb. */ 224 break; 225 case 918: /* steorlh */ 226 value = 837; /* --> ldeorlh. */ 227 break; 228 case 919: /* steorl */ 229 value = 840; /* --> ldeorl. */ 230 break; 231 case 920: /* stsetb */ 232 value = 842; /* --> ldsetb. */ 233 break; 234 case 921: /* stseth */ 235 value = 843; /* --> ldseth. */ 236 break; 237 case 922: /* stset */ 238 value = 844; /* --> ldset. */ 239 break; 240 case 923: /* stsetlb */ 241 value = 846; /* --> ldsetlb. */ 242 break; 243 case 924: /* stsetlh */ 244 value = 849; /* --> ldsetlh. */ 245 break; 246 case 925: /* stsetl */ 247 value = 852; /* --> ldsetl. */ 248 break; 249 case 926: /* stsmaxb */ 250 value = 854; /* --> ldsmaxb. */ 251 break; 252 case 927: /* stsmaxh */ 253 value = 855; /* --> ldsmaxh. */ 254 break; 255 case 928: /* stsmax */ 256 value = 856; /* --> ldsmax. */ 257 break; 258 case 929: /* stsmaxlb */ 259 value = 858; /* --> ldsmaxlb. */ 260 break; 261 case 930: /* stsmaxlh */ 262 value = 861; /* --> ldsmaxlh. */ 263 break; 264 case 931: /* stsmaxl */ 265 value = 864; /* --> ldsmaxl. */ 266 break; 267 case 932: /* stsminb */ 268 value = 866; /* --> ldsminb. */ 269 break; 270 case 933: /* stsminh */ 271 value = 867; /* --> ldsminh. */ 272 break; 273 case 934: /* stsmin */ 274 value = 868; /* --> ldsmin. */ 275 break; 276 case 935: /* stsminlb */ 277 value = 870; /* --> ldsminlb. */ 278 break; 279 case 936: /* stsminlh */ 280 value = 873; /* --> ldsminlh. */ 281 break; 282 case 937: /* stsminl */ 283 value = 876; /* --> ldsminl. */ 284 break; 285 case 938: /* stumaxb */ 286 value = 878; /* --> ldumaxb. */ 287 break; 288 case 939: /* stumaxh */ 289 value = 879; /* --> ldumaxh. */ 290 break; 291 case 940: /* stumax */ 292 value = 880; /* --> ldumax. */ 293 break; 294 case 941: /* stumaxlb */ 295 value = 882; /* --> ldumaxlb. */ 296 break; 297 case 942: /* stumaxlh */ 298 value = 885; /* --> ldumaxlh. */ 299 break; 300 case 943: /* stumaxl */ 301 value = 888; /* --> ldumaxl. */ 302 break; 303 case 944: /* stuminb */ 304 value = 890; /* --> lduminb. */ 305 break; 306 case 945: /* stuminh */ 307 value = 891; /* --> lduminh. */ 308 break; 309 case 946: /* stumin */ 310 value = 892; /* --> ldumin. */ 311 break; 312 case 947: /* stuminlb */ 313 value = 894; /* --> lduminlb. */ 314 break; 315 case 948: /* stuminlh */ 316 value = 897; /* --> lduminlh. */ 317 break; 318 case 949: /* stuminl */ 319 value = 900; /* --> lduminl. */ 320 break; 321 case 951: /* mov */ 322 value = 950; /* --> movn. */ 323 break; 324 case 953: /* mov */ 325 value = 952; /* --> movz. */ 326 break; 327 case 964: /* sevl */ 328 case 963: /* sev */ 329 case 962: /* wfi */ 330 case 961: /* wfe */ 331 case 960: /* yield */ 332 case 959: /* nop */ 333 value = 958; /* --> hint. */ 334 break; 335 case 973: /* tlbi */ 336 case 972: /* ic */ 337 case 971: /* dc */ 338 case 970: /* at */ 339 value = 969; /* --> sys. */ 340 break; 341 default: return NULL; 342 } 343 344 return aarch64_opcode_table + value; 345} 346 347const char* 348aarch64_insert_operand (const aarch64_operand *self, 349 const aarch64_opnd_info *info, 350 aarch64_insn *code, const aarch64_inst *inst) 351{ 352 /* Use the index as the key. */ 353 int key = self - aarch64_operands; 354 switch (key) 355 { 356 case 1: 357 case 2: 358 case 3: 359 case 4: 360 case 5: 361 case 6: 362 case 7: 363 case 8: 364 case 9: 365 case 10: 366 case 14: 367 case 15: 368 case 16: 369 case 17: 370 case 19: 371 case 20: 372 case 21: 373 case 22: 374 case 23: 375 case 24: 376 case 25: 377 case 26: 378 case 27: 379 case 35: 380 case 36: 381 return aarch64_ins_regno (self, info, code, inst); 382 case 12: 383 return aarch64_ins_reg_extended (self, info, code, inst); 384 case 13: 385 return aarch64_ins_reg_shifted (self, info, code, inst); 386 case 18: 387 return aarch64_ins_ft (self, info, code, inst); 388 case 28: 389 case 29: 390 case 30: 391 return aarch64_ins_reglane (self, info, code, inst); 392 case 31: 393 return aarch64_ins_reglist (self, info, code, inst); 394 case 32: 395 return aarch64_ins_ldst_reglist (self, info, code, inst); 396 case 33: 397 return aarch64_ins_ldst_reglist_r (self, info, code, inst); 398 case 34: 399 return aarch64_ins_ldst_elemlist (self, info, code, inst); 400 case 37: 401 case 46: 402 case 47: 403 case 48: 404 case 49: 405 case 50: 406 case 51: 407 case 52: 408 case 53: 409 case 54: 410 case 55: 411 case 56: 412 case 57: 413 case 58: 414 case 67: 415 case 68: 416 case 69: 417 case 70: 418 return aarch64_ins_imm (self, info, code, inst); 419 case 38: 420 case 39: 421 return aarch64_ins_advsimd_imm_shift (self, info, code, inst); 422 case 40: 423 case 41: 424 case 42: 425 return aarch64_ins_advsimd_imm_modified (self, info, code, inst); 426 case 59: 427 return aarch64_ins_limm (self, info, code, inst); 428 case 60: 429 return aarch64_ins_aimm (self, info, code, inst); 430 case 61: 431 return aarch64_ins_imm_half (self, info, code, inst); 432 case 62: 433 return aarch64_ins_fbits (self, info, code, inst); 434 case 64: 435 case 65: 436 return aarch64_ins_cond (self, info, code, inst); 437 case 71: 438 case 77: 439 return aarch64_ins_addr_simple (self, info, code, inst); 440 case 72: 441 return aarch64_ins_addr_regoff (self, info, code, inst); 442 case 73: 443 case 74: 444 case 75: 445 return aarch64_ins_addr_simm (self, info, code, inst); 446 case 76: 447 return aarch64_ins_addr_uimm12 (self, info, code, inst); 448 case 78: 449 return aarch64_ins_simd_addr_post (self, info, code, inst); 450 case 79: 451 return aarch64_ins_sysreg (self, info, code, inst); 452 case 80: 453 return aarch64_ins_pstatefield (self, info, code, inst); 454 case 81: 455 case 82: 456 case 83: 457 case 84: 458 return aarch64_ins_sysins_op (self, info, code, inst); 459 case 85: 460 case 86: 461 return aarch64_ins_barrier (self, info, code, inst); 462 case 87: 463 return aarch64_ins_prfop (self, info, code, inst); 464 default: assert (0); abort (); 465 } 466} 467