diff options
Diffstat (limited to 'src/cmd/6g/gg.h')
-rw-r--r-- | src/cmd/6g/gg.h | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/cmd/6g/gg.h b/src/cmd/6g/gg.h index 47a540082..ceb6a2caa 100644 --- a/src/cmd/6g/gg.h +++ b/src/cmd/6g/gg.h @@ -14,19 +14,22 @@ typedef struct Addr Addr; struct Addr { vlong offset; - double dval; - Prog* branch; - char sval[NSNAME]; + + union { + double dval; + vlong vval; + Prog* branch; + char sval[NSNAME]; + } u; Sym* gotype; Sym* sym; Node* node; - int width; + int64 width; uchar type; uchar index; uchar etype; uchar scale; /* doubles as width in DATA op */ - uchar pun; /* dont register variable */ }; #define A ((Addr*)0) @@ -58,7 +61,7 @@ EXTERN Node* throwreturn; extern vlong unmappedzero; /* - * gen.c + * ggen.c */ void compile(Node*); void proglist(void); @@ -71,29 +74,31 @@ void cgen_proc(Node*, int); void cgen_callret(Node*, Node*); void cgen_div(int, Node*, Node*, Node*); void cgen_bmul(int, Node*, Node*, Node*); -void cgen_shift(int, Node*, Node*, Node*); +void cgen_hmul(Node*, Node*, Node*); +void cgen_shift(int, int, Node*, Node*, Node*); void cgen_dcl(Node*); int needconvert(Type*, Type*); void genconv(Type*, Type*); void allocparams(void); -void checklabels(); +void checklabels(void); void ginscall(Node*, int); int gen_as_init(Node*); +void clearslim(Node*); /* - * cgen + * cgen.c */ void agen(Node*, Node*); +void agenr(Node*, Node*, Node*); +void cgenr(Node*, Node*, Node*); void igen(Node*, Node*, Node*); vlong fieldoffset(Type*, Node*); -void bgen(Node*, int, Prog*); void sgen(Node*, Node*, int64); void gmove(Node*, Node*); Prog* gins(int, Node*, Node*); int samaddr(Node*, Node*); void naddr(Node*, Addr*, int); void cgen_aret(Node*, Node*); -int cgen_inline(Node*, Node*); void restx(Node*, Node*); void savex(int, Node*, Node*, Node*, Type*); int componentgen(Node*, Node*); @@ -103,9 +108,8 @@ int componentgen(Node*, Node*); */ void clearp(Prog*); void proglist(void); -Prog* gbranch(int, Type*); +Prog* gbranch(int, Type*, int); Prog* prog(int); -void gaddoffset(Node*); void gconv(int, int); int conv2pt(Type*); vlong convvtox(vlong, int); @@ -126,9 +130,9 @@ Plist* newplist(void); int isfat(Type*); void sudoclean(void); int sudoaddable(int, Node*, Addr*); -void afunclit(Addr*); -void datagostring(Strlit*, Addr*); +void afunclit(Addr*, Node*); void nodfconst(Node*, Type*, Mpflt*); +void gtrack(Sym*); /* * cplx.c @@ -136,12 +140,12 @@ void nodfconst(Node*, Type*, Mpflt*); int complexop(Node*, Node*); void complexmove(Node*, Node*); void complexgen(Node*, Node*); -void complexbool(int, Node*, Node*, int, Prog*); /* * gobj.c */ void datastring(char*, int, Addr*); +void datagostring(Strlit*, Addr*); /* * list.c |