From 3272b5d83d2e2167eed24748557df88bd66584ee Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Fri, 5 Jan 2018 23:42:24 +0100 Subject: There's actually a chance that, correctly stringified, this will work --- ir.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'ir.h') diff --git a/ir.h b/ir.h index e732a3d..5d92eed 100644 --- a/ir.h +++ b/ir.h @@ -26,6 +26,7 @@ enum instype { INS_RET, // return INS_RETV, // return r1 INS_MOV, // r0 = r1 + INS_BRK, // halt }; enum condcode { @@ -64,8 +65,11 @@ struct ref { struct irins { enum instype type; - struct ref r0, r1, r2; - char *name; + union { + struct ref three_refs[3]; + struct {struct ref r0, r1, r2;}; + }; + const char *name; // should be a return value from ir_str() enum condcode condcode; }; @@ -82,22 +86,27 @@ void ir_delete(struct ir *ir); void ir_print(struct ir *ir, FILE *f); void irins_print(struct irins *ins, FILE *f); +const char* ir_str(const char *str); // returns interned string + // returns offset in .data segment struct ref ir_reserve_global(struct ir *ir, int size); +void ir_insert_before(struct ir *ir, int pos, struct irins *ins); void ir_append(struct ir *ir, struct irins *ins); struct irins* irins_make(enum instype type); -struct irins* irins_make_name(enum instype type, char *name); +struct irins* irins_make_name(enum instype type, const char *name); struct irins* irins_make_0(enum instype type, struct ref r0); struct irins* irins_make_01(enum instype type, struct ref r0, struct ref r1); struct irins* irins_make_012(enum instype type, struct ref r0, struct ref r1, struct ref r2); struct irins* irins_make_1(enum instype type, struct ref r1); struct irins* irins_make_12(enum instype type, struct ref r1, struct ref r2); -struct irins* irins_make_jcc(char *name, enum condcode condcode); +struct irins* irins_make_jcc(const char *name, enum condcode condcode); void irins_delete(struct irins *ins); -char* gen_label_name(void); +void irins_which_refs(const struct irins *ins, bool haveref[3]); + +const char* gen_label_name(void); struct ref ref_reg(int reg); struct ref ref_mem(int reg, int offset, enum refrel rel); -- cgit v1.2.3-54-g00ecf