|  | // 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 | 
|  |  | 
|  | #define NOPROF		(1<<0) | 
|  | #define DUPOK		(1<<1) | 
|  | #define NOSPLIT		(1<<2) | 
|  | #define RODATA	(1<<3) | 
|  | #define NOPTR	(1<<4) | 
|  |  | 
|  | #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	REGSB		12 | 
|  | #define	REGSP		13 | 
|  | #define	REGLINK		14 | 
|  | #define	REGPC		15 | 
|  |  | 
|  | #define	NFREG		8 | 
|  | #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, | 
|  |  | 
|  | ASRL, | 
|  | ASRA, | 
|  | ASLL, | 
|  | AMULU, | 
|  | ADIVU, | 
|  | AMUL, | 
|  | ADIV, | 
|  | AMOD, | 
|  | AMODU, | 
|  |  | 
|  | AMOVB, | 
|  | AMOVBU, | 
|  | AMOVH, | 
|  | 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, | 
|  |  | 
|  | 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 | 
|  |  | 
|  | /* type/name */ | 
|  | #define	D_GOK	0 | 
|  | #define	D_NONE	1 | 
|  |  | 
|  | /* type */ | 
|  | #define	D_BRANCH	(D_NONE+1) | 
|  | #define	D_OREG		(D_NONE+2) | 
|  | #define	D_CONST		(D_NONE+7) | 
|  | #define	D_FCONST	(D_NONE+8) | 
|  | #define	D_SCONST	(D_NONE+9) | 
|  | #define	D_PSR		(D_NONE+10) | 
|  | #define	D_REG		(D_NONE+12) | 
|  | #define	D_FREG		(D_NONE+13) | 
|  | #define	D_FILE		(D_NONE+16) | 
|  | #define	D_OCONST	(D_NONE+17) | 
|  | #define	D_FILE1		(D_NONE+18) | 
|  |  | 
|  | #define	D_SHIFT		(D_NONE+19) | 
|  | #define	D_FPCR		(D_NONE+20) | 
|  | #define	D_REGREG	(D_NONE+21) | 
|  | #define	D_ADDR		(D_NONE+22) | 
|  |  | 
|  | #define	D_SBIG		(D_NONE+23) | 
|  | #define	D_CONST2	(D_NONE+24) | 
|  |  | 
|  | /* name */ | 
|  | #define	D_EXTERN	(D_NONE+3) | 
|  | #define	D_STATIC	(D_NONE+4) | 
|  | #define	D_AUTO		(D_NONE+5) | 
|  | #define	D_PARAM		(D_NONE+6) | 
|  |  | 
|  | /* internal only */ | 
|  | #define	D_SIZE		(D_NONE+40) | 
|  | #define	D_PCREL		(D_NONE+41) | 
|  |  | 
|  | /* | 
|  | * this is the ranlib header | 
|  | */ | 
|  | #define	SYMDEF	"__.SYMDEF" | 
|  |  | 
|  | /* | 
|  | * this is the simulated IEEE floating point | 
|  | */ | 
|  | typedef	struct	ieee	Ieee; | 
|  | struct	ieee | 
|  | { | 
|  | int32	l;	/* contains ls-man	0xffffffff */ | 
|  | int32	h;	/* contains sign	0x80000000 | 
|  | exp		0x7ff00000 | 
|  | ms-man	0x000fffff */ | 
|  | }; |