]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.h
Added splint.sh (a progressive way to fix some possible bugs)
[xonotic/gmqcc.git] / ir.h
diff --git a/ir.h b/ir.h
index d07dbf0bb0f17ea5f7e66ea2f74ac3c727b8daf9..9f8e1fa4e9f0aec9657c88865aede0d3f42344e8 100644 (file)
--- a/ir.h
+++ b/ir.h
@@ -22,7 +22,7 @@
  */
 #ifndef GMQCC_IR_HDR
 #define GMQCC_IR_HDR
-
+#include "gmqcc.h"
 /* ir_value */
 
 typedef struct
@@ -77,6 +77,9 @@ typedef struct ir_value_s {
 
     /* arrays will never overlap with temps */
     bool unique_life;
+    /* temps living during a CALL must be locked */
+    bool      locked;
+    bool      callparam;
 
     /* For the temp allocator */
     ir_life_entry_t *life;
@@ -94,7 +97,7 @@ void      ir_value_delete(ir_value*);
 bool      ir_value_set_name(ir_value*, const char *name);
 ir_value* ir_value_vector_member(ir_value*, unsigned int member);
 
-bool GMQCC_WARN vec_ir_value_find(ir_value **vec, ir_value *what, size_t *idx);
+bool GMQCC_WARN vec_ir_value_find(ir_value **vec, const ir_value *what, size_t *idx);
 
 bool GMQCC_WARN ir_value_set_float(ir_value*, float f);
 bool GMQCC_WARN ir_value_set_func(ir_value*, int f);
@@ -151,7 +154,7 @@ void      ir_instr_delete(ir_instr*);
 
 bool GMQCC_WARN vec_ir_instr_find(ir_instr **vec, ir_instr *what, size_t *idx);
 
-bool GMQCC_WARN ir_instr_op(ir_instr*, int op, ir_value *value, bool writing);
+bool ir_instr_op(ir_instr*, int op, ir_value *value, bool writing);
 
 void ir_instr_dump(ir_instr* in, char *ind, int (*oprintf)(const char*,...));
 
@@ -202,10 +205,6 @@ ir_value* ir_block_create_fieldaddress(ir_block*, lex_ctx, const char *label, ir
 ir_value* ir_block_create_general_instr(ir_block *self, lex_ctx, const char *label,
                                         int op, ir_value *a, ir_value *b, int outype);
 
-ir_value* ir_block_create_add(ir_block*, lex_ctx, const char *label, ir_value *l, ir_value *r);
-ir_value* ir_block_create_sub(ir_block*, lex_ctx, const char *label, ir_value *l, ir_value *r);
-ir_value* ir_block_create_mul(ir_block*, lex_ctx, const char *label, ir_value *l, ir_value *r);
-ir_value* ir_block_create_div(ir_block*, lex_ctx, const char *label, ir_value *l, ir_value *r);
 ir_instr* ir_block_create_phi(ir_block*, lex_ctx, const char *label, int vtype);
 ir_value* ir_phi_value(ir_instr*);
 void ir_phi_add(ir_instr*, ir_block *b, ir_value *v);
@@ -253,6 +252,7 @@ typedef struct ir_function_s
     ir_value **locals;
 
     size_t allocated_locals;
+    size_t globaltemps;
 
     ir_block*     first;
     ir_block*     last;
@@ -311,9 +311,13 @@ typedef struct ir_builder_s
     ht            htfields;
 
     ir_value    **extparams;
+    ir_value    **extparam_protos;
 
     /* the highest func->allocated_locals */
     size_t        max_locals;
+    size_t        max_globaltemps;
+    uint32_t      first_common_local;
+    uint32_t      first_common_globaltemp;
 
     const char **filenames;
     qcint       *filestrings;