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