⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 igen.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	    else	      {		chp = chp + 1;	/* skip `=' */		names = NULL;		if (strncmp (optarg, "global=", chp - optarg) == 0)		  {		    names = &options.module.global;		  }		if (strncmp (optarg, "engine=", chp - optarg) == 0)		  {		    names = &options.module.engine;		  }		if (strncmp (optarg, "icache=", chp - optarg) == 0)		  {		    names = &options.module.icache;		  }		if (strncmp (optarg, "idecode=", chp - optarg) == 0)		  {		    names = &options.module.idecode;		  }		if (strncmp (optarg, "itable=", chp - optarg) == 0)		  {		    names = &options.module.itable;		  }		if (strncmp (optarg, "semantics=", chp - optarg) == 0)		  {		    names = &options.module.semantics;		  }		if (strncmp (optarg, "support=", chp - optarg) == 0)		  {		    names = &options.module.support;		  }		if (names == NULL)		  {		    error (NULL, "Prefix `%s' unreconized\n", optarg);		  }	      }	    switch (ch)	      {	      case 'P':		name = &names->prefix;		break;	      case 'S':		name = &names->suffix;		break;	      default:		abort ();	/* Bad switch.  */	      }	    name->u = strdup (chp);	    name->l = strdup (chp);	    chp = name->u;	    while (*chp)	      {		if (islower (*chp))		  *chp = toupper (*chp);		chp++;	      }	    if (name == &options.module.global.prefix)	      {		options.module.engine.prefix = options.module.global.prefix;		options.module.icache.prefix = options.module.global.prefix;		options.module.idecode.prefix = options.module.global.prefix;		/* options.module.itable.prefix = options.module.global.prefix; */		options.module.semantics.prefix =		  options.module.global.prefix;		options.module.support.prefix = options.module.global.prefix;	      }	    if (name == &options.module.global.suffix)	      {		options.module.engine.suffix = options.module.global.suffix;		options.module.icache.suffix = options.module.global.suffix;		options.module.idecode.suffix = options.module.global.suffix;		/* options.module.itable.suffix = options.module.global.suffix; */		options.module.semantics.suffix =		  options.module.global.suffix;		options.module.support.suffix = options.module.global.suffix;	      }	    break;	  }	case 'W':	  {	    if (strcmp (optarg, "error") == 0)	      options.warning = error;	    else if (strcmp (optarg, "nodiscard") == 0)	      options.warn.discard = 0;	    else if (strcmp (optarg, "discard") == 0)	      options.warn.discard = 1;	    else if (strcmp (optarg, "nowidth") == 0)	      options.warn.width = 0;	    else if (strcmp (optarg, "width") == 0)	      options.warn.width = 1;	    else if (strcmp (optarg, "nounimplemented") == 0)	      options.warn.unimplemented = 0;	    else if (strcmp (optarg, "unimplemented") == 0)	      options.warn.unimplemented = 1;	    else	      error (NULL, "Unknown -W argument `%s'\n", optarg);	    break;	  }	case 'G':	  {	    int enable_p;	    char *argp;	    if (strncmp (optarg, "no-", strlen ("no-")) == 0)	      {		argp = optarg + strlen ("no-");		enable_p = 0;	      }	    else if (strncmp (optarg, "!", strlen ("!")) == 0)	      {		argp = optarg + strlen ("no-");		enable_p = 0;	      }	    else	      {		argp = optarg;		enable_p = 1;	      }	    if (strcmp (argp, "decode-duplicate") == 0)	      {		options.decode.duplicate = enable_p;	      }	    else if (strcmp (argp, "decode-combine") == 0)	      {		options.decode.combine = enable_p;	      }	    else if (strcmp (argp, "decode-zero-reserved") == 0)	      {		options.decode.zero_reserved = enable_p;	      }	    else if (strcmp (argp, "gen-conditional-issue") == 0)	      {		options.gen.conditional_issue = enable_p;	      }	    else if (strcmp (argp, "conditional-issue") == 0)	      {		options.gen.conditional_issue = enable_p;		options.warning (NULL,				 "Option conditional-issue replaced by gen-conditional-issue\n");	      }	    else if (strcmp (argp, "gen-delayed-branch") == 0)	      {		options.gen.delayed_branch = enable_p;	      }	    else if (strcmp (argp, "delayed-branch") == 0)	      {		options.gen.delayed_branch = enable_p;		options.warning (NULL,				 "Option delayed-branch replaced by gen-delayed-branch\n");	      }	    else if (strcmp (argp, "gen-direct-access") == 0)	      {		options.gen.direct_access = enable_p;	      }	    else if (strcmp (argp, "direct-access") == 0)	      {		options.gen.direct_access = enable_p;		options.warning (NULL,				 "Option direct-access replaced by gen-direct-access\n");	      }	    else if (strncmp (argp, "gen-zero-r", strlen ("gen-zero-r")) == 0)	      {		options.gen.zero_reg = enable_p;		options.gen.zero_reg_nr = atoi (argp + strlen ("gen-zero-r"));	      }	    else if (strncmp (argp, "zero-r", strlen ("zero-r")) == 0)	      {		options.gen.zero_reg = enable_p;		options.gen.zero_reg_nr = atoi (argp + strlen ("zero-r"));		options.warning (NULL,				 "Option zero-r<N> replaced by gen-zero-r<N>\n");	      }	    else if (strncmp (argp, "gen-icache", strlen ("gen-icache")) == 0)	      {		switch (argp[strlen ("gen-icache")])		  {		  case '=':		    options.gen.icache_size =		      atoi (argp + strlen ("gen-icache") + 1);		    options.gen.icache = enable_p;		    break;		  case '\0':		    options.gen.icache = enable_p;		    break;		  default:		    error (NULL,			   "Expecting -Ggen-icache or -Ggen-icache=<N>\n");		  }	      }	    else if (strcmp (argp, "gen-insn-in-icache") == 0)	      {		options.gen.insn_in_icache = enable_p;	      }	    else if (strncmp (argp, "gen-multi-sim", strlen ("gen-multi-sim"))		     == 0)	      {		char *arg = &argp[strlen ("gen-multi-sim")];		switch (arg[0])		  {		  case '=':		    options.gen.multi_sim = enable_p;		    options.gen.default_model = arg + 1;		    if (!filter_is_member			(options.model_filter, options.gen.default_model))		      error (NULL, "multi-sim model %s unknown\n",			     options.gen.default_model);		    break;		  case '\0':		    options.gen.multi_sim = enable_p;		    options.gen.default_model = NULL;		    break;		  default:		    error (NULL,			   "Expecting -Ggen-multi-sim or -Ggen-multi-sim=<MODEL>\n");		    break;		  }	      }	    else if (strcmp (argp, "gen-multi-word") == 0)	      {		options.gen.multi_word = enable_p;	      }	    else if (strcmp (argp, "gen-semantic-icache") == 0)	      {		options.gen.semantic_icache = enable_p;	      }	    else if (strcmp (argp, "gen-slot-verification") == 0)	      {		options.gen.slot_verification = enable_p;	      }	    else if (strcmp (argp, "verify-slot") == 0)	      {		options.gen.slot_verification = enable_p;		options.warning (NULL,				 "Option verify-slot replaced by gen-slot-verification\n");	      }	    else if (strcmp (argp, "gen-nia-invalid") == 0)	      {		options.gen.nia = nia_is_invalid;	      }	    else if (strcmp (argp, "default-nia-minus-one") == 0)	      {		options.gen.nia = nia_is_invalid;		options.warning (NULL,				 "Option default-nia-minus-one replaced by gen-nia-invalid\n");	      }	    else if (strcmp (argp, "gen-nia-void") == 0)	      {		options.gen.nia = nia_is_void;	      }	    else if (strcmp (argp, "trace-all") == 0)	      {		memset (&options.trace, enable_p, sizeof (options.trace));	      }	    else if (strcmp (argp, "trace-combine") == 0)	      {		options.trace.combine = enable_p;	      }	    else if (strcmp (argp, "trace-entries") == 0)	      {		options.trace.entries = enable_p;	      }	    else if (strcmp (argp, "trace-rule-rejection") == 0)	      {		options.trace.rule_rejection = enable_p;	      }	    else if (strcmp (argp, "trace-rule-selection") == 0)	      {		options.trace.rule_selection = enable_p;	      }	    else if (strcmp (argp, "trace-insn-insertion") == 0)	      {		options.trace.insn_insertion = enable_p;	      }	    else if (strcmp (argp, "trace-insn-expansion") == 0)	      {		options.trace.insn_expansion = enable_p;	      }	    else if (strcmp (argp, "jumps") == 0)	      {		options.gen.code = generate_jumps;	      }	    else if (strcmp (argp, "field-widths") == 0)	      {		options.insn_specifying_widths = enable_p;	      }	    else if (strcmp (argp, "omit-line-numbers") == 0)	      {		file_references = lf_omit_references;	      }	    else	      {		error (NULL, "Unknown option %s\n", optarg);	      }	    break;	  }	case 'i':	  isa = load_insn_table (optarg, cache_rules);	  if (isa->illegal_insn == NULL)	    error (NULL, "illegal-instruction missing from insn table\n");	  break;	case 'x':	  gen = do_gen (isa, decode_rules);	  break;	case 'o':	  decode_rules = load_decode_table (optarg);	  break;	case 'k':	  if (isa != NULL)	    error (NULL, "Cache file must appear before the insn file\n");	  cache_rules = load_cache_table (optarg);	  break;	case 'n':	  real_file_name = strdup (optarg);	  break;	case 'h':	  is_header = 1;	  break;	case 'c':	case 'd':	case 'e':	case 'f':	case 'm':	case 'r':	case 's':	case 't':	  {	    lf *file = lf_open (optarg, real_file_name, file_references,				(is_header ? lf_is_h : lf_is_c),				argv[0]);	    if (gen == NULL && ch != 't' && ch != 'm' && ch != 'f')	      {		options.warning (NULL,				 "Explicitly generate tables with -x option\n");		gen = do_gen (isa, decode_rules);	      }	    lf_print__file_start (file);	    switch (ch)	      {	      case 'm':		if (is_header)		  gen_model_h (file, isa);		else		  gen_model_c (file, isa);		break;	      case 't':		if (is_header)		  gen_itable_h (file, isa);		else		  gen_itable_c (file, isa);		break;	      case 'f':		if (is_header)		  gen_support_h (file, isa);		else		  gen_support_c (file, isa);		break;	      case 'r':		if (is_header)		  options.warning (NULL, "-hr option ignored\n");		else		  gen_run_c (file, gen);		break;	      case 's':		if (is_header)		  gen_semantics_h (file, gen->semantics, isa->max_nr_words);		else		  gen_semantics_c (file, gen->semantics, isa->caches);		break;	      case 'd':		if (is_header)		  gen_idecode_h (file, gen, isa, cache_rules);		else		  gen_idecode_c (file, gen, isa, cache_rules);		break;	      case 'e':		if (is_header)		  gen_engine_h (file, gen, isa, cache_rules);		else		  gen_engine_c (file, gen, isa, cache_rules);		break;	      case 'c':		if (is_header)		  gen_icache_h (file,				gen->semantics,				isa->functions, isa->max_nr_words);		else		  gen_icache_c (file,				gen->semantics, isa->functions, cache_rules);		break;	      }	    lf_print__file_finish (file);	    lf_close (file);	    is_header = 0;	  }	  real_file_name = NULL;	  break;	default:	  ERROR ("Bad switch");	}    }  return (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -