From f36879c1d42e34d593dff204e26ecfb10eb6dfac Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Wed, 24 Jan 2018 22:46:14 +0100 Subject: Asm literals and hwi --- ir.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'ir.h') diff --git a/ir.h b/ir.h index 213793f..8496a06 100644 --- a/ir.h +++ b/ir.h @@ -27,6 +27,7 @@ enum instype { INS_RETV, // return r1 INS_MOV, // r0 = r1 INS_BRK, // halt + INS_HWI, // hwi r1 }; enum condcode { @@ -37,6 +38,9 @@ enum reftype { REF_REG, // reg REF_MEM, // [reg + offset + {0, .data, heap base}[rel]] REF_IMM, // imm + // This can only appear in user-entered asm literals and will be eliminated in the compiler. + // It should refer to a symbol that is in scope, otherwise an error will be reported. + REF_VARNAME, // name }; enum refrel { @@ -61,6 +65,7 @@ struct ref { int offset; enum refrel rel; int imm; + const char *name; // should be a return value from ir_str() }; struct irins { @@ -86,7 +91,7 @@ void ir_delete(struct ir *ir); void ir_print(struct ir *ir, FILE *f); void irins_print(struct irins *ins, FILE *f); const char* condcode_show(enum condcode condcode); -void ref_show(struct ref ref, char *dest); // dest must have size at least 40 +const char* ref_show(struct ref ref); // returns pointer to static buffer const char* ir_str(const char *str); // returns interned string @@ -113,6 +118,7 @@ const char* gen_label_name(void); struct ref ref_reg(int reg); struct ref ref_mem(int reg, int offset, enum refrel rel); struct ref ref_imm(int imm); +struct ref ref_varname(const char *name); struct ref ref_next_register(void); bool ref_equal(struct ref r1, struct ref r2); -- cgit v1.2.3-54-g00ecf