github.com/huandu/go@v0.0.0-20151114150818-04e615e41150/src/cmd/internal/obj/arm64/a.out.go (about) 1 // cmd/7c/7.out.h from Vita Nuova. 2 // https://code.google.com/p/ken-cc/source/browse/src/cmd/7c/7.out.h 3 // 4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. 5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) 6 // Portions Copyright © 1997-1999 Vita Nuova Limited 7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) 8 // Portions Copyright © 2004,2006 Bruce Ellis 9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) 10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others 11 // Portions Copyright © 2009 The Go Authors. All rights reserved. 12 // 13 // Permission is hereby granted, free of charge, to any person obtaining a copy 14 // of this software and associated documentation files (the "Software"), to deal 15 // in the Software without restriction, including without limitation the rights 16 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 // copies of the Software, and to permit persons to whom the Software is 18 // furnished to do so, subject to the following conditions: 19 // 20 // The above copyright notice and this permission notice shall be included in 21 // all copies or substantial portions of the Software. 22 // 23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 // THE SOFTWARE. 30 31 package arm64 32 33 import "cmd/internal/obj" 34 35 const ( 36 NSNAME = 8 37 NSYM = 50 38 NREG = 32 /* number of general registers */ 39 NFREG = 32 /* number of floating point registers */ 40 ) 41 42 // General purpose registers, kept in the low bits of Prog.Reg. 43 const ( 44 // integer 45 REG_R0 = obj.RBaseARM64 + iota 46 REG_R1 47 REG_R2 48 REG_R3 49 REG_R4 50 REG_R5 51 REG_R6 52 REG_R7 53 REG_R8 54 REG_R9 55 REG_R10 56 REG_R11 57 REG_R12 58 REG_R13 59 REG_R14 60 REG_R15 61 REG_R16 62 REG_R17 63 REG_R18 64 REG_R19 65 REG_R20 66 REG_R21 67 REG_R22 68 REG_R23 69 REG_R24 70 REG_R25 71 REG_R26 72 REG_R27 73 REG_R28 74 REG_R29 75 REG_R30 76 REG_R31 77 78 // scalar floating point 79 REG_F0 80 REG_F1 81 REG_F2 82 REG_F3 83 REG_F4 84 REG_F5 85 REG_F6 86 REG_F7 87 REG_F8 88 REG_F9 89 REG_F10 90 REG_F11 91 REG_F12 92 REG_F13 93 REG_F14 94 REG_F15 95 REG_F16 96 REG_F17 97 REG_F18 98 REG_F19 99 REG_F20 100 REG_F21 101 REG_F22 102 REG_F23 103 REG_F24 104 REG_F25 105 REG_F26 106 REG_F27 107 REG_F28 108 REG_F29 109 REG_F30 110 REG_F31 111 112 // SIMD 113 REG_V0 114 REG_V1 115 REG_V2 116 REG_V3 117 REG_V4 118 REG_V5 119 REG_V6 120 REG_V7 121 REG_V8 122 REG_V9 123 REG_V10 124 REG_V11 125 REG_V12 126 REG_V13 127 REG_V14 128 REG_V15 129 REG_V16 130 REG_V17 131 REG_V18 132 REG_V19 133 REG_V20 134 REG_V21 135 REG_V22 136 REG_V23 137 REG_V24 138 REG_V25 139 REG_V26 140 REG_V27 141 REG_V28 142 REG_V29 143 REG_V30 144 REG_V31 145 146 // The EQ in 147 // CSET EQ, R0 148 // is encoded as TYPE_REG, even though it's not really a register. 149 COND_EQ 150 COND_NE 151 COND_HS 152 COND_LO 153 COND_MI 154 COND_PL 155 COND_VS 156 COND_VC 157 COND_HI 158 COND_LS 159 COND_GE 160 COND_LT 161 COND_GT 162 COND_LE 163 COND_AL 164 COND_NV 165 166 REG_RSP = REG_V31 + 32 // to differentiate ZR/SP, REG_RSP&0x1f = 31 167 ) 168 169 // Not registers, but flags that can be combined with regular register 170 // constants to indicate extended register conversion. When checking, 171 // you should subtract obj.RBaseARM64 first. From this difference, bit 11 172 // indicates extended register, bits 8-10 select the conversion mode. 173 const REG_EXT = obj.RBaseARM64 + 1<<11 174 175 const ( 176 REG_UXTB = REG_EXT + iota<<8 177 REG_UXTH 178 REG_UXTW 179 REG_UXTX 180 REG_SXTB 181 REG_SXTH 182 REG_SXTW 183 REG_SXTX 184 ) 185 186 // Special registers, after subtracting obj.RBaseARM64, bit 12 indicates 187 // a special register and the low bits select the register. 188 const ( 189 REG_SPECIAL = obj.RBaseARM64 + 1<<12 + iota 190 REG_DAIF 191 REG_NZCV 192 REG_FPSR 193 REG_FPCR 194 REG_SPSR_EL1 195 REG_ELR_EL1 196 REG_SPSR_EL2 197 REG_ELR_EL2 198 REG_CurrentEL 199 REG_SP_EL0 200 REG_SPSel 201 REG_DAIFSet 202 REG_DAIFClr 203 ) 204 205 // Register assignments: 206 // 207 // compiler allocates R0 up as temps 208 // compiler allocates register variables R7-R25 209 // compiler allocates external registers R26 down 210 // 211 // compiler allocates register variables F7-F26 212 // compiler allocates external registers F26 down 213 const ( 214 REGMIN = REG_R7 // register variables allocated from here to REGMAX 215 REGRT1 = REG_R16 // ARM64 IP0, for external linker, runtime, duffzero and duffcopy 216 REGRT2 = REG_R17 // ARM64 IP1, for external linker, runtime, duffcopy 217 REGPR = REG_R18 // ARM64 platform register, unused in the Go toolchain 218 REGMAX = REG_R25 219 220 REGCTXT = REG_R26 // environment for closures 221 REGTMP = REG_R27 // reserved for liblink 222 REGG = REG_R28 // G 223 REGFP = REG_R29 // frame pointer, unused in the Go toolchain 224 REGLINK = REG_R30 225 226 // ARM64 uses R31 as both stack pointer and zero register, 227 // depending on the instruction. To differentiate RSP from ZR, 228 // we use a different numeric value for REGZERO and REGSP. 229 REGZERO = REG_R31 230 REGSP = REG_RSP 231 232 FREGRET = REG_F0 233 FREGMIN = REG_F7 // first register variable 234 FREGMAX = REG_F26 // last register variable for 7g only 235 FREGEXT = REG_F26 // first external register 236 FREGZERO = REG_F28 // both float and double 237 FREGHALF = REG_F29 // double 238 FREGONE = REG_F30 // double 239 FREGTWO = REG_F31 // double 240 ) 241 242 const ( 243 BIG = 2048 - 8 244 ) 245 246 const ( 247 /* mark flags */ 248 LABEL = 1 << iota 249 LEAF 250 FLOAT 251 BRANCH 252 LOAD 253 FCMP 254 SYNC 255 LIST 256 FOLL 257 NOSCHED 258 ) 259 260 const ( 261 C_NONE = iota 262 C_REG // R0..R30 263 C_RSP // R0..R30, RSP 264 C_FREG // F0..F31 265 C_VREG // V0..V31 266 C_PAIR // (Rn, Rm) 267 C_SHIFT // Rn<<2 268 C_EXTREG // Rn.UXTB<<3 269 C_SPR // REG_NZCV 270 C_COND // EQ, NE, etc 271 272 C_ZCON // $0 or ZR 273 C_ADDCON0 // 12-bit unsigned, unshifted 274 C_ADDCON // 12-bit unsigned, shifted left by 0 or 12 275 C_MOVCON // generated by a 16-bit constant, optionally inverted and/or shifted by multiple of 16 276 C_BITCON // bitfield and logical immediate masks 277 C_ABCON // could be C_ADDCON or C_BITCON 278 C_MBCON // could be C_MOVCON or C_BITCON 279 C_LCON // 32-bit constant 280 C_VCON // 64-bit constant 281 C_FCON // floating-point constant 282 C_VCONADDR // 64-bit memory address 283 284 C_AACON // ADDCON offset in auto constant $a(FP) 285 C_LACON // 32-bit offset in auto constant $a(FP) 286 C_AECON // ADDCON offset in extern constant $e(SB) 287 288 // TODO(aram): only one branch class should be enough 289 C_SBRA // for TYPE_BRANCH 290 C_LBRA 291 292 C_NPAUTO // -512 <= x < 0, 0 mod 8 293 C_NSAUTO // -256 <= x < 0 294 C_PSAUTO // 0 to 255 295 C_PPAUTO // 0 to 504, 0 mod 8 296 C_UAUTO4K // 0 to 4095 297 C_UAUTO8K // 0 to 8190, 0 mod 2 298 C_UAUTO16K // 0 to 16380, 0 mod 4 299 C_UAUTO32K // 0 to 32760, 0 mod 8 300 C_UAUTO64K // 0 to 65520, 0 mod 16 301 C_LAUTO // any other 32-bit constant 302 303 C_SEXT1 // 0 to 4095, direct 304 C_SEXT2 // 0 to 8190 305 C_SEXT4 // 0 to 16380 306 C_SEXT8 // 0 to 32760 307 C_SEXT16 // 0 to 65520 308 C_LEXT 309 310 // TODO(aram): s/AUTO/INDIR/ 311 C_ZOREG // 0(R) 312 C_NPOREG // mirror NPAUTO, etc 313 C_NSOREG 314 C_PSOREG 315 C_PPOREG 316 C_UOREG4K 317 C_UOREG8K 318 C_UOREG16K 319 C_UOREG32K 320 C_UOREG64K 321 C_LOREG 322 323 C_ADDR // TODO(aram): explain difference from C_VCONADDR 324 C_ROFF // register offset (including register extended) 325 326 C_GOK 327 C_TEXTSIZE 328 C_NCLASS // must be last 329 ) 330 331 const ( 332 C_XPRE = 1 << 6 // match arm.C_WBIT, so Prog.String know how to print it 333 C_XPOST = 1 << 5 // match arm.C_PBIT, so Prog.String know how to print it 334 ) 335 336 //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p arm64 337 338 const ( 339 AADC = obj.ABaseARM64 + obj.A_ARCHSPECIFIC + iota 340 AADCS 341 AADCSW 342 AADCW 343 AADD 344 AADDS 345 AADDSW 346 AADDW 347 AADR 348 AADRP 349 AAND 350 AANDS 351 AANDSW 352 AANDW 353 AASR 354 AASRW 355 AAT 356 ABFI 357 ABFIW 358 ABFM 359 ABFMW 360 ABFXIL 361 ABFXILW 362 ABIC 363 ABICS 364 ABICSW 365 ABICW 366 ABRK 367 ACBNZ 368 ACBNZW 369 ACBZ 370 ACBZW 371 ACCMN 372 ACCMNW 373 ACCMP 374 ACCMPW 375 ACINC 376 ACINCW 377 ACINV 378 ACINVW 379 ACLREX 380 ACLS 381 ACLSW 382 ACLZ 383 ACLZW 384 ACMN 385 ACMNW 386 ACMP 387 ACMPW 388 ACNEG 389 ACNEGW 390 ACRC32B 391 ACRC32CB 392 ACRC32CH 393 ACRC32CW 394 ACRC32CX 395 ACRC32H 396 ACRC32W 397 ACRC32X 398 ACSEL 399 ACSELW 400 ACSET 401 ACSETM 402 ACSETMW 403 ACSETW 404 ACSINC 405 ACSINCW 406 ACSINV 407 ACSINVW 408 ACSNEG 409 ACSNEGW 410 ADC 411 ADCPS1 412 ADCPS2 413 ADCPS3 414 ADMB 415 ADRPS 416 ADSB 417 AEON 418 AEONW 419 AEOR 420 AEORW 421 AERET 422 AEXTR 423 AEXTRW 424 AHINT 425 AHLT 426 AHVC 427 AIC 428 AISB 429 ALDAR 430 ALDARB 431 ALDARH 432 ALDARW 433 ALDAXP 434 ALDAXPW 435 ALDAXR 436 ALDAXRB 437 ALDAXRH 438 ALDAXRW 439 ALDP 440 ALDXR 441 ALDXRB 442 ALDXRH 443 ALDXRW 444 ALDXP 445 ALDXPW 446 ALSL 447 ALSLW 448 ALSR 449 ALSRW 450 AMADD 451 AMADDW 452 AMNEG 453 AMNEGW 454 AMOVK 455 AMOVKW 456 AMOVN 457 AMOVNW 458 AMOVZ 459 AMOVZW 460 AMRS 461 AMSR 462 AMSUB 463 AMSUBW 464 AMUL 465 AMULW 466 AMVN 467 AMVNW 468 ANEG 469 ANEGS 470 ANEGSW 471 ANEGW 472 ANGC 473 ANGCS 474 ANGCSW 475 ANGCW 476 AORN 477 AORNW 478 AORR 479 AORRW 480 APRFM 481 APRFUM 482 ARBIT 483 ARBITW 484 AREM 485 AREMW 486 AREV 487 AREV16 488 AREV16W 489 AREV32 490 AREVW 491 AROR 492 ARORW 493 ASBC 494 ASBCS 495 ASBCSW 496 ASBCW 497 ASBFIZ 498 ASBFIZW 499 ASBFM 500 ASBFMW 501 ASBFX 502 ASBFXW 503 ASDIV 504 ASDIVW 505 ASEV 506 ASEVL 507 ASMADDL 508 ASMC 509 ASMNEGL 510 ASMSUBL 511 ASMULH 512 ASMULL 513 ASTXR 514 ASTXRB 515 ASTXRH 516 ASTXP 517 ASTXPW 518 ASTXRW 519 ASTLP 520 ASTLPW 521 ASTLR 522 ASTLRB 523 ASTLRH 524 ASTLRW 525 ASTLXP 526 ASTLXPW 527 ASTLXR 528 ASTLXRB 529 ASTLXRH 530 ASTLXRW 531 ASTP 532 ASUB 533 ASUBS 534 ASUBSW 535 ASUBW 536 ASVC 537 ASXTB 538 ASXTBW 539 ASXTH 540 ASXTHW 541 ASXTW 542 ASYS 543 ASYSL 544 ATBNZ 545 ATBZ 546 ATLBI 547 ATST 548 ATSTW 549 AUBFIZ 550 AUBFIZW 551 AUBFM 552 AUBFMW 553 AUBFX 554 AUBFXW 555 AUDIV 556 AUDIVW 557 AUMADDL 558 AUMNEGL 559 AUMSUBL 560 AUMULH 561 AUMULL 562 AUREM 563 AUREMW 564 AUXTB 565 AUXTH 566 AUXTW 567 AUXTBW 568 AUXTHW 569 AWFE 570 AWFI 571 AYIELD 572 AMOVB 573 AMOVBU 574 AMOVH 575 AMOVHU 576 AMOVW 577 AMOVWU 578 AMOVD 579 AMOVNP 580 AMOVNPW 581 AMOVP 582 AMOVPD 583 AMOVPQ 584 AMOVPS 585 AMOVPSW 586 AMOVPW 587 ABEQ 588 ABNE 589 ABCS 590 ABHS 591 ABCC 592 ABLO 593 ABMI 594 ABPL 595 ABVS 596 ABVC 597 ABHI 598 ABLS 599 ABGE 600 ABLT 601 ABGT 602 ABLE 603 AFABSD 604 AFABSS 605 AFADDD 606 AFADDS 607 AFCCMPD 608 AFCCMPED 609 AFCCMPS 610 AFCCMPES 611 AFCMPD 612 AFCMPED 613 AFCMPES 614 AFCMPS 615 AFCVTSD 616 AFCVTDS 617 AFCVTZSD 618 AFCVTZSDW 619 AFCVTZSS 620 AFCVTZSSW 621 AFCVTZUD 622 AFCVTZUDW 623 AFCVTZUS 624 AFCVTZUSW 625 AFDIVD 626 AFDIVS 627 AFMOVD 628 AFMOVS 629 AFMULD 630 AFMULS 631 AFNEGD 632 AFNEGS 633 AFSQRTD 634 AFSQRTS 635 AFSUBD 636 AFSUBS 637 ASCVTFD 638 ASCVTFS 639 ASCVTFWD 640 ASCVTFWS 641 AUCVTFD 642 AUCVTFS 643 AUCVTFWD 644 AUCVTFWS 645 AHISTORY 646 ANAME 647 AWORD 648 ADYNT 649 AINIT 650 ABCASE 651 ACASE 652 ADWORD 653 ASIGNAME 654 AGOK 655 AEND 656 AFCSELS 657 AFCSELD 658 AFMAXS 659 AFMINS 660 AFMAXD 661 AFMIND 662 AFMAXNMS 663 AFMAXNMD 664 AFNMULS 665 AFNMULD 666 AFRINTNS 667 AFRINTND 668 AFRINTPS 669 AFRINTPD 670 AFRINTMS 671 AFRINTMD 672 AFRINTZS 673 AFRINTZD 674 AFRINTAS 675 AFRINTAD 676 AFRINTXS 677 AFRINTXD 678 AFRINTIS 679 AFRINTID 680 AFMADDS 681 AFMADDD 682 AFMSUBS 683 AFMSUBD 684 AFNMADDS 685 AFNMADDD 686 AFNMSUBS 687 AFNMSUBD 688 AFMINNMS 689 AFMINNMD 690 AFCVTDH 691 AFCVTHS 692 AFCVTHD 693 AFCVTSH 694 AAESD 695 AAESE 696 AAESIMC 697 AAESMC 698 ASHA1C 699 ASHA1H 700 ASHA1M 701 ASHA1P 702 ASHA1SU0 703 ASHA1SU1 704 ASHA256H 705 ASHA256H2 706 ASHA256SU0 707 ASHA256SU1 708 ALAST 709 AB = obj.AJMP 710 ABL = obj.ACALL 711 )