#include "config.h" #include #include #include #include #include #include int verbose = 0; int error = 0; int compat; char *target = "sse"; #define ORC_VERSION(a,b,c,d) ((a)*1000000 + (b)*10000 + (c)*100 + (d)) #define REQUIRE(a,b,c,d) do { \ if (ORC_VERSION((a),(b),(c),(d)) > compat) { \ fprintf(stderr, "Feature used that is incompatible with --compat\n"); \ exit (1); \ } \ } while (0) void help (void) { printf("Usage:\n"); printf(" generate-bytecode [OPTION...]\n"); printf("\n"); printf("Help Options:\n"); printf(" -h, --help Show help options\n"); printf("\n"); printf("Application Options:\n"); printf(" -o, --output FILE Write output to FILE\n"); printf(" --header Write header instead of .c file\n"); printf("\n"); exit (0); } int main (int argc, char *argv[]) { char *output_file = NULL; char *input_file = NULL; FILE *output; int i; OrcOpcodeSet *opcode_set; int output_header = FALSE; orc_init (); for(i=1;i\n"); fprintf(output, "#include \n"); fprintf(output, "\n"); fprintf(output, "typedef enum {\n"); fprintf(output, " ORC_BC_END,\n"); fprintf(output, " ORC_BC_BEGIN_FUNCTION,\n"); fprintf(output, " ORC_BC_END_FUNCTION,\n"); fprintf(output, " ORC_BC_SET_CONSTANT_N,\n"); fprintf(output, " ORC_BC_SET_N_MULTIPLE,\n"); fprintf(output, " ORC_BC_SET_N_MINIMUM,\n"); fprintf(output, " ORC_BC_SET_N_MAXIMUM,\n"); fprintf(output, " ORC_BC_SET_2D,\n"); fprintf(output, " ORC_BC_SET_CONSTANT_M,\n"); fprintf(output, " ORC_BC_SET_NAME,\n"); fprintf(output, " ORC_BC_SET_BACKUP_FUNCTION,\n"); fprintf(output, " ORC_BC_ADD_DESTINATION,\n"); fprintf(output, " ORC_BC_ADD_SOURCE,\n"); fprintf(output, " ORC_BC_ADD_ACCUMULATOR,\n"); fprintf(output, " ORC_BC_ADD_CONSTANT,\n"); fprintf(output, " ORC_BC_ADD_CONSTANT_INT64,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER_FLOAT,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER_INT64,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER_DOUBLE,\n"); fprintf(output, " ORC_BC_ADD_TEMPORARY,\n"); fprintf(output, " ORC_BC_INSTRUCTION_FLAGS,\n"); for (i=22;i<32;i++){ fprintf(output, " ORC_BC_RESERVED_%d,\n", i); } for(i=0;in_opcodes;i++){ OrcStaticOpcode *opcode = opcode_set->opcodes + i; if ((i+32)%10 == 0) { fprintf(output, " /* %d */\n", i+32); } fprintf(output, " ORC_BC_%s,\n", opcode->name); } fprintf(output, " /* %d */\n", i+32); fprintf(output, " ORC_BC_LAST\n"); fprintf(output, "} OrcBytecodes;\n"); } else { fprintf(output, "#ifdef HAVE_CONFIG_H\n"); fprintf(output, "#include \"config.h\"\n"); fprintf(output, "#endif\n"); fprintf(output, " ORC_BC_END,\n"); fprintf(output, " ORC_BC_BEGIN_FUNCTION,\n"); fprintf(output, " ORC_BC_END_FUNCTION,\n"); fprintf(output, " ORC_BC_SET_CONSTANT_N,\n"); fprintf(output, " ORC_BC_SET_N_MULTIPLE,\n"); fprintf(output, " ORC_BC_SET_N_MINIMUM,\n"); fprintf(output, " ORC_BC_SET_N_MAXIMUM,\n"); fprintf(output, " ORC_BC_SET_2D,\n"); fprintf(output, " ORC_BC_SET_CONSTANT_M,\n"); fprintf(output, " ORC_BC_SET_NAME,\n"); fprintf(output, " ORC_BC_SET_BACKUP_FUNCTION,\n"); fprintf(output, " ORC_BC_ADD_DESTINATION,\n"); fprintf(output, " ORC_BC_ADD_SOURCE,\n"); fprintf(output, " ORC_BC_ADD_ACCUMULATOR,\n"); fprintf(output, " ORC_BC_ADD_CONSTANT,\n"); fprintf(output, " ORC_BC_ADD_CONSTANT_INT64,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER_FLOAT,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER_INT64,\n"); fprintf(output, " ORC_BC_ADD_PARAMETER_DOUBLE,\n"); fprintf(output, " ORC_BC_ADD_TEMPORARY,\n"); fprintf(output, " ORC_BC_INSTRUCTION_FLAGS,\n"); for (i=22;i<32;i++){ fprintf(output, " ORC_BC_RESERVED_%d,\n", i); } for(i=0;in_opcodes;i++){ OrcStaticOpcode *opcode = opcode_set->opcodes + i; if ((i+32)%10 == 0) { fprintf(output, " /* %d */\n", i+32); } fprintf(output, " { \"%s\" },\n", opcode->name); } fprintf(output, " /* %d */\n", i+32); fprintf(output, " ORC_BC_LAST\n"); fprintf(output, "} OrcBytecodes;\n"); } fclose (output); if (error) exit(1); return 0; }