github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/cmd/9l/9.out.h (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  /*
    31   * powerpc 64
    32   */
    33  #define	NSNAME	8
    34  #define	NSYM	50
    35  #define	NREG	32	/* number of general registers */
    36  #define	NFREG	32	/* number of floating point registers */
    37  
    38  #include "../ld/textflag.h"
    39  
    40  enum
    41  {
    42  	REGZERO		= 0,	/* set to zero */
    43  	REGSP		= 1,
    44  	REGSB		= 2,
    45  	REGRET		= 3,
    46  	REGARG		= -1,	/* -1 disables passing the first argument in register */
    47  	REGRT1		= 3,	/* reserved for runtime, duffzero and duffcopy */
    48  	REGRT2		= 4,	/* reserved for runtime, duffcopy */
    49  	REGMIN		= 7,	/* register variables allocated from here to REGMAX */
    50  	REGENV		= 11,	/* environment for closures */
    51  	REGMAX		= 27,
    52  	REGEXT		= 30,	/* external registers allocated from here down */
    53  	REGG		= 30,	/* G */
    54  	REGTMP		= 31,	/* used by the linker */
    55  
    56  	FREGRET		= 0,
    57  	FREGMIN		= 17,	/* first register variable */
    58  	FREGMAX		= 26,	/* last register variable for 9g only */
    59  	FREGEXT		= 26,	/* first external register */
    60  	FREGCVI		= 27,	/* floating conversion constant */
    61  	FREGZERO	= 28,	/* both float and double */
    62  	FREGHALF	= 29,	/* double */
    63  	FREGONE		= 30,	/* double */
    64  	FREGTWO		= 31	/* double */
    65  /*
    66   * GENERAL:
    67   *
    68   * compiler allocates R3 up as temps
    69   * compiler allocates register variables R7-R27
    70   * compiler allocates external registers R30 down
    71   *
    72   * compiler allocates register variables F17-F26
    73   * compiler allocates external registers F26 down
    74   */
    75  };
    76  
    77  enum {
    78  	BIG = 32768-8,
    79  };
    80  
    81  enum {
    82  /* mark flags */
    83  	LABEL		= 1<<0,
    84  	LEAF		= 1<<1,
    85  	FLOAT		= 1<<2,
    86  	BRANCH		= 1<<3,
    87  	LOAD		= 1<<4,
    88  	FCMP		= 1<<5,
    89  	SYNC		= 1<<6,
    90  	LIST		= 1<<7,
    91  	FOLL		= 1<<8,
    92  	NOSCHED		= 1<<9,
    93  };
    94  
    95  enum
    96  {
    97  	C_NONE,
    98  	C_REG,
    99  	C_FREG,
   100  	C_CREG,
   101  	C_SPR,		/* special processor register */
   102  	C_ZCON,
   103  	C_SCON,		/* 16 bit signed */
   104  	C_UCON,		/* low 16 bits 0 */
   105  	C_ADDCON,	/* -0x8000 <= v < 0 */
   106  	C_ANDCON,	/* 0 < v <= 0xFFFF */
   107  	C_LCON,		/* other 32 */
   108  	C_DCON,		/* other 64 (could subdivide further) */
   109  	C_SACON,
   110  	C_SECON,
   111  	C_LACON,
   112  	C_LECON,
   113  	C_SBRA,
   114  	C_LBRA,
   115  	C_SAUTO,
   116  	C_LAUTO,
   117  	C_SEXT,
   118  	C_LEXT,
   119  	C_ZOREG,
   120  	C_SOREG,
   121  	C_LOREG,
   122  	C_FPSCR,
   123  	C_MSR,
   124  	C_XER,
   125  	C_LR,
   126  	C_CTR,
   127  	C_ANY,
   128  	C_GOK,
   129  	C_ADDR,
   130  
   131  	C_NCLASS,	/* must be the last */
   132  };
   133  
   134  enum
   135  {
   136  	AXXX,
   137  	AADD,
   138  	AADDCC,
   139  	AADDV,
   140  	AADDVCC,
   141  	AADDC,
   142  	AADDCCC,
   143  	AADDCV,
   144  	AADDCVCC,
   145  	AADDME,
   146  	AADDMECC,
   147  	AADDMEVCC,
   148  	AADDMEV,
   149  	AADDE,
   150  	AADDECC,
   151  	AADDEVCC,
   152  	AADDEV,
   153  	AADDZE,
   154  	AADDZECC,
   155  	AADDZEVCC,
   156  	AADDZEV,
   157  	AAND,
   158  	AANDCC,
   159  	AANDN,
   160  	AANDNCC,
   161  	ABC,
   162  	ABCL,
   163  	ABEQ,
   164  	ABGE,
   165  	ABGT,
   166  	ABL,
   167  	ABLE,
   168  	ABLT,
   169  	ABNE,
   170  	ABR,
   171  	ABVC,
   172  	ABVS,
   173  	ACMP,
   174  	ACMPU,
   175  	ACNTLZW,
   176  	ACNTLZWCC,
   177  	ACRAND,
   178  	ACRANDN,
   179  	ACREQV,
   180  	ACRNAND,
   181  	ACRNOR,
   182  	ACROR,
   183  	ACRORN,
   184  	ACRXOR,
   185  	ADIVW,
   186  	ADIVWCC,
   187  	ADIVWVCC,
   188  	ADIVWV,
   189  	ADIVWU,
   190  	ADIVWUCC,
   191  	ADIVWUVCC,
   192  	ADIVWUV,
   193  	AEQV,
   194  	AEQVCC,
   195  	AEXTSB,
   196  	AEXTSBCC,
   197  	AEXTSH,
   198  	AEXTSHCC,
   199  	AFABS,
   200  	AFABSCC,
   201  	AFADD,
   202  	AFADDCC,
   203  	AFADDS,
   204  	AFADDSCC,
   205  	AFCMPO,
   206  	AFCMPU,
   207  	AFCTIW,
   208  	AFCTIWCC,
   209  	AFCTIWZ,
   210  	AFCTIWZCC,
   211  	AFDIV,
   212  	AFDIVCC,
   213  	AFDIVS,
   214  	AFDIVSCC,
   215  	AFMADD,
   216  	AFMADDCC,
   217  	AFMADDS,
   218  	AFMADDSCC,
   219  	AFMOVD,
   220  	AFMOVDCC,
   221  	AFMOVDU,
   222  	AFMOVS,
   223  	AFMOVSU,
   224  	AFMSUB,
   225  	AFMSUBCC,
   226  	AFMSUBS,
   227  	AFMSUBSCC,
   228  	AFMUL,
   229  	AFMULCC,
   230  	AFMULS,
   231  	AFMULSCC,
   232  	AFNABS,
   233  	AFNABSCC,
   234  	AFNEG,
   235  	AFNEGCC,
   236  	AFNMADD,
   237  	AFNMADDCC,
   238  	AFNMADDS,
   239  	AFNMADDSCC,
   240  	AFNMSUB,
   241  	AFNMSUBCC,
   242  	AFNMSUBS,
   243  	AFNMSUBSCC,
   244  	AFRSP,
   245  	AFRSPCC,
   246  	AFSUB,
   247  	AFSUBCC,
   248  	AFSUBS,
   249  	AFSUBSCC,
   250  	AMOVMW,
   251  	ALSW,
   252  	ALWAR,
   253  	AMOVWBR,
   254  	AMOVB,
   255  	AMOVBU,
   256  	AMOVBZ,
   257  	AMOVBZU,
   258  	AMOVH,
   259  	AMOVHBR,
   260  	AMOVHU,
   261  	AMOVHZ,
   262  	AMOVHZU,
   263  	AMOVW,
   264  	AMOVWU,
   265  	AMOVFL,
   266  	AMOVCRFS,
   267  	AMTFSB0,
   268  	AMTFSB0CC,
   269  	AMTFSB1,
   270  	AMTFSB1CC,
   271  	AMULHW,
   272  	AMULHWCC,
   273  	AMULHWU,
   274  	AMULHWUCC,
   275  	AMULLW,
   276  	AMULLWCC,
   277  	AMULLWVCC,
   278  	AMULLWV,
   279  	ANAND,
   280  	ANANDCC,
   281  	ANEG,
   282  	ANEGCC,
   283  	ANEGVCC,
   284  	ANEGV,
   285  	ANOR,
   286  	ANORCC,
   287  	AOR,
   288  	AORCC,
   289  	AORN,
   290  	AORNCC,
   291  	AREM,
   292  	AREMCC,
   293  	AREMV,
   294  	AREMVCC,
   295  	AREMU,
   296  	AREMUCC,
   297  	AREMUV,
   298  	AREMUVCC,
   299  	ARFI,
   300  	ARLWMI,
   301  	ARLWMICC,
   302  	ARLWNM,
   303  	ARLWNMCC,
   304  	ASLW,
   305  	ASLWCC,
   306  	ASRW,
   307  	ASRAW,
   308  	ASRAWCC,
   309  	ASRWCC,
   310  	ASTSW,
   311  	ASTWCCC,
   312  	ASUB,
   313  	ASUBCC,
   314  	ASUBVCC,
   315  	ASUBC,
   316  	ASUBCCC,
   317  	ASUBCV,
   318  	ASUBCVCC,
   319  	ASUBME,
   320  	ASUBMECC,
   321  	ASUBMEVCC,
   322  	ASUBMEV,
   323  	ASUBV,
   324  	ASUBE,
   325  	ASUBECC,
   326  	ASUBEV,
   327  	ASUBEVCC,
   328  	ASUBZE,
   329  	ASUBZECC,
   330  	ASUBZEVCC,
   331  	ASUBZEV,
   332  	ASYNC,
   333  	AXOR,
   334  	AXORCC,
   335  
   336  	ADCBF,
   337  	ADCBI,
   338  	ADCBST,
   339  	ADCBT,
   340  	ADCBTST,
   341  	ADCBZ,
   342  	AECIWX,
   343  	AECOWX,
   344  	AEIEIO,
   345  	AICBI,
   346  	AISYNC,
   347  	APTESYNC,
   348  	ATLBIE,
   349  	ATLBIEL,
   350  	ATLBSYNC,
   351  	ATW,
   352  
   353  	ASYSCALL,
   354  	ADATA,
   355  	AGLOBL,
   356  	AGOK,
   357  	AHISTORY,
   358  	ANAME,
   359  	ANOP,
   360  	ARETURN,
   361  	ATEXT,
   362  	AWORD,
   363  	AEND,
   364  	ADYNT,
   365  	AINIT,
   366  	ASIGNAME,
   367  
   368  	ARFCI,
   369  
   370  	/* optional on 32-bit */
   371  	AFRES,
   372  	AFRESCC,
   373  	AFRSQRTE,
   374  	AFRSQRTECC,
   375  	AFSEL,
   376  	AFSELCC,
   377  	AFSQRT,
   378  	AFSQRTCC,
   379  	AFSQRTS,
   380  	AFSQRTSCC,
   381  
   382  	/* 64-bit */
   383  	
   384  	ACNTLZD,
   385  	ACNTLZDCC,
   386  	ACMPW,	/* CMP with L=0 */
   387  	ACMPWU,
   388  	ADIVD,
   389  	ADIVDCC,
   390  	ADIVDVCC,
   391  	ADIVDV,
   392  	ADIVDU,
   393  	ADIVDUCC,
   394  	ADIVDUVCC,
   395  	ADIVDUV,
   396  	AEXTSW,
   397  	AEXTSWCC,
   398  	/* AFCFIW; AFCFIWCC */
   399  	AFCFID,
   400  	AFCFIDCC,
   401  	AFCTID,
   402  	AFCTIDCC,
   403  	AFCTIDZ,
   404  	AFCTIDZCC,
   405  	ALDAR,
   406  	AMOVD,
   407  	AMOVDU,
   408  	AMOVWZ,
   409  	AMOVWZU,
   410  	AMULHD,
   411  	AMULHDCC,
   412  	AMULHDU,
   413  	AMULHDUCC,
   414  	AMULLD,
   415  	AMULLDCC,
   416  	AMULLDVCC,
   417  	AMULLDV,
   418  	ARFID,
   419  	ARLDMI,
   420  	ARLDMICC,
   421  	ARLDC,
   422  	ARLDCCC,
   423  	ARLDCR,
   424  	ARLDCRCC,
   425  	ARLDCL,
   426  	ARLDCLCC,
   427  	ASLBIA,
   428  	ASLBIE,
   429  	ASLBMFEE,
   430  	ASLBMFEV,
   431  	ASLBMTE,
   432  	ASLD,
   433  	ASLDCC,
   434  	ASRD,
   435  	ASRAD,
   436  	ASRADCC,
   437  	ASRDCC,
   438  	ASTDCCC,
   439  	ATD,
   440  
   441  	/* 64-bit pseudo operation */
   442  	ADWORD,
   443  	AREMD,
   444  	AREMDCC,
   445  	AREMDV,
   446  	AREMDVCC,
   447  	AREMDU,
   448  	AREMDUCC,
   449  	AREMDUV,
   450  	AREMDUVCC,
   451  
   452  	/* more 64-bit operations */
   453  	AHRFID,
   454  
   455  	AUNDEF,
   456  	AUSEFIELD,
   457  	ATYPE,
   458  	AFUNCDATA,
   459  	APCDATA,
   460  	ACHECKNIL,
   461  	AVARDEF,
   462  	AVARKILL,
   463  	ADUFFCOPY,
   464  	ADUFFZERO,
   465  
   466  	ALAST
   467  };
   468  
   469  /* type/name */
   470  enum
   471  {
   472  	D_GOK	= 0,
   473  	D_NONE,
   474  
   475  /* name */
   476  	D_EXTERN,
   477  	D_STATIC,
   478  	D_AUTO,
   479  	D_PARAM,
   480  
   481  /* type */
   482  	D_BRANCH,
   483  	D_OREG,
   484  	D_CONST,
   485  	D_FCONST,
   486  	D_SCONST,
   487  	D_REG,
   488  	D_FPSCR,
   489  	D_MSR,
   490  	D_FREG,
   491  	D_CREG,
   492  	D_SPR,
   493  	D_OPT,	/* branch/trap option */
   494  	D_FILE,
   495  	D_FILE1,
   496  	D_DCR,	/* device control register */
   497  	D_DCONST,
   498  	D_ADDR, // not used, use D_CONST with non-empty sym.
   499  
   500  	D_LAST,
   501  
   502  /* reg names for 9g OREGISTER */
   503  	D_R0 = 0, // type is D_REG
   504  	D_F0 = D_R0+NREG, // type is D_FREG
   505  
   506  /* reg names in offset field iff type is D_SPR */
   507  	D_XER	= 1,
   508  	D_LR	= 8,
   509  	D_CTR	= 9
   510  	/* and many supervisor level registers */
   511  };
   512  
   513  /*
   514   * this is the ranlib header
   515   */
   516  #define	SYMDEF	"__.GOSYMDEF"