github.com/q45/go@v0.0.0-20151101211701-a4fb8c13db3f/src/cmd/internal/obj/ppc64/a.out.go (about)

     1  // cmd/9c/9.out.h from Vita Nuova.
     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 ppc64
    31  
    32  import "cmd/internal/obj"
    33  
    34  //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p ppc64
    35  
    36  /*
    37   * powerpc 64
    38   */
    39  const (
    40  	NSNAME = 8
    41  	NSYM   = 50
    42  	NREG   = 32 /* number of general registers */
    43  	NFREG  = 32 /* number of floating point registers */
    44  )
    45  
    46  const (
    47  	REG_R0 = obj.RBasePPC64 + iota
    48  	REG_R1
    49  	REG_R2
    50  	REG_R3
    51  	REG_R4
    52  	REG_R5
    53  	REG_R6
    54  	REG_R7
    55  	REG_R8
    56  	REG_R9
    57  	REG_R10
    58  	REG_R11
    59  	REG_R12
    60  	REG_R13
    61  	REG_R14
    62  	REG_R15
    63  	REG_R16
    64  	REG_R17
    65  	REG_R18
    66  	REG_R19
    67  	REG_R20
    68  	REG_R21
    69  	REG_R22
    70  	REG_R23
    71  	REG_R24
    72  	REG_R25
    73  	REG_R26
    74  	REG_R27
    75  	REG_R28
    76  	REG_R29
    77  	REG_R30
    78  	REG_R31
    79  
    80  	REG_F0
    81  	REG_F1
    82  	REG_F2
    83  	REG_F3
    84  	REG_F4
    85  	REG_F5
    86  	REG_F6
    87  	REG_F7
    88  	REG_F8
    89  	REG_F9
    90  	REG_F10
    91  	REG_F11
    92  	REG_F12
    93  	REG_F13
    94  	REG_F14
    95  	REG_F15
    96  	REG_F16
    97  	REG_F17
    98  	REG_F18
    99  	REG_F19
   100  	REG_F20
   101  	REG_F21
   102  	REG_F22
   103  	REG_F23
   104  	REG_F24
   105  	REG_F25
   106  	REG_F26
   107  	REG_F27
   108  	REG_F28
   109  	REG_F29
   110  	REG_F30
   111  	REG_F31
   112  
   113  	REG_CR0
   114  	REG_CR1
   115  	REG_CR2
   116  	REG_CR3
   117  	REG_CR4
   118  	REG_CR5
   119  	REG_CR6
   120  	REG_CR7
   121  
   122  	REG_MSR
   123  	REG_FPSCR
   124  	REG_CR
   125  
   126  	REG_SPECIAL = REG_CR0
   127  
   128  	REG_SPR0 = obj.RBasePPC64 + 1024 // first of 1024 registers
   129  	REG_DCR0 = obj.RBasePPC64 + 2048 // first of 1024 registers
   130  
   131  	REG_XER = REG_SPR0 + 1
   132  	REG_LR  = REG_SPR0 + 8
   133  	REG_CTR = REG_SPR0 + 9
   134  
   135  	REGZERO  = REG_R0 /* set to zero */
   136  	REGSP    = REG_R1
   137  	REGSB    = REG_R2
   138  	REGRET   = REG_R3
   139  	REGARG   = -1      /* -1 disables passing the first argument in register */
   140  	REGRT1   = REG_R3  /* reserved for runtime, duffzero and duffcopy */
   141  	REGRT2   = REG_R4  /* reserved for runtime, duffcopy */
   142  	REGMIN   = REG_R7  /* register variables allocated from here to REGMAX */
   143  	REGCTXT  = REG_R11 /* context for closures */
   144  	REGTLS   = REG_R13 /* C ABI TLS base pointer */
   145  	REGMAX   = REG_R27
   146  	REGEXT   = REG_R30 /* external registers allocated from here down */
   147  	REGG     = REG_R30 /* G */
   148  	REGTMP   = REG_R31 /* used by the linker */
   149  	FREGRET  = REG_F0
   150  	FREGMIN  = REG_F17 /* first register variable */
   151  	FREGMAX  = REG_F26 /* last register variable for 9g only */
   152  	FREGEXT  = REG_F26 /* first external register */
   153  	FREGCVI  = REG_F27 /* floating conversion constant */
   154  	FREGZERO = REG_F28 /* both float and double */
   155  	FREGHALF = REG_F29 /* double */
   156  	FREGONE  = REG_F30 /* double */
   157  	FREGTWO  = REG_F31 /* double */
   158  )
   159  
   160  /*
   161   * GENERAL:
   162   *
   163   * compiler allocates R3 up as temps
   164   * compiler allocates register variables R7-R27
   165   * compiler allocates external registers R30 down
   166   *
   167   * compiler allocates register variables F17-F26
   168   * compiler allocates external registers F26 down
   169   */
   170  const (
   171  	BIG = 32768 - 8
   172  )
   173  
   174  const (
   175  	/* mark flags */
   176  	LABEL   = 1 << 0
   177  	LEAF    = 1 << 1
   178  	FLOAT   = 1 << 2
   179  	BRANCH  = 1 << 3
   180  	LOAD    = 1 << 4
   181  	FCMP    = 1 << 5
   182  	SYNC    = 1 << 6
   183  	LIST    = 1 << 7
   184  	FOLL    = 1 << 8
   185  	NOSCHED = 1 << 9
   186  )
   187  
   188  const (
   189  	C_NONE = iota
   190  	C_REG
   191  	C_FREG
   192  	C_CREG
   193  	C_SPR /* special processor register */
   194  	C_ZCON
   195  	C_SCON   /* 16 bit signed */
   196  	C_UCON   /* 32 bit signed, low 16 bits 0 */
   197  	C_ADDCON /* -0x8000 <= v < 0 */
   198  	C_ANDCON /* 0 < v <= 0xFFFF */
   199  	C_LCON   /* other 32 */
   200  	C_DCON   /* other 64 (could subdivide further) */
   201  	C_SACON  /* $n(REG) where n <= int16 */
   202  	C_SECON
   203  	C_LACON /* $n(REG) where int16 < n <= int32 */
   204  	C_LECON
   205  	C_DACON /* $n(REG) where int32 < n */
   206  	C_SBRA
   207  	C_LBRA
   208  	C_SAUTO
   209  	C_LAUTO
   210  	C_SEXT
   211  	C_LEXT
   212  	C_ZOREG
   213  	C_SOREG
   214  	C_LOREG
   215  	C_FPSCR
   216  	C_MSR
   217  	C_XER
   218  	C_LR
   219  	C_CTR
   220  	C_ANY
   221  	C_GOK
   222  	C_ADDR
   223  	C_TLS_LE
   224  	C_TEXTSIZE
   225  
   226  	C_NCLASS /* must be the last */
   227  )
   228  
   229  const (
   230  	AADD = obj.ABasePPC64 + obj.A_ARCHSPECIFIC + iota
   231  	AADDCC
   232  	AADDV
   233  	AADDVCC
   234  	AADDC
   235  	AADDCCC
   236  	AADDCV
   237  	AADDCVCC
   238  	AADDME
   239  	AADDMECC
   240  	AADDMEVCC
   241  	AADDMEV
   242  	AADDE
   243  	AADDECC
   244  	AADDEVCC
   245  	AADDEV
   246  	AADDZE
   247  	AADDZECC
   248  	AADDZEVCC
   249  	AADDZEV
   250  	AAND
   251  	AANDCC
   252  	AANDN
   253  	AANDNCC
   254  	ABC
   255  	ABCL
   256  	ABEQ
   257  	ABGE
   258  	ABGT
   259  	ABLE
   260  	ABLT
   261  	ABNE
   262  	ABVC
   263  	ABVS
   264  	ACMP
   265  	ACMPU
   266  	ACNTLZW
   267  	ACNTLZWCC
   268  	ACRAND
   269  	ACRANDN
   270  	ACREQV
   271  	ACRNAND
   272  	ACRNOR
   273  	ACROR
   274  	ACRORN
   275  	ACRXOR
   276  	ADIVW
   277  	ADIVWCC
   278  	ADIVWVCC
   279  	ADIVWV
   280  	ADIVWU
   281  	ADIVWUCC
   282  	ADIVWUVCC
   283  	ADIVWUV
   284  	AEQV
   285  	AEQVCC
   286  	AEXTSB
   287  	AEXTSBCC
   288  	AEXTSH
   289  	AEXTSHCC
   290  	AFABS
   291  	AFABSCC
   292  	AFADD
   293  	AFADDCC
   294  	AFADDS
   295  	AFADDSCC
   296  	AFCMPO
   297  	AFCMPU
   298  	AFCTIW
   299  	AFCTIWCC
   300  	AFCTIWZ
   301  	AFCTIWZCC
   302  	AFDIV
   303  	AFDIVCC
   304  	AFDIVS
   305  	AFDIVSCC
   306  	AFMADD
   307  	AFMADDCC
   308  	AFMADDS
   309  	AFMADDSCC
   310  	AFMOVD
   311  	AFMOVDCC
   312  	AFMOVDU
   313  	AFMOVS
   314  	AFMOVSU
   315  	AFMSUB
   316  	AFMSUBCC
   317  	AFMSUBS
   318  	AFMSUBSCC
   319  	AFMUL
   320  	AFMULCC
   321  	AFMULS
   322  	AFMULSCC
   323  	AFNABS
   324  	AFNABSCC
   325  	AFNEG
   326  	AFNEGCC
   327  	AFNMADD
   328  	AFNMADDCC
   329  	AFNMADDS
   330  	AFNMADDSCC
   331  	AFNMSUB
   332  	AFNMSUBCC
   333  	AFNMSUBS
   334  	AFNMSUBSCC
   335  	AFRSP
   336  	AFRSPCC
   337  	AFSUB
   338  	AFSUBCC
   339  	AFSUBS
   340  	AFSUBSCC
   341  	AMOVMW
   342  	ALSW
   343  	ALWAR
   344  	AMOVWBR
   345  	AMOVB
   346  	AMOVBU
   347  	AMOVBZ
   348  	AMOVBZU
   349  	AMOVH
   350  	AMOVHBR
   351  	AMOVHU
   352  	AMOVHZ
   353  	AMOVHZU
   354  	AMOVW
   355  	AMOVWU
   356  	AMOVFL
   357  	AMOVCRFS
   358  	AMTFSB0
   359  	AMTFSB0CC
   360  	AMTFSB1
   361  	AMTFSB1CC
   362  	AMULHW
   363  	AMULHWCC
   364  	AMULHWU
   365  	AMULHWUCC
   366  	AMULLW
   367  	AMULLWCC
   368  	AMULLWVCC
   369  	AMULLWV
   370  	ANAND
   371  	ANANDCC
   372  	ANEG
   373  	ANEGCC
   374  	ANEGVCC
   375  	ANEGV
   376  	ANOR
   377  	ANORCC
   378  	AOR
   379  	AORCC
   380  	AORN
   381  	AORNCC
   382  	AREM
   383  	AREMCC
   384  	AREMV
   385  	AREMVCC
   386  	AREMU
   387  	AREMUCC
   388  	AREMUV
   389  	AREMUVCC
   390  	ARFI
   391  	ARLWMI
   392  	ARLWMICC
   393  	ARLWNM
   394  	ARLWNMCC
   395  	ASLW
   396  	ASLWCC
   397  	ASRW
   398  	ASRAW
   399  	ASRAWCC
   400  	ASRWCC
   401  	ASTSW
   402  	ASTWCCC
   403  	ASUB
   404  	ASUBCC
   405  	ASUBVCC
   406  	ASUBC
   407  	ASUBCCC
   408  	ASUBCV
   409  	ASUBCVCC
   410  	ASUBME
   411  	ASUBMECC
   412  	ASUBMEVCC
   413  	ASUBMEV
   414  	ASUBV
   415  	ASUBE
   416  	ASUBECC
   417  	ASUBEV
   418  	ASUBEVCC
   419  	ASUBZE
   420  	ASUBZECC
   421  	ASUBZEVCC
   422  	ASUBZEV
   423  	ASYNC
   424  	AXOR
   425  	AXORCC
   426  
   427  	ADCBF
   428  	ADCBI
   429  	ADCBST
   430  	ADCBT
   431  	ADCBTST
   432  	ADCBZ
   433  	AECIWX
   434  	AECOWX
   435  	AEIEIO
   436  	AICBI
   437  	AISYNC
   438  	APTESYNC
   439  	ATLBIE
   440  	ATLBIEL
   441  	ATLBSYNC
   442  	ATW
   443  
   444  	ASYSCALL
   445  	AWORD
   446  
   447  	ARFCI
   448  
   449  	/* optional on 32-bit */
   450  	AFRES
   451  	AFRESCC
   452  	AFRSQRTE
   453  	AFRSQRTECC
   454  	AFSEL
   455  	AFSELCC
   456  	AFSQRT
   457  	AFSQRTCC
   458  	AFSQRTS
   459  	AFSQRTSCC
   460  
   461  	/* 64-bit */
   462  
   463  	ACNTLZD
   464  	ACNTLZDCC
   465  	ACMPW /* CMP with L=0 */
   466  	ACMPWU
   467  	ADIVD
   468  	ADIVDCC
   469  	ADIVDVCC
   470  	ADIVDV
   471  	ADIVDU
   472  	ADIVDUCC
   473  	ADIVDUVCC
   474  	ADIVDUV
   475  	AEXTSW
   476  	AEXTSWCC
   477  	/* AFCFIW; AFCFIWCC */
   478  	AFCFID
   479  	AFCFIDCC
   480  	AFCTID
   481  	AFCTIDCC
   482  	AFCTIDZ
   483  	AFCTIDZCC
   484  	ALDAR
   485  	AMOVD
   486  	AMOVDU
   487  	AMOVWZ
   488  	AMOVWZU
   489  	AMULHD
   490  	AMULHDCC
   491  	AMULHDU
   492  	AMULHDUCC
   493  	AMULLD
   494  	AMULLDCC
   495  	AMULLDVCC
   496  	AMULLDV
   497  	ARFID
   498  	ARLDMI
   499  	ARLDMICC
   500  	ARLDC
   501  	ARLDCCC
   502  	ARLDCR
   503  	ARLDCRCC
   504  	ARLDCL
   505  	ARLDCLCC
   506  	ASLBIA
   507  	ASLBIE
   508  	ASLBMFEE
   509  	ASLBMFEV
   510  	ASLBMTE
   511  	ASLD
   512  	ASLDCC
   513  	ASRD
   514  	ASRAD
   515  	ASRADCC
   516  	ASRDCC
   517  	ASTDCCC
   518  	ATD
   519  
   520  	/* 64-bit pseudo operation */
   521  	ADWORD
   522  	AREMD
   523  	AREMDCC
   524  	AREMDV
   525  	AREMDVCC
   526  	AREMDU
   527  	AREMDUCC
   528  	AREMDUV
   529  	AREMDUVCC
   530  
   531  	/* more 64-bit operations */
   532  	AHRFID
   533  
   534  	ALAST
   535  
   536  	// aliases
   537  	ABR = obj.AJMP
   538  	ABL = obj.ACALL
   539  )