ref: ac7d3b519a8c87d17fc16fd269cba1b4729d9a15
dir: /sys/src/cmd/tc/5.out.h/
#define NSNAME 8
#define NSYM 50
#define NREG 16
#define NOPROF (1<<0)
#define DUPOK (1<<1)
#define ALLTHUMBS (1<<2)
#define REGRET 0
#define REGARG 0
/* compiler allocates R1 up as temps */
/* compiler allocates register variables R3 up */
#define REGEXT 6
/* compiler allocates external registers R5 down */
#define REGTMPT 7 /* used by the loader - thumb */
#define REGTMP 11 /* used by the loader - arm */
#define REGSB 12
#define REGSP 13
#define REGLINK 14
#define REGPC 15
#define NFREG 8
#define FREGRET 0
#define FREGEXT 7
/* compiler allocates register variables F0 up */
/* compiler allocates external registers F7 down */
enum as
{
AXXX,
AAND,
AEOR,
ASUB,
ARSB, // not used
AADD,
AADC,
ASBC,
ARSC, // not used
ATST,
ATEQ, // not used
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,
ASRL, // right logical
ASRA, // right arithmetic
ASLL, // left logical = left arithmetic
AMULU,
ADIVU,
AMUL,
ADIV,
AMOD,
AMODU,
AMOVB,
AMOVBU,
AMOVH,
AMOVHU,
AMOVW,
AMOVM,
ASWPBU, // not used
ASWPW, // not used
ANOP,
ARFE,
ASWI,
AMULA, // not used
ADATA,
AGLOBL,
AGOK,
AHISTORY,
ANAME,
ARET, // fn return
ATEXT, // fn start
AWORD,
ADYNT, // not used
AINIT, // not used
ABCASE, // not used
ACASE, // not used
AEND,
AMULL,
AMULAL,
AMULLU,
AMULALU,
ABX,
ABXRET,
ADWORD,
ASIGNAME,
ALAST,
};
/* 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) /* not used */
#define D_FPCR (D_NONE+20)
#define D_REGREG (D_NONE+21)
/* 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)
/*
* this is the ranlib header
*/
#define SYMDEF "__.SYMDEF"
/*
* this is the simulated IEEE floating point
*/
typedef struct ieee Ieee;
struct ieee
{
long l; /* contains ls-man 0xffffffff */
long h; /* contains sign 0x80000000
exp 0x7ff00000
ms-man 0x000fffff */
};