From 2df19f0cd5c9ceb4b00b5195dbd3ec96e4236fe9 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Sat, 27 Jun 2009 22:30:31 -0700 Subject: [PATCH] orcc: Add code for gthread mutexes --- tools/orcc.c | 78 ++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/tools/orcc.c b/tools/orcc.c index 660c103..fce5ef1 100644 --- a/tools/orcc.c +++ b/tools/orcc.c @@ -11,6 +11,12 @@ void output_code (OrcProgram *p, FILE *output); void output_code_header (OrcProgram *p, FILE *output); void output_code_test (OrcProgram *p, FILE *output); +typedef enum { + MUTEX_STYLE_SCHRO, + MUTEX_STYLE_GLIB +} MutexStyle; +MutexStyle mutex_style = MUTEX_STYLE_GLIB; + int main (int argc, char *argv[]) { @@ -43,16 +49,28 @@ main (int argc, char *argv[]) fprintf(output, "#include \n"); fprintf(output, "#include \n"); fprintf(output, "#include \n"); -fprintf(output, "#include \n"); -fprintf(output, "#define MUTEX_LOCK schro_mutex_lock (orc_mutex);\n"); -fprintf(output, "#define MUTEX_UNLOCK schro_mutex_unlock (orc_mutex);\n"); -fprintf(output, "SchroMutex *orc_mutex;\n"); + switch (mutex_style) { + case MUTEX_STYLE_SCHRO: + fprintf(output, "#include \n"); + fprintf(output, "#define MUTEX_LOCK() schro_mutex_lock (orc_mutex)\n"); + fprintf(output, "#define MUTEX_UNLOCK() schro_mutex_unlock (orc_mutex)\n"); + fprintf(output, "SchroMutex *orc_mutex;\n"); + break; + case MUTEX_STYLE_GLIB: + fprintf(output, "#include \n"); + fprintf(output, "#define MUTEX_LOCK() g_static_mutex_lock (&orc_mutex)\n"); + fprintf(output, "#define MUTEX_UNLOCK() g_static_mutex_unlock (&orc_mutex)\n"); + fprintf(output, "static GStaticMutex orc_mutex = G_STATIC_MUTEX_INIT;\n"); + break; + default: + break; + } fprintf(output, "\n"); fprintf(output, "#ifndef MUTEX_LOCK\n"); - fprintf(output, "#define MUTEX_LOCK\n"); + fprintf(output, "#define MUTEX_LOCK do { } while (0)\n"); fprintf(output, "#endif\n"); fprintf(output, "#ifndef MUTEX_UNLOCK\n"); - fprintf(output, "#define MUTEX_UNLOCK\n"); + fprintf(output, "#define MUTEX_UNLOCK do { } while (0)\n"); fprintf(output, "#endif\n"); fprintf(output, "\n"); fprintf(output, "\n"); @@ -93,7 +111,8 @@ fprintf(output, "SchroMutex *orc_mutex;\n"); fprintf(output, "#include \n"); fprintf(output, "\n"); fprintf(output, "\n"); - fprintf(output, "int main (int argc, char *argv[])\n"); + fprintf(output, "int\n"); + fprintf(output, "main (int argc, char *argv[])\n"); fprintf(output, "{\n"); fprintf(output, " int error = FALSE;\n"); fprintf(output, "\n"); @@ -103,7 +122,9 @@ fprintf(output, "SchroMutex *orc_mutex;\n"); output_code_test (programs[i], output); } fprintf(output, "\n"); - fprintf(output, " if (error) return 1;\n"); + fprintf(output, " if (error) {\n"); + fprintf(output, " return 1;\n"); + fprintf(output, " };\n"); fprintf(output, " return 0;\n"); fprintf(output, "}\n"); @@ -202,10 +223,10 @@ output_code_header (OrcProgram *p, FILE *output) var = &p->vars[ORC_VAR_D1 + i]; if (var->size) { if (var->type_name) { - fprintf(output, "%s *%s, ", var->type_name, + fprintf(output, "%s * %s, ", var->type_name, varnames[ORC_VAR_D1 + i]); } else { - fprintf(output, "uint%d_t *%s, ", var->size*8, + fprintf(output, "uint%d_t * %s, ", var->size*8, varnames[ORC_VAR_D1 + i]); } } @@ -214,10 +235,10 @@ output_code_header (OrcProgram *p, FILE *output) var = &p->vars[ORC_VAR_A1 + i]; if (var->size) { if (var->type_name) { - fprintf(output, "%s *%s, ", var->type_name, + fprintf(output, "%s * %s, ", var->type_name, varnames[ORC_VAR_A1 + i]); } else { - fprintf(output, "uint%d_t *%s, ", var->size*8, + fprintf(output, "uint%d_t * %s, ", var->size*8, varnames[ORC_VAR_A1 + i]); } } @@ -226,10 +247,10 @@ output_code_header (OrcProgram *p, FILE *output) var = &p->vars[ORC_VAR_S1 + i]; if (var->size) { if (var->type_name) { - fprintf(output, "%s *%s, ", var->type_name, + fprintf(output, "%s * %s, ", var->type_name, varnames[ORC_VAR_S1 + i]); } else { - fprintf(output, "uint%d_t *%s, ", var->size*8, + fprintf(output, "uint%d_t * %s, ", var->size*8, varnames[ORC_VAR_S1 + i]); } } @@ -258,10 +279,10 @@ output_code (OrcProgram *p, FILE *output) var = &p->vars[ORC_VAR_D1 + i]; if (var->size) { if (var->type_name) { - fprintf(output, "%s *%s, ", var->type_name, + fprintf(output, "%s * %s, ", var->type_name, varnames[ORC_VAR_D1 + i]); } else { - fprintf(output, "uint%d_t *%s, ", var->size*8, + fprintf(output, "uint%d_t * %s, ", var->size*8, varnames[ORC_VAR_D1 + i]); } } @@ -270,10 +291,10 @@ output_code (OrcProgram *p, FILE *output) var = &p->vars[ORC_VAR_A1 + i]; if (var->size) { if (var->type_name) { - fprintf(output, "%s *%s, ", var->type_name, + fprintf(output, "%s * %s, ", var->type_name, varnames[ORC_VAR_A1 + i]); } else { - fprintf(output, "uint%d_t *%s, ", var->size*8, + fprintf(output, "uint%d_t * %s, ", var->size*8, varnames[ORC_VAR_A1 + i]); } } @@ -282,10 +303,10 @@ output_code (OrcProgram *p, FILE *output) var = &p->vars[ORC_VAR_S1 + i]; if (var->size) { if (var->type_name) { - fprintf(output, "%s *%s, ", var->type_name, + fprintf(output, "%s * %s, ", var->type_name, varnames[ORC_VAR_S1 + i]); } else { - fprintf(output, "uint%d_t *%s, ", var->size*8, + fprintf(output, "uint%d_t * %s, ", var->size*8, varnames[ORC_VAR_S1 + i]); } } @@ -303,7 +324,7 @@ output_code (OrcProgram *p, FILE *output) fprintf(output, " OrcExecutor _ex, *ex = &_ex;\n"); fprintf(output, "\n"); fprintf(output, " if (!p_inited) {\n"); - fprintf(output, " MUTEX_LOCK\n"); + fprintf(output, " MUTEX_LOCK ();\n"); fprintf(output, " if (!p_inited) {\n"); fprintf(output, " OrcCompileResult result;\n"); fprintf(output, "\n"); @@ -369,11 +390,11 @@ output_code (OrcProgram *p, FILE *output) fprintf(output, "\n"); fprintf(output, " result = orc_program_compile (p);\n"); fprintf(output, " if (!ORC_COMPILE_RESULT_IS_SUCCESSFUL (result)) {\n"); - fprintf(output, " abort();\n"); + fprintf(output, " abort ();\n"); fprintf(output, " }\n"); fprintf(output, " }\n"); fprintf(output, " p_inited = TRUE;\n"); - fprintf(output, " MUTEX_UNLOCK\n"); + fprintf(output, " MUTEX_UNLOCK ();\n"); fprintf(output, " }\n"); fprintf(output, "\n"); //fprintf(output, " orc_executor_set_program (ex, p);\n"); @@ -408,8 +429,8 @@ output_code (OrcProgram *p, FILE *output) } } fprintf(output, "\n"); - //fprintf(output, " orc_executor_run (ex);\n"); - fprintf(output, " ((void (*)(OrcExecutor *))ex->program->code_exec)(ex);\n"); + fprintf(output, " orc_executor_run (ex);\n"); + //fprintf(output, " ((void (*)(OrcExecutor *))ex->program->code_exec)(ex);\n"); for(i=0;i<4;i++){ var = &p->vars[ORC_VAR_A1 + i]; if (var->size) { @@ -418,7 +439,6 @@ output_code (OrcProgram *p, FILE *output) } } fprintf(output, "}\n"); - fprintf(output, "\n"); } @@ -435,7 +455,7 @@ output_code_test (OrcProgram *p, FILE *output) fprintf(output, "\n"); fprintf(output, " OrcCompileResult result;\n"); fprintf(output, "\n"); - fprintf(output, " printf(\"%s:\\n\");\n", p->name); + fprintf(output, " printf (\"%s:\\n\");\n", p->name); fprintf(output, " p = orc_program_new ();\n"); fprintf(output, " orc_program_set_name (p, \"%s\");\n", p->name); for(i=0;i<4;i++){ @@ -497,7 +517,9 @@ output_code_test (OrcProgram *p, FILE *output) fprintf(output, "\n"); fprintf(output, " ret = orc_test_compare_output (p);\n"); - fprintf(output, " if (!ret) error = TRUE;\n"); + fprintf(output, " if (!ret) {\n"); + fprintf(output, " error = TRUE;\n"); + fprintf(output, " }\n"); fprintf(output, "\n"); fprintf(output, " orc_program_free (p);\n"); fprintf(output, " }\n"); -- 2.7.4