// Inferno utils/5c/5.out.h // http://code.google.com/p/inferno-os/source/browse/utils/5c/5.out.h // // 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-2007 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-2007 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. enum { NSNAME = 8, NSYM = 50, NREG = 16, }; #include "../ld/textflag.h" /* -1 disables use of REGARG */ #define REGARG -1 /*c2go enum { REGARG = -1 }; */ enum { REGRET = 0, /* compiler allocates R1 up as temps */ /* compiler allocates register variables R3 up */ /* compiler allocates external registers R10 down */ REGEXT = 10, /* these two registers are declared in runtime.h */ REGG = REGEXT-0, REGM = REGEXT-1, REGTMP = 11, REGSP = 13, REGLINK = 14, REGPC = 15, NFREG = 16, FREGRET = 0, FREGEXT = 7, FREGTMP = 15, }; /* compiler allocates register variables F0 up */ /* compiler allocates external registers F7 down */ enum { C_NONE, C_REG, C_REGREG, C_REGREG2, C_SHIFT, C_FREG, C_PSR, C_FCR, C_RCON, /* 0xff rotated */ C_NCON, /* ~RCON */ C_SCON, /* 0xffff */ C_LCON, C_LCONADDR, C_ZFCON, C_SFCON, C_LFCON, C_RACON, C_LACON, C_SBRA, C_LBRA, C_HAUTO, /* halfword insn offset (-0xff to 0xff) */ C_FAUTO, /* float insn offset (0 to 0x3fc, word aligned) */ C_HFAUTO, /* both H and F */ C_SAUTO, /* -0xfff to 0xfff */ C_LAUTO, C_HOREG, C_FOREG, C_HFOREG, C_SOREG, C_ROREG, C_SROREG, /* both nil and R */ C_LOREG, C_PC, C_SP, C_HREG, C_ADDR, /* reference to relocatable address */ C_GOK, C_NCLASS, /* must be the last */ }; enum { AXXX, AAND, AEOR, ASUB, ARSB, AADD, AADC, ASBC, ARSC, ATST, ATEQ, ACMP, ACMN, AORR, ABIC, AMVN, AB, ABL, /* * Do not reorder or fragment the conditional branch * opcodes, or the predication code will break */ ABEQ, ABNE, ABCS, ABHS, ABCC, ABLO, ABMI, ABPL, ABVS, ABVC, ABHI, ABLS, ABGE, ABLT, ABGT, ABLE, AMOVWD, AMOVWF, AMOVDW, AMOVFW, AMOVFD, AMOVDF, AMOVF, AMOVD, ACMPF, ACMPD, AADDF, AADDD, ASUBF, ASUBD, AMULF, AMULD, ADIVF, ADIVD, ASQRTF, ASQRTD, AABSF, AABSD, ASRL, ASRA, ASLL, AMULU, ADIVU, AMUL, ADIV, AMOD, AMODU, AMOVB, AMOVBS, AMOVBU, AMOVH, AMOVHS, AMOVHU, AMOVW, AMOVM, ASWPBU, ASWPW, ANOP, ARFE, ASWI, AMULA, ADATA, AGLOBL, AGOK, AHISTORY, ANAME, ARET, ATEXT, AWORD, ADYNT_, AINIT_, ABCASE, ACASE, AEND, AMULL, AMULAL, AMULLU, AMULALU, ABX, ABXRET, ADWORD, ASIGNAME, ALDREX, ASTREX, ALDREXD, ASTREXD, APLD, AUNDEF, ACLZ, AMULWT, AMULWB, AMULAWT, AMULAWB, AUSEFIELD, ATYPE, AFUNCDATA, APCDATA, ACHECKNIL, AVARDEF, AVARKILL, ADUFFCOPY, ADUFFZERO, ADATABUNDLE, ADATABUNDLEEND, AMRC, // MRC/MCR ALAST, }; /* scond byte */ enum { C_SCOND = (1<<4)-1, C_SBIT = 1<<4, C_PBIT = 1<<5, C_WBIT = 1<<6, C_FBIT = 1<<7, /* psr flags-only */ C_UBIT = 1<<7, /* up bit, unsigned bit */ C_SCOND_EQ = 0, C_SCOND_NE = 1, C_SCOND_HS = 2, C_SCOND_LO = 3, C_SCOND_MI = 4, C_SCOND_PL = 5, C_SCOND_VS = 6, C_SCOND_VC = 7, C_SCOND_HI = 8, C_SCOND_LS = 9, C_SCOND_GE = 10, C_SCOND_LT = 11, C_SCOND_GT = 12, C_SCOND_LE = 13, C_SCOND_NONE = 14, C_SCOND_NV = 15, /* D_SHIFT type */ SHIFT_LL = 0<<5, SHIFT_LR = 1<<5, SHIFT_AR = 2<<5, SHIFT_RR = 3<<5, }; enum { /* type/name */ D_GOK = 0, D_NONE = 1, /* type */ D_BRANCH = (D_NONE+1), D_OREG = (D_NONE+2), D_CONST = (D_NONE+7), D_FCONST = (D_NONE+8), D_SCONST = (D_NONE+9), D_PSR = (D_NONE+10), D_REG = (D_NONE+12), D_FREG = (D_NONE+13), D_FILE = (D_NONE+16), D_OCONST = (D_NONE+17), D_FILE1 = (D_NONE+18), D_SHIFT = (D_NONE+19), D_FPCR = (D_NONE+20), D_REGREG = (D_NONE+21), // (reg, reg) D_ADDR = (D_NONE+22), D_SBIG = (D_NONE+23), D_CONST2 = (D_NONE+24), D_REGREG2 = (D_NONE+25), // reg, reg /* name */ D_EXTERN = (D_NONE+3), D_STATIC = (D_NONE+4), D_AUTO = (D_NONE+5), D_PARAM = (D_NONE+6), }; /* * this is the ranlib header */ #define SYMDEF "__.GOSYMDEF" /*c2go extern char SYMDEF[]; */