diff options
Diffstat (limited to 'sim/ppc')
-rw-r--r-- | sim/ppc/ChangeLog | 19 | ||||
-rw-r--r-- | sim/ppc/igen.c | 178 |
2 files changed, 92 insertions, 105 deletions
diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog index 3224510..24cfe91 100644 --- a/sim/ppc/ChangeLog +++ b/sim/ppc/ChangeLog @@ -1,3 +1,22 @@ +Thu Mar 21 00:06:09 1996 Andrew Cagney <cagney@kremvax.highland.com.au> + + * main.c (error): Be careful to not try to print out statistics + when the simulation was never created. + +Thu Mar 7 19:53:49 1996 Michael Meissner <meissner@cygnus.com> + + * emul_netbsd.c: Only include sys/mount.h if HAVE_SYS_MOUNT_H is + defined. + * configure.in: Test for sys/mount.h. + * configure,config.in: Regenerate. + +Mon Feb 26 21:11:20 1996 Andrew Cagney - aka Noid <cagney@highland.com.au> + + * igen.c (idecode_switch_end): Output a default entry when the + switch statement is perfect. Firstly stops GCC complaining about + an incomplete switch and secondly it will be eliminated by a good + compiler any way. + Thu Feb 22 22:48:57 1996 Andrew Cagney <cagney@highland.com.au> * README, RUN, INSTALL: Update to reflect announcement diff --git a/sim/ppc/igen.c b/sim/ppc/igen.c index d3f87bb..44c3f77 100644 --- a/sim/ppc/igen.c +++ b/sim/ppc/igen.c @@ -1543,7 +1543,8 @@ lf_print_semantic_function_header(lf *file, int is_inline_function) { lf_printf(file, "\n"); - lf_printf(file, "STATIC_SEMANTICS unsigned_word "); + lf_print_function_type(file, "unsigned_word", "EXTERN_SEMANTICS", + " "); lf_print_function_name(file, basename, expanded_bits, @@ -1599,8 +1600,9 @@ semantics_h_function(insn_table *entry, } else { lf_printf(file, "\n"); - lf_printf(file, "INLINE_SEMANTICS %s %s\n(%s);\n", - function->fields[function_type], + lf_print_function_type(file, function->fields[function_type], + "INLINE_SEMANTICS", " "); + lf_printf(file, "%s\n(%s);\n", function->fields[function_name], function->fields[function_param]); } @@ -1616,15 +1618,6 @@ gen_semantics_h(insn_table *table, lf *file) lf_printf(file, "#ifndef _SEMANTICS_H_\n"); lf_printf(file, "#define _SEMANTICS_H_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef INLINE_SEMANTICS\n"); - lf_printf(file, "#define INLINE_SEMANTICS\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "#ifndef STATIC_SEMANTICS\n"); - lf_printf(file, "#define STATIC_SEMANTICS\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "\n"); /* output a declaration for all functions */ insn_table_traverse_function(table, @@ -1722,10 +1715,6 @@ gen_icache_h(icache_tree *tree, lf_printf(file, "#ifndef _ICACHE_H_\n"); lf_printf(file, "#define _ICACHE_H_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef INLINE_ICACHE\n"); - lf_printf(file, "#define INLINE_ICACHE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); lf_printf(file, "#define WITH_IDECODE_CACHE_SIZE %d\n", idecode_cache); @@ -2292,8 +2281,9 @@ semantics_c_function(insn_table *table, } else { lf_printf(file, "\n"); - lf_printf(file, "INLINE_SEMANTICS %s\n%s(%s)\n", - function->fields[function_type], + lf_print_function_type(file, function->fields[function_type], + "INLINE_SEMANTICS", "\n"); + lf_printf(file, "%s(%s)\n", function->fields[function_name], function->fields[function_param]); } @@ -2316,10 +2306,6 @@ gen_semantics_c(insn_table *table, lf *file) lf_printf(file, "#ifndef _SEMANTICS_C_\n"); lf_printf(file, "#define _SEMANTICS_C_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef STATIC_INLINE_SEMANTICS\n"); - lf_printf(file, "#define STATIC_INLINE_SEMANTICS STATIC_INLINE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); lf_printf(file, "#include \"cpu.h\"\n"); lf_printf(file, "#include \"idecode.h\"\n"); lf_printf(file, "#include \"semantics.h\"\n"); @@ -2359,10 +2345,6 @@ gen_idecode_h(insn_table *table, lf *file) lf_printf(file, "#ifndef _IDECODE_H_\n"); lf_printf(file, "#define _IDECODE_H_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef INLINE_IDECODE\n"); - lf_printf(file, "#define INLINE_IDECODE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); lf_printf(file, "#include \"idecode_expression.h\"\n"); lf_printf(file, "#include \"idecode_fields.h\"\n"); lf_printf(file, "#include \"idecode_branch.h\"\n"); @@ -2372,12 +2354,14 @@ gen_idecode_h(insn_table *table, lf *file) lf_printf(file, "typedef unsigned_word idecode_semantic\n(%s);\n", (idecode_cache ? cache_semantic_formal : semantic_formal)); lf_printf(file, "\n"); - if (idecode_cache) - lf_printf(file, "INLINE_IDECODE idecode_semantic *idecode\n(%s);\n", - cache_idecode_formal); - else - lf_printf(file, "INLINE_IDECODE unsigned_word idecode_issue\n(%s);\n", - semantic_formal); + if (idecode_cache) { + lf_print_function_type(file, "idecode_semantic *", "INLINE_IDECODE", " "); + lf_printf(file, "idecode\n(%s);\n", cache_idecode_formal); + } + else { + lf_print_function_type(file, "unsigned_word", "INLINE_IDECODE", " "); + lf_printf(file, "idecode_issue\n(%s);\n", semantic_formal); + } lf_printf(file, "\n"); lf_printf(file, "#endif /* _IDECODE_H_ */\n"); } @@ -2566,11 +2550,14 @@ idecode_switch_end(insn_table *table, ASSERT(table->opcode_rule->use_switch); ASSERT(table->opcode); + lf_printf(file, "default:\n"); if (table->opcode_rule->use_switch == 1 && !table->opcode->is_boolean) { - lf_printf(file, "default:\n"); lf_print_idecode_switch_illegal(file); } + else { + lf_printf(file, " error(\"igen internal error - bad switch generated\n\");\n"); + } lf_printf(file, "}\n"); } @@ -2680,7 +2667,7 @@ lf_print_c_cracker_function(lf *file, { /* if needed, generate code to enter this routine into a cache */ lf_printf(file, "\n"); - lf_printf(file, "STATIC_IDECODE idecode_semantic *\n"); + lf_printf(file, "static idecode_semantic *\n"); lf_print_function_name(file, instruction->file_entry->fields[insn_name], expanded_bits, @@ -2733,7 +2720,8 @@ idecode_c_internal_function(insn_table *table, ASSERT(idecode_cache != 0); if (it_is("internal", function->fields[insn_flags])) { lf_printf(file, "\n"); - lf_printf(file, "STATIC_INLINE_IDECODE idecode_semantic *\n"); + lf_print_function_type(file, "idecode_semantic *", "STATIC_INLINE_IDECODE", + "\n"); lf_print_function_name(file, function->fields[insn_name], NULL, @@ -2771,14 +2759,6 @@ gen_idecode_c(insn_table *table, lf *file) lf_printf(file, "#ifndef _IDECODE_C_\n"); lf_printf(file, "#define _IDECODE_C_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef STATIC_INLINE_IDECODE\n"); - lf_printf(file, "#define STATIC_INLINE_IDECODE STATIC_INLINE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "#ifndef STATIC_IDECODE\n"); - lf_printf(file, "#define STATIC_IDECODE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); lf_printf(file, "#include \"cpu.h\"\n"); lf_printf(file, "#include \"idecode.h\"\n"); lf_printf(file, "#include \"semantics.h\"\n"); @@ -2848,12 +2828,14 @@ gen_idecode_c(insn_table *table, lf *file) /* output the main idecode routine */ lf_printf(file, "\n"); - if (idecode_cache) - lf_printf(file, "INLINE_IDECODE idecode_semantic *\nidecode\n(%s)\n", - cache_idecode_formal); - else - lf_printf(file, "INLINE_IDECODE unsigned_word\nidecode_issue\n(%s)\n", - semantic_formal); + if (idecode_cache) { + lf_print_function_type(file, "idecode_semantic *", "INLINE_IDECODE", "\n"); + lf_printf(file, "idecode\n(%s)\n", cache_idecode_formal); + } + else { + lf_print_function_type(file, "unsigned_word", "INLINE_IDECODE", "\n"); + lf_printf(file, "idecode_issue\n(%s)\n", semantic_formal); + } lf_printf(file, "{\n"); lf_indent(file, +2); if (table->opcode_rule->use_switch) @@ -2893,11 +2875,6 @@ gen_itable_h(insn_table *table, lf *file) lf_printf(file, "#ifndef _ITABLE_H_\n"); lf_printf(file, "#define _ITABLE_H_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef INLINE_ITABLE\n"); - lf_printf(file, "#define INLINE_ITABLE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "\n"); /* output an enumerated type for each instruction */ lf_printf(file, "typedef enum {\n"); @@ -2958,10 +2935,6 @@ gen_itable_c(insn_table *table, lf *file) lf_printf(file, "#ifndef _ITABLE_C_\n"); lf_printf(file, "#define _ITABLE_C_\n"); lf_printf(file, "\n"); - lf_printf(file, "#ifndef STATIC_INLINE_ITABLE\n"); - lf_printf(file, "#define STATIC_INLINE_ITABLE STATIC_INLINE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); lf_printf(file, "#include \"itable.h\"\n"); lf_printf(file, "\n"); @@ -3002,14 +2975,11 @@ model_c_or_h_function(insn_table *entry, || function->fields[function_type][0] == '\0') { error("Model function type not specified for %s", function->fields[function_name]); } - else { - lf_printf(file, "\n"); - lf_printf(file, "%s %s %s\n(%s);\n", - prefix, - function->fields[function_type], - function->fields[function_name], - function->fields[function_param]); - } + lf_printf(file, "\n"); + lf_print_function_type(file, function->fields[function_type], prefix, " "); + lf_printf(file, "%s\n(%s);\n", + function->fields[function_name], + function->fields[function_param]); lf_printf(file, "\n"); } @@ -3036,22 +3006,6 @@ gen_model_h(insn_table *table, lf *file) model_c_or_h_data(table, file, macro->file_entry); } - lf_printf(file, "#ifndef INLINE_MODEL\n"); - lf_printf(file, "#define INLINE_MODEL\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "#ifndef STATIC_INLINE_MODEL\n"); - lf_printf(file, "#define STATIC_INLINE_MODEL STATIC_INLINE\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "#ifndef STATIC_MODEL\n"); - lf_printf(file, "#define STATIC_MODEL\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "#ifndef EXTERN_MODEL\n"); - lf_printf(file, "#define EXTERN_MODEL extern\n"); - lf_printf(file, "#endif\n"); - lf_printf(file, "\n"); - lf_printf(file, "typedef enum _model_enum {\n"); lf_printf(file, " MODEL_NONE,\n"); for (model_ptr = models; model_ptr; model_ptr = model_ptr->next) { @@ -3069,9 +3023,9 @@ gen_model_h(insn_table *table, lf *file) lf_printf(file, "\n"); lf_printf(file, "extern model_enum current_model;\n"); - lf_printf(file, "EXTERN_MODEL const char *model_name[ (int)nr_models ];\n"); - lf_printf(file, "EXTERN_MODEL const char *const *const model_func_unit_name[ (int)nr_models ];\n"); - lf_printf(file, "EXTERN_MODEL const model_time *const model_time_mapping[ (int)nr_models ];\n"); + lf_printf(file, "extern const char *model_name[ (int)nr_models ];\n"); + lf_printf(file, "extern const char *const *const model_func_unit_name[ (int)nr_models ];\n"); + lf_printf(file, "extern const model_time *const model_time_mapping[ (int)nr_models ];\n"); lf_printf(file, "\n"); for(insn_ptr = model_functions; insn_ptr; insn_ptr = insn_ptr->next) { @@ -3090,37 +3044,43 @@ gen_model_h(insn_table *table, lf *file) } if (!model_create_p) { - lf_printf(file, "INLINE_MODEL model_data *model_create\n"); + lf_print_function_type(file, "model_data *", "INLINE_MODEL", " "); + lf_printf(file, "model_create\n"); lf_printf(file, "(cpu *processor);\n"); lf_printf(file, "\n"); } if (!model_init_p) { - lf_printf(file, "INLINE_MODEL void model_init\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", " "); + lf_printf(file, "model_init\n"); lf_printf(file, "(model_data *model_ptr);\n"); lf_printf(file, "\n"); } if (!model_halt_p) { - lf_printf(file, "INLINE_MODEL void model_halt\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", " "); + lf_printf(file, "model_halt\n"); lf_printf(file, "(model_data *model_ptr);\n"); lf_printf(file, "\n"); } if (!model_mon_info_p) { - lf_printf(file, "INLINE_MODEL model_print *model_mon_info\n"); + lf_print_function_type(file, "model_print *", "INLINE_MODEL", " "); + lf_printf(file, "model_mon_info\n"); lf_printf(file, "(model_data *model_ptr);\n"); lf_printf(file, "\n"); } if (!model_mon_info_free_p) { - lf_printf(file, "INLINE_MODEL void model_mon_info_free\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", " "); + lf_printf(file, "model_mon_info_free\n"); lf_printf(file, "(model_data *model_ptr,\n"); lf_printf(file, " model_print *info_ptr);\n"); lf_printf(file, "\n"); } - lf_printf(file, "INLINE_MODEL void model_set\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", " "); + lf_printf(file, "model_set\n"); lf_printf(file, "(const char *name);\n"); lf_printf(file, "\n"); lf_printf(file, "#endif /* _MODEL_H_ */\n"); @@ -3174,9 +3134,8 @@ model_c_function(insn_table *table, } else { lf_printf(file, "\n"); - lf_printf(file, "%s %s\n%s(%s)\n", - prefix, - function->fields[function_type], + lf_print_function_type(file, function->fields[function_type], prefix, "\n"); + lf_printf(file, "%s(%s)\n", function->fields[function_name], function->fields[function_param]); } @@ -3222,7 +3181,7 @@ gen_model_c(insn_table *table, lf *file) } for(insn_ptr = model_static; insn_ptr; insn_ptr = insn_ptr->next) { - model_c_or_h_function(table, file, insn_ptr->file_entry, "STATIC_MODEL"); + model_c_or_h_function(table, file, insn_ptr->file_entry, "/*h*/STATIC"); } for(insn_ptr = model_internal; insn_ptr; insn_ptr = insn_ptr->next) { @@ -3230,7 +3189,7 @@ gen_model_c(insn_table *table, lf *file) } for(insn_ptr = model_static; insn_ptr; insn_ptr = insn_ptr->next) { - model_c_function(table, file, insn_ptr->file_entry, "STATIC_MODEL"); + model_c_function(table, file, insn_ptr->file_entry, "/*c*/STATIC"); } for(insn_ptr = model_internal; insn_ptr; insn_ptr = insn_ptr->next) { @@ -3253,7 +3212,8 @@ gen_model_c(insn_table *table, lf *file) } if (!model_create_p) { - lf_printf(file, "INLINE_MODEL model_data *model_create(cpu *processor)\n"); + lf_print_function_type(file, "model_data *", "INLINE_MODEL", "\n"); + lf_printf(file, "model_create(cpu *processor)\n"); lf_printf(file, "{\n"); lf_printf(file, " return (model_data *)0;\n"); lf_printf(file, "}\n"); @@ -3261,21 +3221,24 @@ gen_model_c(insn_table *table, lf *file) } if (!model_init_p) { - lf_printf(file, "INLINE_MODEL void model_init(model_data *model_ptr)\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", "\n"); + lf_printf(file, "model_init(model_data *model_ptr)\n"); lf_printf(file, "{\n"); lf_printf(file, "}\n"); lf_printf(file, "\n"); } if (!model_halt_p) { - lf_printf(file, "INLINE_MODEL void model_halt(model_data *model_ptr)\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", "\n"); + lf_printf(file, "model_halt(model_data *model_ptr)\n"); lf_printf(file, "{\n"); lf_printf(file, "}\n"); lf_printf(file, "\n"); } if (!model_mon_info_p) { - lf_printf(file, "INLINE_MODEL model_print *model_mon_info(model_data *model_ptr)\n"); + lf_print_function_type(file, "model_print *", "INLINE_MODEL", "\n"); + lf_printf(file, "model_mon_info(model_data *model_ptr)\n"); lf_printf(file, "{\n"); lf_printf(file, " return (model_print *)0;\n"); lf_printf(file, "}\n"); @@ -3283,8 +3246,9 @@ gen_model_c(insn_table *table, lf *file) } if (!model_mon_info_free_p) { - lf_printf(file, "INLINE_MODEL void model_mon_info_free(model_data *model_ptr,\n"); - lf_printf(file, " model_print *info_ptr)\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", "\n"); + lf_printf(file, "model_mon_info_free(model_data *model_ptr,\n"); + lf_printf(file, " model_print *info_ptr)\n"); lf_printf(file, "{\n"); lf_printf(file, "}\n"); lf_printf(file, "\n"); @@ -3306,25 +3270,29 @@ gen_model_c(insn_table *table, lf *file) lf_printf(file, "\f\n"); } - lf_printf(file, "STATIC_MODEL const model_time *const model_time_mapping[ (int)nr_models ] = {\n"); + lf_printf(file, "#ifndef _INLINE_C_\n"); + lf_printf(file, "const model_time *const model_time_mapping[ (int)nr_models ] = {\n"); lf_printf(file, " (const model_time *const)0,\n"); for(model_ptr = models; model_ptr; model_ptr = model_ptr->next) { lf_printf(file, " model_time_%s,\n", model_ptr->name); } lf_printf(file, "};\n"); + lf_printf(file, "#endif\n"); lf_printf(file, "\n"); lf_printf(file, "\f\n"); lf_printf(file, "/* map model enumeration into printable string */\n"); - lf_printf(file, "STATIC_MODEL const char *model_name[ (int)nr_models ] = {\n"); + lf_printf(file, "#ifndef _INLINE_C_\n"); + lf_printf(file, "const char *model_name[ (int)nr_models ] = {\n"); lf_printf(file, " \"NONE\",\n"); for (model_ptr = models; model_ptr; model_ptr = model_ptr->next) { lf_printf(file, " \"%s\",\n", model_ptr->printable_name); } lf_printf(file, "};\n"); + lf_printf(file, "#endif\n"); lf_printf(file, "\n"); - lf_printf(file, "INLINE_MODEL void\n"); + lf_print_function_type(file, "void", "INLINE_MODEL", "\n"); lf_printf(file, "model_set(const char *name)\n"); lf_printf(file, "{\n"); if (models) { |