int vtype;
int store;
lex_ctx context;
+ /* even the IR knows the subtype of a field */
+ int fieldtype;
MEM_VECTOR_MAKE(struct ir_instr_s*, reads);
MEM_VECTOR_MAKE(struct ir_instr_s*, writes);
vector vvec;
char *vstring;
struct ir_value_s *vpointer;
+ struct ir_function_s *vfunc;
} constval;
+ struct {
+ int32_t globaladdr;
+ int32_t name;
+ } code;
+
/* For the temp allocator */
MEM_VECTOR_MAKE(ir_life_entry_t, life);
} ir_value;
ir_value* ir_block_create_fieldaddress(ir_block*, const char *label, ir_value *entity, ir_value *field);
+/* This is to create an instruction of the form
+ * <outtype>%label := opcode a, b
+ */
+ir_value* ir_block_create_general_instr(ir_block *self, const char *label,
+ int op, ir_value *a, ir_value *b, int outype);
+
ir_value* ir_block_create_add(ir_block*, const char *label, ir_value *l, ir_value *r);
ir_value* ir_block_create_sub(ir_block*, const char *label, ir_value *l, ir_value *r);
ir_value* ir_block_create_mul(ir_block*, const char *label, ir_value *l, ir_value *r);
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(( (ir_value*)(NULL) )->constval.vvec.x)) ? 1 : -1 ];
+
#endif