| // 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. |
| |
| #define NSNAME 8 |
| #define NSYM 50 |
| #define NREG 16 |
| #include "../ld/textflag.h" |
| |
| #define REGRET 0 |
| /* -1 disables use of REGARG */ |
| #define REGARG -1 |
| /* compiler allocates R1 up as temps */ |
| /* compiler allocates register variables R3 up */ |
| #define REGEXT 10 |
| /* these two registers are declared in runtime.h */ |
| #define REGG (REGEXT-0) |
| #define REGM (REGEXT-1) |
| /* compiler allocates external registers R10 down */ |
| #define REGTMP 11 |
| #define REGSP 13 |
| #define REGLINK 14 |
| #define REGPC 15 |
| |
| #define NFREG 16 |
| #define FREGRET 0 |
| #define FREGEXT 7 |
| #define FREGTMP 15 |
| /* compiler allocates register variables F0 up */ |
| /* compiler allocates external registers F7 down */ |
| |
| enum as |
| { |
| 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, |
| |
| AMRC, // MRC/MCR |
| |
| ALAST, |
| }; |
| |
| /* scond byte */ |
| #define C_SCOND ((1<<4)-1) |
| #define C_SBIT (1<<4) |
| #define C_PBIT (1<<5) |
| #define C_WBIT (1<<6) |
| #define C_FBIT (1<<7) /* psr flags-only */ |
| #define C_UBIT (1<<7) /* up bit, unsigned bit */ |
| |
| #define C_SCOND_EQ 0 |
| #define C_SCOND_NE 1 |
| #define C_SCOND_HS 2 |
| #define C_SCOND_LO 3 |
| #define C_SCOND_MI 4 |
| #define C_SCOND_PL 5 |
| #define C_SCOND_VS 6 |
| #define C_SCOND_VC 7 |
| #define C_SCOND_HI 8 |
| #define C_SCOND_LS 9 |
| #define C_SCOND_GE 10 |
| #define C_SCOND_LT 11 |
| #define C_SCOND_GT 12 |
| #define C_SCOND_LE 13 |
| #define C_SCOND_NONE 14 |
| #define C_SCOND_NV 15 |
| |
| /* D_SHIFT type */ |
| #define SHIFT_LL 0<<5 |
| #define SHIFT_LR 1<<5 |
| #define SHIFT_AR 2<<5 |
| #define 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" |