diff options
Diffstat (limited to 'ir.h')
-rw-r--r-- | ir.h | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -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); |