mirror of
https://github.com/PDP-10/PCC20.git
synced 2026-01-13 23:26:39 +00:00
102 lines
2.2 KiB
C
102 lines
2.2 KiB
C
/*
|
||
|
||
C COMPILER
|
||
Phase C: Code Generator
|
||
Insert File
|
||
|
||
Copyright (c) 1977 by Alan Snyder
|
||
|
||
*/
|
||
|
||
/* types */
|
||
|
||
struct _dref {int drbase, droffset;};
|
||
struct _loc {int flag, word;};
|
||
struct _oploc {struct _loc xloc [3]; int clobber;};
|
||
|
||
struct _enode {
|
||
int op;
|
||
type etype;
|
||
struct _dref edref;
|
||
char lvalue, degree, saved;
|
||
struct _enode *ep1, *ep2;
|
||
};
|
||
|
||
struct _econst {
|
||
int op;
|
||
type etype;
|
||
struct _dref edref;
|
||
char lvalue, degree, saved;
|
||
int eval;
|
||
};
|
||
|
||
struct _eidn {
|
||
int op;
|
||
type etype;
|
||
struct _dref edref;
|
||
char lvalue, degree, saved;
|
||
int eclass, eoffset;
|
||
};
|
||
|
||
# define dref struct _dref
|
||
# define loc struct _loc
|
||
# define oploc struct _oploc
|
||
# define enode struct _enode
|
||
# define econst struct _econst
|
||
# define eidn struct _eidn
|
||
|
||
/* machine description tables */
|
||
|
||
extern oploc xoploc[];
|
||
extern int tsize[], talign[], calign[], retreg[], tpoint[],
|
||
spoint[], trdt[], prdt[], conf[], rtopp[], rtopl[],
|
||
mactab[], opreg[], opmem[], (*off_ok[])(), ntype,
|
||
nmem, nac, npc, nreg, flt_hack;
|
||
|
||
/* code generator variables defined in C31 */
|
||
|
||
extern enode acore[], *acorp;
|
||
|
||
extern int lc_node, flc_node, *core, *corep, cbn, nfunc, lineno,
|
||
exprlev, ttxlev, cur_op, temploc, autoloc, aquote,
|
||
framesize, objmode, f_error, argops,
|
||
f_mac, f_node, fidn, ntw[], eof_node, aflag, ciln,
|
||
int_size, opdope[], adope[], allreg[], allmem[],
|
||
anywhere[];
|
||
|
||
extern char *fn_error, *fn_node, *fn_typtab, *options,
|
||
*fn_mac, type_node[], nodelen[], opbop[];
|
||
|
||
extern type ftype;
|
||
|
||
/* functions */
|
||
|
||
enode *cgassign(), *cgcall(), *cgcomma(), *cgexpr(), *cgfloat(),
|
||
*cgidn(), *cgindirect(), *cgint(), *cglseq(), *cgmove(),
|
||
*cgop(), *cgqmark(), *cgstring(), *conv(), *convd(),
|
||
*convert(), *convx(), *e_alloc(), *intcon(), *jumpval(),
|
||
*mkenode(), *mmove(), *opt(), *taddr(), *telist(), *tfarg(),
|
||
*texpr(), *tpadd(), *tpcomp(), *tpsub(), *tptrop(), *ttexpr(),
|
||
*txidn(), *txinc(), *txpr2(), *txpr3();
|
||
|
||
int *elist(), *ro2p();
|
||
|
||
oploc *choose();
|
||
|
||
type mkarray();
|
||
type mkptr();
|
||
type to2p();
|
||
|
||
/* special type values */
|
||
|
||
extern type TCHAR;
|
||
extern type TINT;
|
||
extern type TFLOAT;
|
||
extern type TDOUBLE;
|
||
extern type TLONG;
|
||
extern type TUNSIGNED;
|
||
extern type TUNDEF;
|
||
extern type TPCHAR;
|
||
extern type TACHAR;
|
||
extern type TFINT;
|
||
|