// cmd/9c/9.out.h from Vita Nuova. // // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) // Portions Copyright © 1997-1999 Vita Nuova Limited // Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com) // Portions Copyright © 2004,2006 Bruce Ellis // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) // Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others // Portions Copyright © 2009 The Go Authors. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. /* * powerpc 64 */ #define NSNAME 8 #define NSYM 50 #define NREG 32 /* number of general registers */ #define NFREG 32 /* number of floating point registers */ #include "../ld/textflag.h" enum { REGZERO = 0, /* set to zero */ REGSP = 1, REGSB = 2, REGRET = 3, REGARG = -1, /* -1 disables passing the first argument in register */ REGRT1 = 3, /* reserved for runtime, duffzero and duffcopy */ REGRT2 = 4, /* reserved for runtime, duffcopy */ REGMIN = 7, /* register variables allocated from here to REGMAX */ REGENV = 11, /* environment for closures */ REGMAX = 27, REGEXT = 30, /* external registers allocated from here down */ REGG = 30, /* G */ REGTMP = 31, /* used by the linker */ FREGRET = 0, FREGMIN = 17, /* first register variable */ FREGMAX = 26, /* last register variable for 9g only */ FREGEXT = 26, /* first external register */ FREGCVI = 27, /* floating conversion constant */ FREGZERO = 28, /* both float and double */ FREGHALF = 29, /* double */ FREGONE = 30, /* double */ FREGTWO = 31 /* double */ /* * GENERAL: * * compiler allocates R3 up as temps * compiler allocates register variables R7-R27 * compiler allocates external registers R30 down * * compiler allocates register variables F17-F26 * compiler allocates external registers F26 down */ }; enum { BIG = 32768-8, }; enum { /* mark flags */ LABEL = 1<<0, LEAF = 1<<1, FLOAT = 1<<2, BRANCH = 1<<3, LOAD = 1<<4, FCMP = 1<<5, SYNC = 1<<6, LIST = 1<<7, FOLL = 1<<8, NOSCHED = 1<<9, }; enum { C_NONE, C_REG, C_FREG, C_CREG, C_SPR, /* special processor register */ C_ZCON, C_SCON, /* 16 bit signed */ C_UCON, /* low 16 bits 0 */ C_ADDCON, /* -0x8000 <= v < 0 */ C_ANDCON, /* 0 < v <= 0xFFFF */ C_LCON, /* other 32 */ C_DCON, /* other 64 (could subdivide further) */ C_SACON, C_SECON, C_LACON, C_LECON, C_SBRA, C_LBRA, C_SAUTO, C_LAUTO, C_SEXT, C_LEXT, C_ZOREG, C_SOREG, C_LOREG, C_FPSCR, C_MSR, C_XER, C_LR, C_CTR, C_ANY, C_GOK, C_ADDR, C_NCLASS, /* must be the last */ }; enum { AXXX, AADD, AADDCC, AADDV, AADDVCC, AADDC, AADDCCC, AADDCV, AADDCVCC, AADDME, AADDMECC, AADDMEVCC, AADDMEV, AADDE, AADDECC, AADDEVCC, AADDEV, AADDZE, AADDZECC, AADDZEVCC, AADDZEV, AAND, AANDCC, AANDN, AANDNCC, ABC, ABCL, ABEQ, ABGE, ABGT, ABL, ABLE, ABLT, ABNE, ABR, ABVC, ABVS, ACMP, ACMPU, ACNTLZW, ACNTLZWCC, ACRAND, ACRANDN, ACREQV, ACRNAND, ACRNOR, ACROR, ACRORN, ACRXOR, ADIVW, ADIVWCC, ADIVWVCC, ADIVWV, ADIVWU, ADIVWUCC, ADIVWUVCC, ADIVWUV, AEQV, AEQVCC, AEXTSB, AEXTSBCC, AEXTSH, AEXTSHCC, AFABS, AFABSCC, AFADD, AFADDCC, AFADDS, AFADDSCC, AFCMPO, AFCMPU, AFCTIW, AFCTIWCC, AFCTIWZ, AFCTIWZCC, AFDIV, AFDIVCC, AFDIVS, AFDIVSCC, AFMADD, AFMADDCC, AFMADDS, AFMADDSCC, AFMOVD, AFMOVDCC, AFMOVDU, AFMOVS, AFMOVSU, AFMSUB, AFMSUBCC, AFMSUBS, AFMSUBSCC, AFMUL, AFMULCC, AFMULS, AFMULSCC, AFNABS, AFNABSCC, AFNEG, AFNEGCC, AFNMADD, AFNMADDCC, AFNMADDS, AFNMADDSCC, AFNMSUB, AFNMSUBCC, AFNMSUBS, AFNMSUBSCC, AFRSP, AFRSPCC, AFSUB, AFSUBCC, AFSUBS, AFSUBSCC, AMOVMW, ALSW, ALWAR, AMOVWBR, AMOVB, AMOVBU, AMOVBZ, AMOVBZU, AMOVH, AMOVHBR, AMOVHU, AMOVHZ, AMOVHZU, AMOVW, AMOVWU, AMOVFL, AMOVCRFS, AMTFSB0, AMTFSB0CC, AMTFSB1, AMTFSB1CC, AMULHW, AMULHWCC, AMULHWU, AMULHWUCC, AMULLW, AMULLWCC, AMULLWVCC, AMULLWV, ANAND, ANANDCC, ANEG, ANEGCC, ANEGVCC, ANEGV, ANOR, ANORCC, AOR, AORCC, AORN, AORNCC, AREM, AREMCC, AREMV, AREMVCC, AREMU, AREMUCC, AREMUV, AREMUVCC, ARFI, ARLWMI, ARLWMICC, ARLWNM, ARLWNMCC, ASLW, ASLWCC, ASRW, ASRAW, ASRAWCC, ASRWCC, ASTSW, ASTWCCC, ASUB, ASUBCC, ASUBVCC, ASUBC, ASUBCCC, ASUBCV, ASUBCVCC, ASUBME, ASUBMECC, ASUBMEVCC, ASUBMEV, ASUBV, ASUBE, ASUBECC, ASUBEV, ASUBEVCC, ASUBZE, ASUBZECC, ASUBZEVCC, ASUBZEV, ASYNC, AXOR, AXORCC, ADCBF, ADCBI, ADCBST, ADCBT, ADCBTST, ADCBZ, AECIWX, AECOWX, AEIEIO, AICBI, AISYNC, APTESYNC, ATLBIE, ATLBIEL, ATLBSYNC, ATW, ASYSCALL, ADATA, AGLOBL, AGOK, AHISTORY, ANAME, ANOP, ARETURN, ATEXT, AWORD, AEND, ADYNT, AINIT, ASIGNAME, ARFCI, /* optional on 32-bit */ AFRES, AFRESCC, AFRSQRTE, AFRSQRTECC, AFSEL, AFSELCC, AFSQRT, AFSQRTCC, AFSQRTS, AFSQRTSCC, /* 64-bit */ ACNTLZD, ACNTLZDCC, ACMPW, /* CMP with L=0 */ ACMPWU, ADIVD, ADIVDCC, ADIVDVCC, ADIVDV, ADIVDU, ADIVDUCC, ADIVDUVCC, ADIVDUV, AEXTSW, AEXTSWCC, /* AFCFIW; AFCFIWCC */ AFCFID, AFCFIDCC, AFCTID, AFCTIDCC, AFCTIDZ, AFCTIDZCC, ALDAR, AMOVD, AMOVDU, AMOVWZ, AMOVWZU, AMULHD, AMULHDCC, AMULHDU, AMULHDUCC, AMULLD, AMULLDCC, AMULLDVCC, AMULLDV, ARFID, ARLDMI, ARLDMICC, ARLDC, ARLDCCC, ARLDCR, ARLDCRCC, ARLDCL, ARLDCLCC, ASLBIA, ASLBIE, ASLBMFEE, ASLBMFEV, ASLBMTE, ASLD, ASLDCC, ASRD, ASRAD, ASRADCC, ASRDCC, ASTDCCC, ATD, /* 64-bit pseudo operation */ ADWORD, AREMD, AREMDCC, AREMDV, AREMDVCC, AREMDU, AREMDUCC, AREMDUV, AREMDUVCC, /* more 64-bit operations */ AHRFID, AUNDEF, AUSEFIELD, ATYPE, AFUNCDATA, APCDATA, ACHECKNIL, AVARDEF, AVARKILL, ADUFFCOPY, ADUFFZERO, ALAST }; /* type/name */ enum { D_GOK = 0, D_NONE, /* name */ D_EXTERN, D_STATIC, D_AUTO, D_PARAM, /* type */ D_BRANCH, D_OREG, D_CONST, D_FCONST, D_SCONST, D_REG, D_FPSCR, D_MSR, D_FREG, D_CREG, D_SPR, D_OPT, /* branch/trap option */ D_FILE, D_FILE1, D_DCR, /* device control register */ D_DCONST, D_ADDR, // not used, use D_CONST with non-empty sym. D_LAST, /* reg names for 9g OREGISTER */ D_R0 = 0, // type is D_REG D_F0 = D_R0+NREG, // type is D_FREG /* reg names in offset field iff type is D_SPR */ D_XER = 1, D_LR = 8, D_CTR = 9 /* and many supervisor level registers */ }; /* * this is the ranlib header */ #define SYMDEF "__.GOSYMDEF"