]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.h
add codegen_output_type to ast_binary_codegen
[xonotic/gmqcc.git] / ir.h
diff --git a/ir.h b/ir.h
index a39efca1bcdf973f10c395c6a97471aff93a0027..4a1778e9d11d0b9e011745546802560e1feb10a2 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*,...));
 
@@ -249,6 +252,7 @@ typedef struct ir_function_s
     ir_value **locals;
 
     size_t allocated_locals;
+    size_t globaltemps;
 
     ir_block*     first;
     ir_block*     last;
@@ -307,15 +311,20 @@ 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;
     /* we cache the #IMMEDIATE string here */
-    qcint str_immediate;
+    qcint        str_immediate;
+    /* there should just be this one nil */
+    ir_value    *nil;
 } ir_builder;
 
 ir_builder* ir_builder_new(const char *modulename);