github.com/gagliardetto/golang-go@v0.0.0-20201020153340-53909ea70814/cmd/internal/obj/s390x/a.out.go (about) 1 // Based on cmd/internal/obj/ppc64/a.out.go. 2 // 3 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. 4 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) 5 // Portions Copyright © 1997-1999 Vita Nuova Limited 6 // Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com) 7 // Portions Copyright © 2004,2006 Bruce Ellis 8 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) 9 // Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others 10 // Portions Copyright © 2009 The Go Authors. All rights reserved. 11 // 12 // Permission is hereby granted, free of charge, to any person obtaining a copy 13 // of this software and associated documentation files (the "Software"), to deal 14 // in the Software without restriction, including without limitation the rights 15 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 // copies of the Software, and to permit persons to whom the Software is 17 // furnished to do so, subject to the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be included in 20 // all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 // THE SOFTWARE. 29 30 package s390x 31 32 import "github.com/gagliardetto/golang-go/cmd/internal/obj" 33 34 //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p s390x 35 36 const ( 37 NSNAME = 8 38 NSYM = 50 39 NREG = 16 // number of general purpose registers 40 NFREG = 16 // number of floating point registers 41 ) 42 43 const ( 44 // General purpose registers (GPRs). 45 REG_R0 = obj.RBaseS390X + 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 62 // Floating point registers (FPRs). 63 REG_F0 64 REG_F1 65 REG_F2 66 REG_F3 67 REG_F4 68 REG_F5 69 REG_F6 70 REG_F7 71 REG_F8 72 REG_F9 73 REG_F10 74 REG_F11 75 REG_F12 76 REG_F13 77 REG_F14 78 REG_F15 79 80 // Vector registers (VRs) - only available when the vector 81 // facility is installed. 82 // V0-V15 are aliases for F0-F15. 83 // We keep them in a separate space to make printing etc. easier 84 // If the code generator ever emits vector instructions it will 85 // need to take into account the aliasing. 86 REG_V0 87 REG_V1 88 REG_V2 89 REG_V3 90 REG_V4 91 REG_V5 92 REG_V6 93 REG_V7 94 REG_V8 95 REG_V9 96 REG_V10 97 REG_V11 98 REG_V12 99 REG_V13 100 REG_V14 101 REG_V15 102 REG_V16 103 REG_V17 104 REG_V18 105 REG_V19 106 REG_V20 107 REG_V21 108 REG_V22 109 REG_V23 110 REG_V24 111 REG_V25 112 REG_V26 113 REG_V27 114 REG_V28 115 REG_V29 116 REG_V30 117 REG_V31 118 119 // Access registers (ARs). 120 // The thread pointer is typically stored in the register pair 121 // AR0 and AR1. 122 REG_AR0 123 REG_AR1 124 REG_AR2 125 REG_AR3 126 REG_AR4 127 REG_AR5 128 REG_AR6 129 REG_AR7 130 REG_AR8 131 REG_AR9 132 REG_AR10 133 REG_AR11 134 REG_AR12 135 REG_AR13 136 REG_AR14 137 REG_AR15 138 139 REG_RESERVED // end of allocated registers 140 141 REGARG = -1 // -1 disables passing the first argument in register 142 REGRT1 = REG_R3 // used during zeroing of the stack - not reserved 143 REGRT2 = REG_R4 // used during zeroing of the stack - not reserved 144 REGTMP = REG_R10 // scratch register used in the assembler and linker 145 REGTMP2 = REG_R11 // scratch register used in the assembler and linker 146 REGCTXT = REG_R12 // context for closures 147 REGG = REG_R13 // G 148 REG_LR = REG_R14 // link register 149 REGSP = REG_R15 // stack pointer 150 ) 151 152 // LINUX for zSeries ELF Application Binary Interface Supplement 153 // https://refspecs.linuxfoundation.org/ELF/zSeries/lzsabi0_zSeries/x1472.html 154 var S390XDWARFRegisters = map[int16]int16{} 155 156 func init() { 157 // f assigns dwarfregisters[from:to by step] = (base):((to-from)/step+base) 158 f := func(from, step, to, base int16) { 159 for r := int16(from); r <= to; r += step { 160 S390XDWARFRegisters[r] = (r-from)/step + base 161 } 162 } 163 f(REG_R0, 1, REG_R15, 0) 164 165 f(REG_F0, 2, REG_F6, 16) 166 f(REG_F1, 2, REG_F7, 20) 167 f(REG_F8, 2, REG_F14, 24) 168 f(REG_F9, 2, REG_F15, 28) 169 170 f(REG_V0, 2, REG_V6, 16) // V0:15 aliased to F0:15 171 f(REG_V1, 2, REG_V7, 20) // TODO what about V16:31? 172 f(REG_V8, 2, REG_V14, 24) 173 f(REG_V9, 2, REG_V15, 28) 174 175 f(REG_AR0, 1, REG_AR15, 48) 176 } 177 178 const ( 179 BIG = 32768 - 8 180 DISP12 = 4096 181 DISP16 = 65536 182 DISP20 = 1048576 183 ) 184 185 const ( 186 // mark flags 187 LEAF = 1 << iota 188 BRANCH 189 USETMP // generated code of this Prog uses REGTMP 190 ) 191 192 const ( // comments from func aclass in asmz.go 193 C_NONE = iota 194 C_REG // general-purpose register (64-bit) 195 C_FREG // floating-point register (64-bit) 196 C_VREG // vector register (128-bit) 197 C_AREG // access register (32-bit) 198 C_ZCON // constant == 0 199 C_SCON // 0 <= constant <= 0x7fff (positive int16) 200 C_UCON // constant & 0xffff == 0 (int16 or uint16) 201 C_ADDCON // 0 > constant >= -0x8000 (negative int16) 202 C_ANDCON // constant <= 0xffff 203 C_LCON // constant (int32 or uint32) 204 C_DCON // constant (int64 or uint64) 205 C_SACON // computed address, 16-bit displacement, possibly SP-relative 206 C_LACON // computed address, 32-bit displacement, possibly SP-relative 207 C_DACON // computed address, 64-bit displacment? 208 C_SBRA // short branch 209 C_LBRA // long branch 210 C_SAUTO // short auto 211 C_LAUTO // long auto 212 C_ZOREG // heap address, register-based, displacement == 0 213 C_SOREG // heap address, register-based, int16 displacement 214 C_LOREG // heap address, register-based, int32 displacement 215 C_TLS_LE // TLS - local exec model (for executables) 216 C_TLS_IE // TLS - initial exec model (for shared libraries loaded at program startup) 217 C_GOK // general address 218 C_ADDR // relocation for extern or static symbols (loads and stores) 219 C_SYMADDR // relocation for extern or static symbols (address taking) 220 C_GOTADDR // GOT slot for a symbol in -dynlink mode 221 C_TEXTSIZE // text size 222 C_ANY 223 C_NCLASS // must be the last 224 ) 225 226 const ( 227 // integer arithmetic 228 AADD = obj.ABaseS390X + obj.A_ARCHSPECIFIC + iota 229 AADDC 230 AADDE 231 AADDW 232 ADIVW 233 ADIVWU 234 ADIVD 235 ADIVDU 236 AMODW 237 AMODWU 238 AMODD 239 AMODDU 240 AMULLW 241 AMULLD 242 AMULHD 243 AMULHDU 244 AMLGR 245 ASUB 246 ASUBC 247 ASUBV 248 ASUBE 249 ASUBW 250 ANEG 251 ANEGW 252 253 // integer moves 254 AMOVWBR 255 AMOVB 256 AMOVBZ 257 AMOVH 258 AMOVHBR 259 AMOVHZ 260 AMOVW 261 AMOVWZ 262 AMOVD 263 AMOVDBR 264 265 // conditional moves 266 AMOVDEQ 267 AMOVDGE 268 AMOVDGT 269 AMOVDLE 270 AMOVDLT 271 AMOVDNE 272 ALOCR 273 ALOCGR 274 275 // find leftmost one 276 AFLOGR 277 278 // population count 279 APOPCNT 280 281 // integer bitwise 282 AAND 283 AANDW 284 AOR 285 AORW 286 AXOR 287 AXORW 288 ASLW 289 ASLD 290 ASRW 291 ASRAW 292 ASRD 293 ASRAD 294 ARLL 295 ARLLG 296 ARNSBG 297 ARXSBG 298 AROSBG 299 ARNSBGT 300 ARXSBGT 301 AROSBGT 302 ARISBG 303 ARISBGN 304 ARISBGZ 305 ARISBGNZ 306 ARISBHG 307 ARISBLG 308 ARISBHGZ 309 ARISBLGZ 310 311 // floating point 312 AFABS 313 AFADD 314 AFADDS 315 AFCMPO 316 AFCMPU 317 ACEBR 318 AFDIV 319 AFDIVS 320 AFMADD 321 AFMADDS 322 AFMOVD 323 AFMOVS 324 AFMSUB 325 AFMSUBS 326 AFMUL 327 AFMULS 328 AFNABS 329 AFNEG 330 AFNEGS 331 ALEDBR 332 ALDEBR 333 ALPDFR 334 ALNDFR 335 AFSUB 336 AFSUBS 337 AFSQRT 338 AFSQRTS 339 AFIEBR 340 AFIDBR 341 ACPSDR 342 ALTEBR 343 ALTDBR 344 ATCEB 345 ATCDB 346 347 // move from GPR to FPR and vice versa 348 ALDGR 349 ALGDR 350 351 // convert from int32/int64 to float/float64 352 ACEFBRA 353 ACDFBRA 354 ACEGBRA 355 ACDGBRA 356 357 // convert from float/float64 to int32/int64 358 ACFEBRA 359 ACFDBRA 360 ACGEBRA 361 ACGDBRA 362 363 // convert from uint32/uint64 to float/float64 364 ACELFBR 365 ACDLFBR 366 ACELGBR 367 ACDLGBR 368 369 // convert from float/float64 to uint32/uint64 370 ACLFEBR 371 ACLFDBR 372 ACLGEBR 373 ACLGDBR 374 375 // compare 376 ACMP 377 ACMPU 378 ACMPW 379 ACMPWU 380 381 // test under mask 382 ATMHH 383 ATMHL 384 ATMLH 385 ATMLL 386 387 // insert program mask 388 AIPM 389 390 // set program mask 391 ASPM 392 393 // compare and swap 394 ACS 395 ACSG 396 397 // serialize 398 ASYNC 399 400 // branch 401 ABC 402 ABCL 403 ABRC 404 ABEQ 405 ABGE 406 ABGT 407 ABLE 408 ABLT 409 ABLEU 410 ABLTU 411 ABNE 412 ABVC 413 ABVS 414 ASYSCALL 415 416 // branch on count 417 ABRCT 418 ABRCTG 419 420 // compare and branch 421 ACRJ 422 ACGRJ 423 ACLRJ 424 ACLGRJ 425 ACIJ 426 ACGIJ 427 ACLIJ 428 ACLGIJ 429 ACMPBEQ 430 ACMPBGE 431 ACMPBGT 432 ACMPBLE 433 ACMPBLT 434 ACMPBNE 435 ACMPUBEQ 436 ACMPUBGE 437 ACMPUBGT 438 ACMPUBLE 439 ACMPUBLT 440 ACMPUBNE 441 442 // storage-and-storage 443 AMVC 444 ACLC 445 AXC 446 AOC 447 ANC 448 449 // load 450 AEXRL 451 ALARL 452 ALA 453 ALAY 454 455 // interlocked load and op 456 ALAA 457 ALAAG 458 ALAAL 459 ALAALG 460 ALAN 461 ALANG 462 ALAX 463 ALAXG 464 ALAO 465 ALAOG 466 467 // load/store multiple 468 ALMY 469 ALMG 470 ASTMY 471 ASTMG 472 473 // store clock 474 ASTCK 475 ASTCKC 476 ASTCKE 477 ASTCKF 478 479 // macros 480 ACLEAR 481 482 // vector 483 AVA 484 AVAB 485 AVAH 486 AVAF 487 AVAG 488 AVAQ 489 AVACC 490 AVACCB 491 AVACCH 492 AVACCF 493 AVACCG 494 AVACCQ 495 AVAC 496 AVACQ 497 AVACCC 498 AVACCCQ 499 AVN 500 AVNC 501 AVAVG 502 AVAVGB 503 AVAVGH 504 AVAVGF 505 AVAVGG 506 AVAVGL 507 AVAVGLB 508 AVAVGLH 509 AVAVGLF 510 AVAVGLG 511 AVCKSM 512 AVCEQ 513 AVCEQB 514 AVCEQH 515 AVCEQF 516 AVCEQG 517 AVCEQBS 518 AVCEQHS 519 AVCEQFS 520 AVCEQGS 521 AVCH 522 AVCHB 523 AVCHH 524 AVCHF 525 AVCHG 526 AVCHBS 527 AVCHHS 528 AVCHFS 529 AVCHGS 530 AVCHL 531 AVCHLB 532 AVCHLH 533 AVCHLF 534 AVCHLG 535 AVCHLBS 536 AVCHLHS 537 AVCHLFS 538 AVCHLGS 539 AVCLZ 540 AVCLZB 541 AVCLZH 542 AVCLZF 543 AVCLZG 544 AVCTZ 545 AVCTZB 546 AVCTZH 547 AVCTZF 548 AVCTZG 549 AVEC 550 AVECB 551 AVECH 552 AVECF 553 AVECG 554 AVECL 555 AVECLB 556 AVECLH 557 AVECLF 558 AVECLG 559 AVERIM 560 AVERIMB 561 AVERIMH 562 AVERIMF 563 AVERIMG 564 AVERLL 565 AVERLLB 566 AVERLLH 567 AVERLLF 568 AVERLLG 569 AVERLLV 570 AVERLLVB 571 AVERLLVH 572 AVERLLVF 573 AVERLLVG 574 AVESLV 575 AVESLVB 576 AVESLVH 577 AVESLVF 578 AVESLVG 579 AVESL 580 AVESLB 581 AVESLH 582 AVESLF 583 AVESLG 584 AVESRA 585 AVESRAB 586 AVESRAH 587 AVESRAF 588 AVESRAG 589 AVESRAV 590 AVESRAVB 591 AVESRAVH 592 AVESRAVF 593 AVESRAVG 594 AVESRL 595 AVESRLB 596 AVESRLH 597 AVESRLF 598 AVESRLG 599 AVESRLV 600 AVESRLVB 601 AVESRLVH 602 AVESRLVF 603 AVESRLVG 604 AVX 605 AVFAE 606 AVFAEB 607 AVFAEH 608 AVFAEF 609 AVFAEBS 610 AVFAEHS 611 AVFAEFS 612 AVFAEZB 613 AVFAEZH 614 AVFAEZF 615 AVFAEZBS 616 AVFAEZHS 617 AVFAEZFS 618 AVFEE 619 AVFEEB 620 AVFEEH 621 AVFEEF 622 AVFEEBS 623 AVFEEHS 624 AVFEEFS 625 AVFEEZB 626 AVFEEZH 627 AVFEEZF 628 AVFEEZBS 629 AVFEEZHS 630 AVFEEZFS 631 AVFENE 632 AVFENEB 633 AVFENEH 634 AVFENEF 635 AVFENEBS 636 AVFENEHS 637 AVFENEFS 638 AVFENEZB 639 AVFENEZH 640 AVFENEZF 641 AVFENEZBS 642 AVFENEZHS 643 AVFENEZFS 644 AVFA 645 AVFADB 646 AWFADB 647 AWFK 648 AWFKDB 649 AVFCE 650 AVFCEDB 651 AVFCEDBS 652 AWFCEDB 653 AWFCEDBS 654 AVFCH 655 AVFCHDB 656 AVFCHDBS 657 AWFCHDB 658 AWFCHDBS 659 AVFCHE 660 AVFCHEDB 661 AVFCHEDBS 662 AWFCHEDB 663 AWFCHEDBS 664 AWFC 665 AWFCDB 666 AVCDG 667 AVCDGB 668 AWCDGB 669 AVCDLG 670 AVCDLGB 671 AWCDLGB 672 AVCGD 673 AVCGDB 674 AWCGDB 675 AVCLGD 676 AVCLGDB 677 AWCLGDB 678 AVFD 679 AVFDDB 680 AWFDDB 681 AVLDE 682 AVLDEB 683 AWLDEB 684 AVLED 685 AVLEDB 686 AWLEDB 687 AVFM 688 AVFMDB 689 AWFMDB 690 AVFMA 691 AVFMADB 692 AWFMADB 693 AVFMS 694 AVFMSDB 695 AWFMSDB 696 AVFPSO 697 AVFPSODB 698 AWFPSODB 699 AVFLCDB 700 AWFLCDB 701 AVFLNDB 702 AWFLNDB 703 AVFLPDB 704 AWFLPDB 705 AVFSQ 706 AVFSQDB 707 AWFSQDB 708 AVFS 709 AVFSDB 710 AWFSDB 711 AVFTCI 712 AVFTCIDB 713 AWFTCIDB 714 AVGFM 715 AVGFMB 716 AVGFMH 717 AVGFMF 718 AVGFMG 719 AVGFMA 720 AVGFMAB 721 AVGFMAH 722 AVGFMAF 723 AVGFMAG 724 AVGEF 725 AVGEG 726 AVGBM 727 AVZERO 728 AVONE 729 AVGM 730 AVGMB 731 AVGMH 732 AVGMF 733 AVGMG 734 AVISTR 735 AVISTRB 736 AVISTRH 737 AVISTRF 738 AVISTRBS 739 AVISTRHS 740 AVISTRFS 741 AVL 742 AVLR 743 AVLREP 744 AVLREPB 745 AVLREPH 746 AVLREPF 747 AVLREPG 748 AVLC 749 AVLCB 750 AVLCH 751 AVLCF 752 AVLCG 753 AVLEH 754 AVLEF 755 AVLEG 756 AVLEB 757 AVLEIH 758 AVLEIF 759 AVLEIG 760 AVLEIB 761 AVFI 762 AVFIDB 763 AWFIDB 764 AVLGV 765 AVLGVB 766 AVLGVH 767 AVLGVF 768 AVLGVG 769 AVLLEZ 770 AVLLEZB 771 AVLLEZH 772 AVLLEZF 773 AVLLEZG 774 AVLM 775 AVLP 776 AVLPB 777 AVLPH 778 AVLPF 779 AVLPG 780 AVLBB 781 AVLVG 782 AVLVGB 783 AVLVGH 784 AVLVGF 785 AVLVGG 786 AVLVGP 787 AVLL 788 AVMX 789 AVMXB 790 AVMXH 791 AVMXF 792 AVMXG 793 AVMXL 794 AVMXLB 795 AVMXLH 796 AVMXLF 797 AVMXLG 798 AVMRH 799 AVMRHB 800 AVMRHH 801 AVMRHF 802 AVMRHG 803 AVMRL 804 AVMRLB 805 AVMRLH 806 AVMRLF 807 AVMRLG 808 AVMN 809 AVMNB 810 AVMNH 811 AVMNF 812 AVMNG 813 AVMNL 814 AVMNLB 815 AVMNLH 816 AVMNLF 817 AVMNLG 818 AVMAE 819 AVMAEB 820 AVMAEH 821 AVMAEF 822 AVMAH 823 AVMAHB 824 AVMAHH 825 AVMAHF 826 AVMALE 827 AVMALEB 828 AVMALEH 829 AVMALEF 830 AVMALH 831 AVMALHB 832 AVMALHH 833 AVMALHF 834 AVMALO 835 AVMALOB 836 AVMALOH 837 AVMALOF 838 AVMAL 839 AVMALB 840 AVMALHW 841 AVMALF 842 AVMAO 843 AVMAOB 844 AVMAOH 845 AVMAOF 846 AVME 847 AVMEB 848 AVMEH 849 AVMEF 850 AVMH 851 AVMHB 852 AVMHH 853 AVMHF 854 AVMLE 855 AVMLEB 856 AVMLEH 857 AVMLEF 858 AVMLH 859 AVMLHB 860 AVMLHH 861 AVMLHF 862 AVMLO 863 AVMLOB 864 AVMLOH 865 AVMLOF 866 AVML 867 AVMLB 868 AVMLHW 869 AVMLF 870 AVMO 871 AVMOB 872 AVMOH 873 AVMOF 874 AVNO 875 AVNOT 876 AVO 877 AVPK 878 AVPKH 879 AVPKF 880 AVPKG 881 AVPKLS 882 AVPKLSH 883 AVPKLSF 884 AVPKLSG 885 AVPKLSHS 886 AVPKLSFS 887 AVPKLSGS 888 AVPKS 889 AVPKSH 890 AVPKSF 891 AVPKSG 892 AVPKSHS 893 AVPKSFS 894 AVPKSGS 895 AVPERM 896 AVPDI 897 AVPOPCT 898 AVREP 899 AVREPB 900 AVREPH 901 AVREPF 902 AVREPG 903 AVREPI 904 AVREPIB 905 AVREPIH 906 AVREPIF 907 AVREPIG 908 AVSCEF 909 AVSCEG 910 AVSEL 911 AVSL 912 AVSLB 913 AVSLDB 914 AVSRA 915 AVSRAB 916 AVSRL 917 AVSRLB 918 AVSEG 919 AVSEGB 920 AVSEGH 921 AVSEGF 922 AVST 923 AVSTEH 924 AVSTEF 925 AVSTEG 926 AVSTEB 927 AVSTM 928 AVSTL 929 AVSTRC 930 AVSTRCB 931 AVSTRCH 932 AVSTRCF 933 AVSTRCBS 934 AVSTRCHS 935 AVSTRCFS 936 AVSTRCZB 937 AVSTRCZH 938 AVSTRCZF 939 AVSTRCZBS 940 AVSTRCZHS 941 AVSTRCZFS 942 AVS 943 AVSB 944 AVSH 945 AVSF 946 AVSG 947 AVSQ 948 AVSCBI 949 AVSCBIB 950 AVSCBIH 951 AVSCBIF 952 AVSCBIG 953 AVSCBIQ 954 AVSBCBI 955 AVSBCBIQ 956 AVSBI 957 AVSBIQ 958 AVSUMG 959 AVSUMGH 960 AVSUMGF 961 AVSUMQ 962 AVSUMQF 963 AVSUMQG 964 AVSUM 965 AVSUMB 966 AVSUMH 967 AVTM 968 AVUPH 969 AVUPHB 970 AVUPHH 971 AVUPHF 972 AVUPLH 973 AVUPLHB 974 AVUPLHH 975 AVUPLHF 976 AVUPLL 977 AVUPLLB 978 AVUPLLH 979 AVUPLLF 980 AVUPL 981 AVUPLB 982 AVUPLHW 983 AVUPLF 984 AVMSLG 985 AVMSLEG 986 AVMSLOG 987 AVMSLEOG 988 989 ANOPH // NOP 990 991 // binary 992 ABYTE 993 AWORD 994 ADWORD 995 996 // end marker 997 ALAST 998 999 // aliases 1000 ABR = obj.AJMP 1001 ABL = obj.ACALL 1002 )