X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ir.h;h=66336d6ae5a6b64a5a8e9a2ff64c2e54c48d22ed;hp=bfba8faace49f1c4708369f56b6dd1fd431cfe1c;hb=d68d19dbfdbe6e239048870d6e6b442a5b1290fb;hpb=0bee75940616ea487cf52d1ea82c9f7a90c8d4e6 diff --git a/ir.h b/ir.h index bfba8fa..66336d6 100644 --- a/ir.h +++ b/ir.h @@ -64,12 +64,19 @@ typedef struct ir_value_s { int32_t name; /* filled by the local-allocator */ int32_t local; + /* added for members */ + int32_t addroffset; } code; + /* for acessing vectors */ + struct ir_value_s *members[3]; + /* For the temp allocator */ MEM_VECTOR_MAKE(ir_life_entry_t, life); } ir_value; +int32_t ir_value_code_addr(const ir_value*); + /* ir_value can be a variable, or created by an operation */ ir_value* ir_value_var(const char *name, int st, int vtype); /* if a result of an operation: the function should store @@ -78,6 +85,7 @@ ir_value* ir_value_var(const char *name, int st, int vtype); ir_value* ir_value_out(struct ir_function_s *owner, const char *name, int st, int vtype); void ir_value_delete(ir_value*); void ir_value_set_name(ir_value*, const char *name); +ir_value* ir_value_vector_member(ir_value*, unsigned int member); MEM_VECTOR_PROTO_ALL(ir_value, struct ir_instr_s*, reads); MEM_VECTOR_PROTO_ALL(ir_value, struct ir_instr_s*, writes); @@ -89,6 +97,7 @@ bool GMQCC_WARN ir_value_set_int(ir_value*, int i); #endif bool GMQCC_WARN ir_value_set_string(ir_value*, const char *s); bool GMQCC_WARN ir_value_set_vector(ir_value*, vector v); +bool GMQCC_WARN ir_value_set_field(ir_value*, ir_value *fld); /*bool ir_value_set_pointer_v(ir_value*, ir_value* p); */ /*bool ir_value_set_pointer_i(ir_value*, int i); */ bool GMQCC_WARN ir_value_set_quaternion(ir_value*, quaternion v);