OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gdb/] [gdb-6.8/] [gdb-6.8.openrisc-2.1/] [sim/] [igen/] [gen-model.c] - Diff between revs 24 and 33

Only display areas with differences | Details | Blame | View Log

Rev 24 Rev 33
/* The IGEN simulator generator for GDB, the GNU Debugger.
/* The IGEN simulator generator for GDB, the GNU Debugger.
 
 
   Copyright 2002, 2007, 2008 Free Software Foundation, Inc.
   Copyright 2002, 2007, 2008 Free Software Foundation, Inc.
 
 
   Contributed by Andrew Cagney.
   Contributed by Andrew Cagney.
 
 
   This file is part of GDB.
   This file is part of GDB.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 
 
#include "misc.h"
#include "misc.h"
#include "lf.h"
#include "lf.h"
#include "table.h"
#include "table.h"
 
 
#include "filter.h"
#include "filter.h"
 
 
#include "ld-decode.h"
#include "ld-decode.h"
#include "ld-insn.h"
#include "ld-insn.h"
 
 
#include "gen-model.h"
#include "gen-model.h"
 
 
#ifndef NULL
#ifndef NULL
#define NULL 0
#define NULL 0
#endif
#endif
 
 
 
 
#if 0
#if 0
static void
static void
model_c_or_h_data (insn_table *table, lf *file, table_entry *data)
model_c_or_h_data (insn_table *table, lf *file, table_entry *data)
{
{
  if (data->annex)
  if (data->annex)
    {
    {
      table_entry_print_cpp_line_nr (file, data->annex_line);
      table_entry_print_cpp_line_nr (file, data->annex_line);
      lf_print__c_code (file, data->annex);
      lf_print__c_code (file, data->annex);
      lf_print__internal_reference (file);
      lf_print__internal_reference (file);
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
}
}
 
 
static void
static void
model_c_or_h_function (insn_table *entry,
model_c_or_h_function (insn_table *entry,
                       lf *file, table_entry *function, char *prefix)
                       lf *file, table_entry *function, char *prefix)
{
{
  if (function->fields[function_type] == NULL
  if (function->fields[function_type] == NULL
      || function->fields[function_type][0] == '\0')
      || function->fields[function_type][0] == '\0')
    {
    {
      error ("Model function type not specified for %s",
      error ("Model function type not specified for %s",
             function->fields[function_name]);
             function->fields[function_name]);
    }
    }
  lf_printf (file, "\n");
  lf_printf (file, "\n");
  lf_print_function_type (file, function->fields[function_type], prefix, " ");
  lf_print_function_type (file, function->fields[function_type], prefix, " ");
  lf_printf (file, "%s\n(%s);\n",
  lf_printf (file, "%s\n(%s);\n",
             function->fields[function_name],
             function->fields[function_name],
             function->fields[function_param]);
             function->fields[function_param]);
  lf_printf (file, "\n");
  lf_printf (file, "\n");
}
}
 
 
void
void
gen_model_h (insn_table *table, lf *file)
gen_model_h (insn_table *table, lf *file)
{
{
  insn *insn_ptr;
  insn *insn_ptr;
  model *model_ptr;
  model *model_ptr;
  insn *macro;
  insn *macro;
  char *name;
  char *name;
  int model_create_p = 0;
  int model_create_p = 0;
  int model_init_p = 0;
  int model_init_p = 0;
  int model_halt_p = 0;
  int model_halt_p = 0;
  int model_mon_info_p = 0;
  int model_mon_info_p = 0;
  int model_mon_info_free_p = 0;
  int model_mon_info_free_p = 0;
 
 
  for (macro = model_macros; macro; macro = macro->next)
  for (macro = model_macros; macro; macro = macro->next)
    {
    {
      model_c_or_h_data (table, file, macro->file_entry);
      model_c_or_h_data (table, file, macro->file_entry);
    }
    }
 
 
  lf_printf (file, "typedef enum _model_enum {\n");
  lf_printf (file, "typedef enum _model_enum {\n");
  lf_printf (file, "  MODEL_NONE,\n");
  lf_printf (file, "  MODEL_NONE,\n");
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
    {
    {
      lf_printf (file, "  MODEL_%s,\n", model_ptr->name);
      lf_printf (file, "  MODEL_%s,\n", model_ptr->name);
    }
    }
  lf_printf (file, "  nr_models\n");
  lf_printf (file, "  nr_models\n");
  lf_printf (file, "} model_enum;\n");
  lf_printf (file, "} model_enum;\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  lf_printf (file, "#define DEFAULT_MODEL MODEL_%s\n",
  lf_printf (file, "#define DEFAULT_MODEL MODEL_%s\n",
             (models) ? models->name : "NONE");
             (models) ? models->name : "NONE");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  lf_printf (file, "typedef struct _model_data model_data;\n");
  lf_printf (file, "typedef struct _model_data model_data;\n");
  lf_printf (file, "typedef struct _model_time model_time;\n");
  lf_printf (file, "typedef struct _model_time model_time;\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  lf_printf (file, "extern model_enum current_model;\n");
  lf_printf (file, "extern model_enum current_model;\n");
  lf_printf (file, "extern const char *model_name[ (int)nr_models ];\n");
  lf_printf (file, "extern const char *model_name[ (int)nr_models ];\n");
  lf_printf (file,
  lf_printf (file,
             "extern const char *const *const model_func_unit_name[ (int)nr_models ];\n");
             "extern const char *const *const model_func_unit_name[ (int)nr_models ];\n");
  lf_printf (file,
  lf_printf (file,
             "extern const model_time *const model_time_mapping[ (int)nr_models ];\n");
             "extern const model_time *const model_time_mapping[ (int)nr_models ];\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  for (insn_ptr = model_functions; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_functions; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_or_h_function (table, file, insn_ptr->file_entry,
      model_c_or_h_function (table, file, insn_ptr->file_entry,
                             "INLINE_MODEL");
                             "INLINE_MODEL");
      name = insn_ptr->file_entry->fields[function_name];
      name = insn_ptr->file_entry->fields[function_name];
      if (strcmp (name, "model_create") == 0)
      if (strcmp (name, "model_create") == 0)
        model_create_p = 1;
        model_create_p = 1;
      else if (strcmp (name, "model_init") == 0)
      else if (strcmp (name, "model_init") == 0)
        model_init_p = 1;
        model_init_p = 1;
      else if (strcmp (name, "model_halt") == 0)
      else if (strcmp (name, "model_halt") == 0)
        model_halt_p = 1;
        model_halt_p = 1;
      else if (strcmp (name, "model_mon_info") == 0)
      else if (strcmp (name, "model_mon_info") == 0)
        model_mon_info_p = 1;
        model_mon_info_p = 1;
      else if (strcmp (name, "model_mon_info_free") == 0)
      else if (strcmp (name, "model_mon_info_free") == 0)
        model_mon_info_free_p = 1;
        model_mon_info_free_p = 1;
    }
    }
 
 
  if (!model_create_p)
  if (!model_create_p)
    {
    {
      lf_print_function_type (file, "model_data *", "INLINE_MODEL", " ");
      lf_print_function_type (file, "model_data *", "INLINE_MODEL", " ");
      lf_printf (file, "model_create\n");
      lf_printf (file, "model_create\n");
      lf_printf (file, "(sim_cpu *cpu);\n");
      lf_printf (file, "(sim_cpu *cpu);\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_init_p)
  if (!model_init_p)
    {
    {
      lf_print_function_type (file, "void", "INLINE_MODEL", " ");
      lf_print_function_type (file, "void", "INLINE_MODEL", " ");
      lf_printf (file, "model_init\n");
      lf_printf (file, "model_init\n");
      lf_printf (file, "(model_data *model_ptr);\n");
      lf_printf (file, "(model_data *model_ptr);\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_halt_p)
  if (!model_halt_p)
    {
    {
      lf_print_function_type (file, "void", "INLINE_MODEL", " ");
      lf_print_function_type (file, "void", "INLINE_MODEL", " ");
      lf_printf (file, "model_halt\n");
      lf_printf (file, "model_halt\n");
      lf_printf (file, "(model_data *model_ptr);\n");
      lf_printf (file, "(model_data *model_ptr);\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_mon_info_p)
  if (!model_mon_info_p)
    {
    {
      lf_print_function_type (file, "model_print *", "INLINE_MODEL", " ");
      lf_print_function_type (file, "model_print *", "INLINE_MODEL", " ");
      lf_printf (file, "model_mon_info\n");
      lf_printf (file, "model_mon_info\n");
      lf_printf (file, "(model_data *model_ptr);\n");
      lf_printf (file, "(model_data *model_ptr);\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_mon_info_free_p)
  if (!model_mon_info_free_p)
    {
    {
      lf_print_function_type (file, "void", "INLINE_MODEL", " ");
      lf_print_function_type (file, "void", "INLINE_MODEL", " ");
      lf_printf (file, "model_mon_info_free\n");
      lf_printf (file, "model_mon_info_free\n");
      lf_printf (file, "(model_data *model_ptr,\n");
      lf_printf (file, "(model_data *model_ptr,\n");
      lf_printf (file, " model_print *info_ptr);\n");
      lf_printf (file, " model_print *info_ptr);\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  lf_print_function_type (file, "void", "INLINE_MODEL", " ");
  lf_print_function_type (file, "void", "INLINE_MODEL", " ");
  lf_printf (file, "model_set\n");
  lf_printf (file, "model_set\n");
  lf_printf (file, "(const char *name);\n");
  lf_printf (file, "(const char *name);\n");
}
}
 
 
/****************************************************************/
/****************************************************************/
 
 
typedef struct _model_c_passed_data model_c_passed_data;
typedef struct _model_c_passed_data model_c_passed_data;
struct _model_c_passed_data
struct _model_c_passed_data
{
{
  lf *file;
  lf *file;
  model *model_ptr;
  model *model_ptr;
};
};
 
 
static void
static void
model_c_insn (insn_table *entry,
model_c_insn (insn_table *entry,
              lf *phony_file, void *data, insn * instruction, int depth)
              lf *phony_file, void *data, insn * instruction, int depth)
{
{
  model_c_passed_data *data_ptr = (model_c_passed_data *) data;
  model_c_passed_data *data_ptr = (model_c_passed_data *) data;
  lf *file = data_ptr->file;
  lf *file = data_ptr->file;
  char *current_name = data_ptr->model_ptr->printable_name;
  char *current_name = data_ptr->model_ptr->printable_name;
  table_model_entry *model_ptr = instruction->file_entry->model_first;
  table_model_entry *model_ptr = instruction->file_entry->model_first;
 
 
  while (model_ptr)
  while (model_ptr)
    {
    {
      if (model_ptr->fields[insn_model_name] == current_name)
      if (model_ptr->fields[insn_model_name] == current_name)
        {
        {
          lf_printf (file, "  { %-*s },  /* %s */\n",
          lf_printf (file, "  { %-*s },  /* %s */\n",
                     max_model_fields_len,
                     max_model_fields_len,
                     model_ptr->fields[insn_model_fields],
                     model_ptr->fields[insn_model_fields],
                     instruction->file_entry->fields[insn_name]);
                     instruction->file_entry->fields[insn_name]);
          return;
          return;
        }
        }
 
 
      model_ptr = model_ptr->next;
      model_ptr = model_ptr->next;
    }
    }
 
 
  lf_printf (file, "  { %-*s },  /* %s */\n",
  lf_printf (file, "  { %-*s },  /* %s */\n",
             max_model_fields_len,
             max_model_fields_len,
             data_ptr->model_ptr->insn_default,
             data_ptr->model_ptr->insn_default,
             instruction->file_entry->fields[insn_name]);
             instruction->file_entry->fields[insn_name]);
}
}
 
 
static void
static void
model_c_function (insn_table *table,
model_c_function (insn_table *table,
                  lf *file, table_entry *function, const char *prefix)
                  lf *file, table_entry *function, const char *prefix)
{
{
  if (function->fields[function_type] == NULL
  if (function->fields[function_type] == NULL
      || function->fields[function_type][0] == '\0')
      || function->fields[function_type][0] == '\0')
    {
    {
      error ("Model function return type not specified for %s",
      error ("Model function return type not specified for %s",
             function->fields[function_name]);
             function->fields[function_name]);
    }
    }
  else
  else
    {
    {
      lf_printf (file, "\n");
      lf_printf (file, "\n");
      lf_print_function_type (file, function->fields[function_type], prefix,
      lf_print_function_type (file, function->fields[function_type], prefix,
                              "\n");
                              "\n");
      lf_printf (file, "%s(%s)\n", function->fields[function_name],
      lf_printf (file, "%s(%s)\n", function->fields[function_name],
                 function->fields[function_param]);
                 function->fields[function_param]);
    }
    }
  lf_printf (file, "{\n");
  lf_printf (file, "{\n");
  if (function->annex)
  if (function->annex)
    {
    {
      lf_indent (file, +2);
      lf_indent (file, +2);
      table_entry_print_cpp_line_nr (file, function->annex_line);
      table_entry_print_cpp_line_nr (file, function->annex_line);
      lf_print__c_code (file, function->annex);
      lf_print__c_code (file, function->annex);
      lf_indent (file, -2);
      lf_indent (file, -2);
    }
    }
  lf_printf (file, "}\n");
  lf_printf (file, "}\n");
  lf_print__internal_reference (file);
  lf_print__internal_reference (file);
  lf_printf (file, "\n");
  lf_printf (file, "\n");
}
}
 
 
void
void
gen_model_c (insn_table *table, lf *file)
gen_model_c (insn_table *table, lf *file)
{
{
  insn *insn_ptr;
  insn *insn_ptr;
  model *model_ptr;
  model *model_ptr;
  char *name;
  char *name;
  int model_create_p = 0;
  int model_create_p = 0;
  int model_init_p = 0;
  int model_init_p = 0;
  int model_halt_p = 0;
  int model_halt_p = 0;
  int model_mon_info_p = 0;
  int model_mon_info_p = 0;
  int model_mon_info_free_p = 0;
  int model_mon_info_free_p = 0;
 
 
  lf_printf (file, "\n");
  lf_printf (file, "\n");
  lf_printf (file, "#include \"cpu.h\"\n");
  lf_printf (file, "#include \"cpu.h\"\n");
  lf_printf (file, "#include \"mon.h\"\n");
  lf_printf (file, "#include \"mon.h\"\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
  lf_printf (file, "#ifdef HAVE_STDLIB_H\n");
  lf_printf (file, "#ifdef HAVE_STDLIB_H\n");
  lf_printf (file, "#include <stdlib.h>\n");
  lf_printf (file, "#include <stdlib.h>\n");
  lf_printf (file, "#endif\n");
  lf_printf (file, "#endif\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  for (insn_ptr = model_data; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_data; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_or_h_data (table, file, insn_ptr->file_entry);
      model_c_or_h_data (table, file, insn_ptr->file_entry);
    }
    }
 
 
  for (insn_ptr = model_static; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_static; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_or_h_function (table, file, insn_ptr->file_entry,
      model_c_or_h_function (table, file, insn_ptr->file_entry,
                             "/*h*/STATIC");
                             "/*h*/STATIC");
    }
    }
 
 
  for (insn_ptr = model_internal; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_internal; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_or_h_function (table, file, insn_ptr->file_entry,
      model_c_or_h_function (table, file, insn_ptr->file_entry,
                             "STATIC_INLINE_MODEL");
                             "STATIC_INLINE_MODEL");
    }
    }
 
 
  for (insn_ptr = model_static; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_static; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_function (table, file, insn_ptr->file_entry, "/*c*/STATIC");
      model_c_function (table, file, insn_ptr->file_entry, "/*c*/STATIC");
    }
    }
 
 
  for (insn_ptr = model_internal; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_internal; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_function (table, file, insn_ptr->file_entry,
      model_c_function (table, file, insn_ptr->file_entry,
                        "STATIC_INLINE_MODEL");
                        "STATIC_INLINE_MODEL");
    }
    }
 
 
  for (insn_ptr = model_functions; insn_ptr; insn_ptr = insn_ptr->next)
  for (insn_ptr = model_functions; insn_ptr; insn_ptr = insn_ptr->next)
    {
    {
      model_c_function (table, file, insn_ptr->file_entry, "INLINE_MODEL");
      model_c_function (table, file, insn_ptr->file_entry, "INLINE_MODEL");
      name = insn_ptr->file_entry->fields[function_name];
      name = insn_ptr->file_entry->fields[function_name];
      if (strcmp (name, "model_create") == 0)
      if (strcmp (name, "model_create") == 0)
        model_create_p = 1;
        model_create_p = 1;
      else if (strcmp (name, "model_init") == 0)
      else if (strcmp (name, "model_init") == 0)
        model_init_p = 1;
        model_init_p = 1;
      else if (strcmp (name, "model_halt") == 0)
      else if (strcmp (name, "model_halt") == 0)
        model_halt_p = 1;
        model_halt_p = 1;
      else if (strcmp (name, "model_mon_info") == 0)
      else if (strcmp (name, "model_mon_info") == 0)
        model_mon_info_p = 1;
        model_mon_info_p = 1;
      else if (strcmp (name, "model_mon_info_free") == 0)
      else if (strcmp (name, "model_mon_info_free") == 0)
        model_mon_info_free_p = 1;
        model_mon_info_free_p = 1;
    }
    }
 
 
  if (!model_create_p)
  if (!model_create_p)
    {
    {
      lf_print_function_type (file, "model_data *", "INLINE_MODEL", "\n");
      lf_print_function_type (file, "model_data *", "INLINE_MODEL", "\n");
      lf_printf (file, "model_create(sim_cpu *cpu)\n");
      lf_printf (file, "model_create(sim_cpu *cpu)\n");
      lf_printf (file, "{\n");
      lf_printf (file, "{\n");
      lf_printf (file, "  return (model_data *)0;\n");
      lf_printf (file, "  return (model_data *)0;\n");
      lf_printf (file, "}\n");
      lf_printf (file, "}\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_init_p)
  if (!model_init_p)
    {
    {
      lf_print_function_type (file, "void", "INLINE_MODEL", "\n");
      lf_print_function_type (file, "void", "INLINE_MODEL", "\n");
      lf_printf (file, "model_init(model_data *model_ptr)\n");
      lf_printf (file, "model_init(model_data *model_ptr)\n");
      lf_printf (file, "{\n");
      lf_printf (file, "{\n");
      lf_printf (file, "}\n");
      lf_printf (file, "}\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_halt_p)
  if (!model_halt_p)
    {
    {
      lf_print_function_type (file, "void", "INLINE_MODEL", "\n");
      lf_print_function_type (file, "void", "INLINE_MODEL", "\n");
      lf_printf (file, "model_halt(model_data *model_ptr)\n");
      lf_printf (file, "model_halt(model_data *model_ptr)\n");
      lf_printf (file, "{\n");
      lf_printf (file, "{\n");
      lf_printf (file, "}\n");
      lf_printf (file, "}\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_mon_info_p)
  if (!model_mon_info_p)
    {
    {
      lf_print_function_type (file, "model_print *", "INLINE_MODEL", "\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, "model_mon_info(model_data *model_ptr)\n");
      lf_printf (file, "{\n");
      lf_printf (file, "{\n");
      lf_printf (file, "  return (model_print *)0;\n");
      lf_printf (file, "  return (model_print *)0;\n");
      lf_printf (file, "}\n");
      lf_printf (file, "}\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  if (!model_mon_info_free_p)
  if (!model_mon_info_free_p)
    {
    {
      lf_print_function_type (file, "void", "INLINE_MODEL", "\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_mon_info_free(model_data *model_ptr,\n");
      lf_printf (file, "                    model_print *info_ptr)\n");
      lf_printf (file, "                    model_print *info_ptr)\n");
      lf_printf (file, "{\n");
      lf_printf (file, "{\n");
      lf_printf (file, "}\n");
      lf_printf (file, "}\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
    }
    }
 
 
  lf_printf (file, "/* Insn functional unit info */\n");
  lf_printf (file, "/* Insn functional unit info */\n");
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
    {
    {
      model_c_passed_data data;
      model_c_passed_data data;
 
 
      lf_printf (file, "static const model_time model_time_%s[] = {\n",
      lf_printf (file, "static const model_time model_time_%s[] = {\n",
                 model_ptr->name);
                 model_ptr->name);
      data.file = file;
      data.file = file;
      data.model_ptr = model_ptr;
      data.model_ptr = model_ptr;
      insn_table_traverse_insn (table, NULL, (void *) &data, model_c_insn);
      insn_table_traverse_insn (table, NULL, (void *) &data, model_c_insn);
 
 
      lf_printf (file, "};\n");
      lf_printf (file, "};\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
      lf_printf (file, "\f\n");
      lf_printf (file, "\f\n");
    }
    }
 
 
  lf_printf (file, "#ifndef _INLINE_C_\n");
  lf_printf (file, "#ifndef _INLINE_C_\n");
  lf_printf (file,
  lf_printf (file,
             "const model_time *const model_time_mapping[ (int)nr_models ] = {\n");
             "const model_time *const model_time_mapping[ (int)nr_models ] = {\n");
  lf_printf (file, "  (const model_time *const)0,\n");
  lf_printf (file, "  (const model_time *const)0,\n");
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
    {
    {
      lf_printf (file, "  model_time_%s,\n", model_ptr->name);
      lf_printf (file, "  model_time_%s,\n", model_ptr->name);
    }
    }
  lf_printf (file, "};\n");
  lf_printf (file, "};\n");
  lf_printf (file, "#endif\n");
  lf_printf (file, "#endif\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  lf_printf (file, "\f\n");
  lf_printf (file, "\f\n");
  lf_printf (file, "/* map model enumeration into printable string */\n");
  lf_printf (file, "/* map model enumeration into printable string */\n");
  lf_printf (file, "#ifndef _INLINE_C_\n");
  lf_printf (file, "#ifndef _INLINE_C_\n");
  lf_printf (file, "const char *model_name[ (int)nr_models ] = {\n");
  lf_printf (file, "const char *model_name[ (int)nr_models ] = {\n");
  lf_printf (file, "  \"NONE\",\n");
  lf_printf (file, "  \"NONE\",\n");
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
  for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
    {
    {
      lf_printf (file, "  \"%s\",\n", model_ptr->printable_name);
      lf_printf (file, "  \"%s\",\n", model_ptr->printable_name);
    }
    }
  lf_printf (file, "};\n");
  lf_printf (file, "};\n");
  lf_printf (file, "#endif\n");
  lf_printf (file, "#endif\n");
  lf_printf (file, "\n");
  lf_printf (file, "\n");
 
 
  lf_print_function_type (file, "void", "INLINE_MODEL", "\n");
  lf_print_function_type (file, "void", "INLINE_MODEL", "\n");
  lf_printf (file, "model_set(const char *name)\n");
  lf_printf (file, "model_set(const char *name)\n");
  lf_printf (file, "{\n");
  lf_printf (file, "{\n");
  if (models)
  if (models)
    {
    {
      lf_printf (file, "  model_enum model;\n");
      lf_printf (file, "  model_enum model;\n");
      lf_printf (file,
      lf_printf (file,
                 "  for(model = MODEL_%s; model < nr_models; model++) {\n",
                 "  for(model = MODEL_%s; model < nr_models; model++) {\n",
                 models->name);
                 models->name);
      lf_printf (file, "    if(strcmp(name, model_name[model]) == 0) {\n");
      lf_printf (file, "    if(strcmp(name, model_name[model]) == 0) {\n");
      lf_printf (file, "      current_model = model;\n");
      lf_printf (file, "      current_model = model;\n");
      lf_printf (file, "      return;\n");
      lf_printf (file, "      return;\n");
      lf_printf (file, "    }\n");
      lf_printf (file, "    }\n");
      lf_printf (file, "  }\n");
      lf_printf (file, "  }\n");
      lf_printf (file, "\n");
      lf_printf (file, "\n");
      lf_printf (file,
      lf_printf (file,
                 "  error(\"Unknown model '%%s', Models which are known are:%%s\n\",\n");
                 "  error(\"Unknown model '%%s', Models which are known are:%%s\n\",\n");
      lf_printf (file, "        name,\n");
      lf_printf (file, "        name,\n");
      lf_printf (file, "        \"");
      lf_printf (file, "        \"");
      for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
      for (model_ptr = models; model_ptr; model_ptr = model_ptr->next)
        {
        {
          lf_printf (file, "\\n\\t%s", model_ptr->printable_name);
          lf_printf (file, "\\n\\t%s", model_ptr->printable_name);
        }
        }
      lf_printf (file, "\");\n");
      lf_printf (file, "\");\n");
    }
    }
  else
  else
    {
    {
      lf_printf (file, "  error(\"No models are currently known about\");\n");
      lf_printf (file, "  error(\"No models are currently known about\");\n");
    }
    }
 
 
  lf_printf (file, "}\n");
  lf_printf (file, "}\n");
}
}
 
 
#endif
#endif
 
 
 
 
 
 
void
void
gen_model_h (lf *file, insn_table *table)
gen_model_h (lf *file, insn_table *table)
{
{
  lf_print__this_file_is_empty (file, "suffering bit rot");
  lf_print__this_file_is_empty (file, "suffering bit rot");
}
}
 
 
 
 
void
void
gen_model_c (lf *file, insn_table *table)
gen_model_c (lf *file, insn_table *table)
{
{
  lf_print__this_file_is_empty (file, "suffering bit rot");
  lf_print__this_file_is_empty (file, "suffering bit rot");
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.