]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.h
gitignore: add gmqcc, gmqpak, qmcvm, testsuite, pak.
[xonotic/gmqcc.git] / ir.h
diff --git a/ir.h b/ir.h
index 9a953a6187fbd2a12245c88b59728812cd5f2ea9..dac16a39b4d492f22bbd5f59c3738d6cf243b1a4 100644 (file)
--- a/ir.h
+++ b/ir.h
@@ -175,7 +175,6 @@ typedef struct ir_block_s
     size_t entry_id;
     size_t eid;
     bool   is_return;
-    size_t run_id;
 
     struct ir_function_s *owner;
 
@@ -273,12 +272,16 @@ typedef struct ir_function_s
     size_t run_id;
 
     struct ir_builder_s *owner;
+
+    /* vararg support: */
+    size_t max_varargs;
 } ir_function;
 #define IR_FLAG_HAS_ARRAYS        (1<<1)
 #define IR_FLAG_HAS_UNINITIALIZED (1<<2)
 #define IR_FLAG_HAS_GOTO          (1<<3)
 #define IR_FLAG_INCLUDE_DEF       (1<<4)
-#define IR_FLAG_MASK_NO_OVERLAP (IR_FLAG_HAS_ARRAYS | IR_FLAG_HAS_UNINITIALIZED)
+#define IR_FLAG_MASK_NO_OVERLAP     (IR_FLAG_HAS_ARRAYS | IR_FLAG_HAS_UNINITIALIZED)
+#define IR_FLAG_MASK_NO_LOCAL_TEMPS (IR_FLAG_HAS_ARRAYS | IR_FLAG_HAS_UNINITIALIZED)
 
 ir_function* ir_function_new(struct ir_builder_s *owner, int returntype);
 void         ir_function_delete(ir_function*);
@@ -328,6 +331,7 @@ typedef struct ir_builder_s
     qcint        str_immediate;
     /* there should just be this one nil */
     ir_value    *nil;
+    ir_value    *reserved_va_count;
 } ir_builder;
 
 ir_builder* ir_builder_new(const char *modulename);
@@ -343,12 +347,19 @@ ir_value* ir_builder_create_global(ir_builder*, const char *name, int vtype);
 ir_value* ir_builder_get_field(ir_builder*, const char *fun);
 ir_value* ir_builder_create_field(ir_builder*, const char *name, int vtype);
 
-bool ir_builder_generate(ir_builder *self, const char *filename);
+ir_value* ir_builder_get_va_count(ir_builder*);
+
+bool ir_builder_generate(code_t *, ir_builder *self, const char *filename);
 
 void ir_builder_dump(ir_builder*, int (*oprintf)(const char*, ...));
 
-/* This code assumes 32 bit floats while generating binary */
-extern int check_int_and_float_size
-[ (sizeof(int32_t) == sizeof(qcfloat)) ? 1 : -1 ];
+
+/*
+ * This code assumes 32 bit floats while generating binary
+ * Blub: don't use extern here, it's annoying and shows up in nm
+ * for some reason :P  
+ */
+typedef int static_assert_is_32bit_float  [(sizeof(int32_t) == 4)?1:-1];
+typedef int static_assert_is_32bit_integer[(sizeof(qcfloat) == 4)?1:-1];
 
 #endif