void output_code_test (OrcProgram *p, FILE *output);
void output_code_backup (OrcProgram *p, FILE *output);
void output_code_no_orc (OrcProgram *p, FILE *output);
+void output_code_assembly (OrcProgram *p, FILE *output);
static void print_defines (FILE *output);
static void print_exec_header (FILE *output);
static char * get_barrier (const char *s);
enum {
MODE_IMPL,
MODE_HEADER,
- MODE_TEST
+ MODE_TEST,
+ MODE_ASSEMBLY
};
int mode = MODE_IMPL;
printf(" --implementation Produce C code implementing functions\n");
printf(" --header Produce C header for functions\n");
printf(" --test Produce test code for functions\n");
+ printf(" --assembly Produce assembly code for functions\n");
printf(" --include FILE Generate #include <FILE> in code\n");
printf("\n");
mode = MODE_IMPL;
} else if (strcmp(argv[i], "--test") == 0) {
mode = MODE_TEST;
+ } else if (strcmp(argv[i], "--assembly") == 0) {
+ mode = MODE_ASSEMBLY;
} else if (strcmp(argv[i], "--include") == 0) {
if (i+1 < argc) {
include_file = argv[i+1];
fprintf(output, " };\n");
fprintf(output, " return 0;\n");
fprintf(output, "}\n");
+ } else if (mode == MODE_ASSEMBLY) {
+ //fprintf(output, "#ifndef DISABLE_ORC\n");
+ //fprintf(output, "#include <orc/orc.h>\n");
+ //fprintf(output, "#else\n");
+ //fprintf(output, "#include <stdint.h>\n");
+ //print_exec_header (output);
+ //fprintf(output, "#endif\n");
+ //if (include_file) {
+ //fprintf(output, "#include <%s>\n", include_file);
+ //}
+ //fprintf(output, "\n");
+ //print_defines (output);
+ //fprintf(output, "\n");
+ for(i=0;i<n;i++){
+ output_code_assembly (programs[i], output);
+ }
}
fclose (output);
}
+void
+output_code_assembly (OrcProgram *p, FILE *output)
+{
+
+ fprintf(output, "/* %s */\n", p->name);
+ //output_prototype (p, output);
+ {
+ OrcCompileResult result;
+
+ //result = orc_program_compile_full (p, orc_target_get_by_name("sse"), 0);
+ result = orc_program_compile (p);
+ if (ORC_COMPILE_RESULT_IS_SUCCESSFUL(result)) {
+ fprintf(output, "%s\n", orc_program_get_asm_code (p));
+ } else {
+ fprintf(output, "/* failed to compile */\n");
+ }
+ }
+ fprintf(output, "\n");
+
+}
+