github.com/gernest/nezuko@v0.1.2/internal/obj/s390x/a.out.go (about) 1 // Based on github.com/gernest/nezuko/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/gernest/nezuko/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 ) 190 191 const ( // comments from func aclass in asmz.go 192 C_NONE = iota 193 C_REG // general-purpose register (64-bit) 194 C_FREG // floating-point register (64-bit) 195 C_VREG // vector register (128-bit) 196 C_AREG // access register (32-bit) 197 C_ZCON // constant == 0 198 C_SCON // 0 <= constant <= 0x7fff (positive int16) 199 C_UCON // constant & 0xffff == 0 (int16 or uint16) 200 C_ADDCON // 0 > constant >= -0x8000 (negative int16) 201 C_ANDCON // constant <= 0xffff 202 C_LCON // constant (int32 or uint32) 203 C_DCON // constant (int64 or uint64) 204 C_SACON // computed address, 16-bit displacement, possibly SP-relative 205 C_LACON // computed address, 32-bit displacement, possibly SP-relative 206 C_DACON // computed address, 64-bit displacment? 207 C_SBRA // short branch 208 C_LBRA // long branch 209 C_SAUTO // short auto 210 C_LAUTO // long auto 211 C_ZOREG // heap address, register-based, displacement == 0 212 C_SOREG // heap address, register-based, int16 displacement 213 C_LOREG // heap address, register-based, int32 displacement 214 C_TLS_LE // TLS - local exec model (for executables) 215 C_TLS_IE // TLS - initial exec model (for shared libraries loaded at program startup) 216 C_GOK // general address 217 C_ADDR // relocation for extern or static symbols (loads and stores) 218 C_SYMADDR // relocation for extern or static symbols (address taking) 219 C_GOTADDR // GOT slot for a symbol in -dynlink mode 220 C_TEXTSIZE // text size 221 C_ANY 222 C_NCLASS // must be the last 223 ) 224 225 const ( 226 // integer arithmetic 227 AADD = obj.ABaseS390X + obj.A_ARCHSPECIFIC + iota 228 AADDC 229 AADDE 230 AADDW 231 ADIVW 232 ADIVWU 233 ADIVD 234 ADIVDU 235 AMODW 236 AMODWU 237 AMODD 238 AMODDU 239 AMULLW 240 AMULLD 241 AMULHD 242 AMULHDU 243 ASUB 244 ASUBC 245 ASUBV 246 ASUBE 247 ASUBW 248 ANEG 249 ANEGW 250 251 // integer moves 252 AMOVWBR 253 AMOVB 254 AMOVBZ 255 AMOVH 256 AMOVHBR 257 AMOVHZ 258 AMOVW 259 AMOVWZ 260 AMOVD 261 AMOVDBR 262 263 // conditional moves 264 AMOVDEQ 265 AMOVDGE 266 AMOVDGT 267 AMOVDLE 268 AMOVDLT 269 AMOVDNE 270 271 // find leftmost one 272 AFLOGR 273 274 // population count 275 APOPCNT 276 277 // integer bitwise 278 AAND 279 AANDW 280 AOR 281 AORW 282 AXOR 283 AXORW 284 ASLW 285 ASLD 286 ASRW 287 ASRAW 288 ASRD 289 ASRAD 290 ARLL 291 ARLLG 292 293 // floating point 294 AFABS 295 AFADD 296 AFADDS 297 AFCMPO 298 AFCMPU 299 ACEBR 300 AFDIV 301 AFDIVS 302 AFMADD 303 AFMADDS 304 AFMOVD 305 AFMOVS 306 AFMSUB 307 AFMSUBS 308 AFMUL 309 AFMULS 310 AFNABS 311 AFNEG 312 AFNEGS 313 ALEDBR 314 ALDEBR 315 ALPDFR 316 ALNDFR 317 AFSUB 318 AFSUBS 319 AFSQRT 320 AFSQRTS 321 AFIEBR 322 AFIDBR 323 ACPSDR 324 ALTEBR 325 ALTDBR 326 ATCEB 327 ATCDB 328 329 // move from GPR to FPR and vice versa 330 ALDGR 331 ALGDR 332 333 // convert from int32/int64 to float/float64 334 ACEFBRA 335 ACDFBRA 336 ACEGBRA 337 ACDGBRA 338 339 // convert from float/float64 to int32/int64 340 ACFEBRA 341 ACFDBRA 342 ACGEBRA 343 ACGDBRA 344 345 // convert from uint32/uint64 to float/float64 346 ACELFBR 347 ACDLFBR 348 ACELGBR 349 ACDLGBR 350 351 // convert from float/float64 to uint32/uint64 352 ACLFEBR 353 ACLFDBR 354 ACLGEBR 355 ACLGDBR 356 357 // compare 358 ACMP 359 ACMPU 360 ACMPW 361 ACMPWU 362 363 // test under mask 364 ATMHH 365 ATMHL 366 ATMLH 367 ATMLL 368 369 // compare and swap 370 ACS 371 ACSG 372 373 // serialize 374 ASYNC 375 376 // branch 377 ABC 378 ABCL 379 ABEQ 380 ABGE 381 ABGT 382 ABLE 383 ABLT 384 ABLEU 385 ABLTU 386 ABNE 387 ABVC 388 ABVS 389 ASYSCALL 390 391 // compare and branch 392 ACMPBEQ 393 ACMPBGE 394 ACMPBGT 395 ACMPBLE 396 ACMPBLT 397 ACMPBNE 398 ACMPUBEQ 399 ACMPUBGE 400 ACMPUBGT 401 ACMPUBLE 402 ACMPUBLT 403 ACMPUBNE 404 405 // storage-and-storage 406 AMVC 407 ACLC 408 AXC 409 AOC 410 ANC 411 412 // load 413 AEXRL 414 ALARL 415 ALA 416 ALAY 417 418 // interlocked load and op 419 ALAA 420 ALAAG 421 ALAAL 422 ALAALG 423 ALAN 424 ALANG 425 ALAX 426 ALAXG 427 ALAO 428 ALAOG 429 430 // load/store multiple 431 ALMY 432 ALMG 433 ASTMY 434 ASTMG 435 436 // store clock 437 ASTCK 438 ASTCKC 439 ASTCKE 440 ASTCKF 441 442 // macros 443 ACLEAR 444 445 // vector 446 AVA 447 AVAB 448 AVAH 449 AVAF 450 AVAG 451 AVAQ 452 AVACC 453 AVACCB 454 AVACCH 455 AVACCF 456 AVACCG 457 AVACCQ 458 AVAC 459 AVACQ 460 AVACCC 461 AVACCCQ 462 AVN 463 AVNC 464 AVAVG 465 AVAVGB 466 AVAVGH 467 AVAVGF 468 AVAVGG 469 AVAVGL 470 AVAVGLB 471 AVAVGLH 472 AVAVGLF 473 AVAVGLG 474 AVCKSM 475 AVCEQ 476 AVCEQB 477 AVCEQH 478 AVCEQF 479 AVCEQG 480 AVCEQBS 481 AVCEQHS 482 AVCEQFS 483 AVCEQGS 484 AVCH 485 AVCHB 486 AVCHH 487 AVCHF 488 AVCHG 489 AVCHBS 490 AVCHHS 491 AVCHFS 492 AVCHGS 493 AVCHL 494 AVCHLB 495 AVCHLH 496 AVCHLF 497 AVCHLG 498 AVCHLBS 499 AVCHLHS 500 AVCHLFS 501 AVCHLGS 502 AVCLZ 503 AVCLZB 504 AVCLZH 505 AVCLZF 506 AVCLZG 507 AVCTZ 508 AVCTZB 509 AVCTZH 510 AVCTZF 511 AVCTZG 512 AVEC 513 AVECB 514 AVECH 515 AVECF 516 AVECG 517 AVECL 518 AVECLB 519 AVECLH 520 AVECLF 521 AVECLG 522 AVERIM 523 AVERIMB 524 AVERIMH 525 AVERIMF 526 AVERIMG 527 AVERLL 528 AVERLLB 529 AVERLLH 530 AVERLLF 531 AVERLLG 532 AVERLLV 533 AVERLLVB 534 AVERLLVH 535 AVERLLVF 536 AVERLLVG 537 AVESLV 538 AVESLVB 539 AVESLVH 540 AVESLVF 541 AVESLVG 542 AVESL 543 AVESLB 544 AVESLH 545 AVESLF 546 AVESLG 547 AVESRA 548 AVESRAB 549 AVESRAH 550 AVESRAF 551 AVESRAG 552 AVESRAV 553 AVESRAVB 554 AVESRAVH 555 AVESRAVF 556 AVESRAVG 557 AVESRL 558 AVESRLB 559 AVESRLH 560 AVESRLF 561 AVESRLG 562 AVESRLV 563 AVESRLVB 564 AVESRLVH 565 AVESRLVF 566 AVESRLVG 567 AVX 568 AVFAE 569 AVFAEB 570 AVFAEH 571 AVFAEF 572 AVFAEBS 573 AVFAEHS 574 AVFAEFS 575 AVFAEZB 576 AVFAEZH 577 AVFAEZF 578 AVFAEZBS 579 AVFAEZHS 580 AVFAEZFS 581 AVFEE 582 AVFEEB 583 AVFEEH 584 AVFEEF 585 AVFEEBS 586 AVFEEHS 587 AVFEEFS 588 AVFEEZB 589 AVFEEZH 590 AVFEEZF 591 AVFEEZBS 592 AVFEEZHS 593 AVFEEZFS 594 AVFENE 595 AVFENEB 596 AVFENEH 597 AVFENEF 598 AVFENEBS 599 AVFENEHS 600 AVFENEFS 601 AVFENEZB 602 AVFENEZH 603 AVFENEZF 604 AVFENEZBS 605 AVFENEZHS 606 AVFENEZFS 607 AVFA 608 AVFADB 609 AWFADB 610 AWFK 611 AWFKDB 612 AVFCE 613 AVFCEDB 614 AVFCEDBS 615 AWFCEDB 616 AWFCEDBS 617 AVFCH 618 AVFCHDB 619 AVFCHDBS 620 AWFCHDB 621 AWFCHDBS 622 AVFCHE 623 AVFCHEDB 624 AVFCHEDBS 625 AWFCHEDB 626 AWFCHEDBS 627 AWFC 628 AWFCDB 629 AVCDG 630 AVCDGB 631 AWCDGB 632 AVCDLG 633 AVCDLGB 634 AWCDLGB 635 AVCGD 636 AVCGDB 637 AWCGDB 638 AVCLGD 639 AVCLGDB 640 AWCLGDB 641 AVFD 642 AVFDDB 643 AWFDDB 644 AVLDE 645 AVLDEB 646 AWLDEB 647 AVLED 648 AVLEDB 649 AWLEDB 650 AVFM 651 AVFMDB 652 AWFMDB 653 AVFMA 654 AVFMADB 655 AWFMADB 656 AVFMS 657 AVFMSDB 658 AWFMSDB 659 AVFPSO 660 AVFPSODB 661 AWFPSODB 662 AVFLCDB 663 AWFLCDB 664 AVFLNDB 665 AWFLNDB 666 AVFLPDB 667 AWFLPDB 668 AVFSQ 669 AVFSQDB 670 AWFSQDB 671 AVFS 672 AVFSDB 673 AWFSDB 674 AVFTCI 675 AVFTCIDB 676 AWFTCIDB 677 AVGFM 678 AVGFMB 679 AVGFMH 680 AVGFMF 681 AVGFMG 682 AVGFMA 683 AVGFMAB 684 AVGFMAH 685 AVGFMAF 686 AVGFMAG 687 AVGEF 688 AVGEG 689 AVGBM 690 AVZERO 691 AVONE 692 AVGM 693 AVGMB 694 AVGMH 695 AVGMF 696 AVGMG 697 AVISTR 698 AVISTRB 699 AVISTRH 700 AVISTRF 701 AVISTRBS 702 AVISTRHS 703 AVISTRFS 704 AVL 705 AVLR 706 AVLREP 707 AVLREPB 708 AVLREPH 709 AVLREPF 710 AVLREPG 711 AVLC 712 AVLCB 713 AVLCH 714 AVLCF 715 AVLCG 716 AVLEH 717 AVLEF 718 AVLEG 719 AVLEB 720 AVLEIH 721 AVLEIF 722 AVLEIG 723 AVLEIB 724 AVFI 725 AVFIDB 726 AWFIDB 727 AVLGV 728 AVLGVB 729 AVLGVH 730 AVLGVF 731 AVLGVG 732 AVLLEZ 733 AVLLEZB 734 AVLLEZH 735 AVLLEZF 736 AVLLEZG 737 AVLM 738 AVLP 739 AVLPB 740 AVLPH 741 AVLPF 742 AVLPG 743 AVLBB 744 AVLVG 745 AVLVGB 746 AVLVGH 747 AVLVGF 748 AVLVGG 749 AVLVGP 750 AVLL 751 AVMX 752 AVMXB 753 AVMXH 754 AVMXF 755 AVMXG 756 AVMXL 757 AVMXLB 758 AVMXLH 759 AVMXLF 760 AVMXLG 761 AVMRH 762 AVMRHB 763 AVMRHH 764 AVMRHF 765 AVMRHG 766 AVMRL 767 AVMRLB 768 AVMRLH 769 AVMRLF 770 AVMRLG 771 AVMN 772 AVMNB 773 AVMNH 774 AVMNF 775 AVMNG 776 AVMNL 777 AVMNLB 778 AVMNLH 779 AVMNLF 780 AVMNLG 781 AVMAE 782 AVMAEB 783 AVMAEH 784 AVMAEF 785 AVMAH 786 AVMAHB 787 AVMAHH 788 AVMAHF 789 AVMALE 790 AVMALEB 791 AVMALEH 792 AVMALEF 793 AVMALH 794 AVMALHB 795 AVMALHH 796 AVMALHF 797 AVMALO 798 AVMALOB 799 AVMALOH 800 AVMALOF 801 AVMAL 802 AVMALB 803 AVMALHW 804 AVMALF 805 AVMAO 806 AVMAOB 807 AVMAOH 808 AVMAOF 809 AVME 810 AVMEB 811 AVMEH 812 AVMEF 813 AVMH 814 AVMHB 815 AVMHH 816 AVMHF 817 AVMLE 818 AVMLEB 819 AVMLEH 820 AVMLEF 821 AVMLH 822 AVMLHB 823 AVMLHH 824 AVMLHF 825 AVMLO 826 AVMLOB 827 AVMLOH 828 AVMLOF 829 AVML 830 AVMLB 831 AVMLHW 832 AVMLF 833 AVMO 834 AVMOB 835 AVMOH 836 AVMOF 837 AVNO 838 AVNOT 839 AVO 840 AVPK 841 AVPKH 842 AVPKF 843 AVPKG 844 AVPKLS 845 AVPKLSH 846 AVPKLSF 847 AVPKLSG 848 AVPKLSHS 849 AVPKLSFS 850 AVPKLSGS 851 AVPKS 852 AVPKSH 853 AVPKSF 854 AVPKSG 855 AVPKSHS 856 AVPKSFS 857 AVPKSGS 858 AVPERM 859 AVPDI 860 AVPOPCT 861 AVREP 862 AVREPB 863 AVREPH 864 AVREPF 865 AVREPG 866 AVREPI 867 AVREPIB 868 AVREPIH 869 AVREPIF 870 AVREPIG 871 AVSCEF 872 AVSCEG 873 AVSEL 874 AVSL 875 AVSLB 876 AVSLDB 877 AVSRA 878 AVSRAB 879 AVSRL 880 AVSRLB 881 AVSEG 882 AVSEGB 883 AVSEGH 884 AVSEGF 885 AVST 886 AVSTEH 887 AVSTEF 888 AVSTEG 889 AVSTEB 890 AVSTM 891 AVSTL 892 AVSTRC 893 AVSTRCB 894 AVSTRCH 895 AVSTRCF 896 AVSTRCBS 897 AVSTRCHS 898 AVSTRCFS 899 AVSTRCZB 900 AVSTRCZH 901 AVSTRCZF 902 AVSTRCZBS 903 AVSTRCZHS 904 AVSTRCZFS 905 AVS 906 AVSB 907 AVSH 908 AVSF 909 AVSG 910 AVSQ 911 AVSCBI 912 AVSCBIB 913 AVSCBIH 914 AVSCBIF 915 AVSCBIG 916 AVSCBIQ 917 AVSBCBI 918 AVSBCBIQ 919 AVSBI 920 AVSBIQ 921 AVSUMG 922 AVSUMGH 923 AVSUMGF 924 AVSUMQ 925 AVSUMQF 926 AVSUMQG 927 AVSUM 928 AVSUMB 929 AVSUMH 930 AVTM 931 AVUPH 932 AVUPHB 933 AVUPHH 934 AVUPHF 935 AVUPLH 936 AVUPLHB 937 AVUPLHH 938 AVUPLHF 939 AVUPLL 940 AVUPLLB 941 AVUPLLH 942 AVUPLLF 943 AVUPL 944 AVUPLB 945 AVUPLHW 946 AVUPLF 947 AVMSLG 948 AVMSLEG 949 AVMSLOG 950 AVMSLEOG 951 952 // binary 953 ABYTE 954 AWORD 955 ADWORD 956 957 // end marker 958 ALAST 959 960 // aliases 961 ABR = obj.AJMP 962 ABL = obj.ACALL 963 )