static bool gen_function_code(ir_function *self)
{
ir_block *block;
+ prog_section_statement stmt;
/* Starting from entry point, we generate blocks "as they come"
* for now. Dead blocks will not be translated obviously.
printf("failed to generate blocks for '%s'\n", self->name);
return false;
}
+
+ /* otherwise code_write crashes since it debug-prints functions until AINSTR_END */
+ stmt.opcode = AINSTR_END;
+ stmt.o1.u1 = 0;
+ stmt.o2.u1 = 0;
+ stmt.o3.u1 = 0;
+ if (code_statements_add(stmt) < 0)
+ return false;
return true;
}
DEFVAR(f5);
DEFVAR(print);
+ /* opts_debug = true; */
+
#if 0
BUILTIN(print, TYPE_VOID, -1);
PARAM(TYPE_STRING, text);
MKCONSTFLOAT(f1, 1.0);
MKCONSTFLOAT(f5, 5.0);
+FUNCTION(foo, TYPE_VOID);
+ENDFUNCTION(foo);
+
FUNCTION(main, TYPE_VOID);
-VAR(TYPE_FLOAT, vi);
-VAR(TYPE_FLOAT, vx);
+ VAR(TYPE_FLOAT, vi);
+ VAR(TYPE_FLOAT, vx);
-MKLOCAL(vi);
-MKLOCAL(vx);
+ MKLOCAL(vi);
+ MKLOCAL(vx);
-STATE(ASSIGN(STORE_F, vi, f0));
-WHILE(BIN(LT, vi, f5));
-STATE(ASSIGN(STORE_F, vx, BIN(MUL_F, vi, f5)));
-STATE(ASSIGN(STORE_F, vi, BIN(ADD_F, vi, f1)));
-ENDWHILE();
+ STATE(ASSIGN(STORE_F, vi, f0));
+ WHILE(BIN(LT, vi, f5));
+ STATE(ASSIGN(STORE_F, vx, BIN(MUL_F, vi, f5)));
+ STATE(ASSIGN(STORE_F, vi, BIN(ADD_F, vi, f1)));
+ ENDWHILE();
ENDFUNCTION(main);