亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cris-dis.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/* Return the number of bits in the argument.  */static intnumber_of_bits (unsigned int val){  int bits;  for (bits = 0; val != 0; val &= val - 1)    bits++;  return bits;}/* Get an entry in the opcode-table.  */static const struct cris_opcode *get_opcode_entry (unsigned int insn,		  unsigned int prefix_insn,		  struct cris_disasm_data *disdata){  /* For non-prefixed insns, we keep a table of pointers, indexed by the     insn code.  Each entry is initialized when found to be NULL.  */  static const struct cris_opcode **opc_table = NULL;  const struct cris_opcode *max_matchedp = NULL;  const struct cris_opcode **prefix_opc_table = NULL;  /* We hold a table for each prefix that need to be handled differently.  */  static const struct cris_opcode **dip_prefixes = NULL;  static const struct cris_opcode **bdapq_m1_prefixes = NULL;  static const struct cris_opcode **bdapq_m2_prefixes = NULL;  static const struct cris_opcode **bdapq_m4_prefixes = NULL;  static const struct cris_opcode **rest_prefixes = NULL;  /* Allocate and clear the opcode-table.  */  if (opc_table == NULL)    {      opc_table = malloc (65536 * sizeof (opc_table[0]));      if (opc_table == NULL)	return NULL;      memset (opc_table, 0, 65536 * sizeof (const struct cris_opcode *));      dip_prefixes	= malloc (65536 * sizeof (const struct cris_opcode **));      if (dip_prefixes == NULL)	return NULL;      memset (dip_prefixes, 0, 65536 * sizeof (dip_prefixes[0]));      bdapq_m1_prefixes	= malloc (65536 * sizeof (const struct cris_opcode **));      if (bdapq_m1_prefixes == NULL)	return NULL;      memset (bdapq_m1_prefixes, 0, 65536 * sizeof (bdapq_m1_prefixes[0]));      bdapq_m2_prefixes	= malloc (65536 * sizeof (const struct cris_opcode **));      if (bdapq_m2_prefixes == NULL)	return NULL;      memset (bdapq_m2_prefixes, 0, 65536 * sizeof (bdapq_m2_prefixes[0]));      bdapq_m4_prefixes	= malloc (65536 * sizeof (const struct cris_opcode **));      if (bdapq_m4_prefixes == NULL)	return NULL;      memset (bdapq_m4_prefixes, 0, 65536 * sizeof (bdapq_m4_prefixes[0]));      rest_prefixes	= malloc (65536 * sizeof (const struct cris_opcode **));      if (rest_prefixes == NULL)	return NULL;      memset (rest_prefixes, 0, 65536 * sizeof (rest_prefixes[0]));    }  /* Get the right table if this is a prefix.     This code is connected to cris_constraints in that it knows what     prefixes play a role in recognition of patterns; the necessary     state is reflected by which table is used.  If constraints     involving match or non-match of prefix insns are changed, then this     probably needs changing too.  */  if (prefix_insn != NO_CRIS_PREFIX)    {      const struct cris_opcode *popcodep	= (opc_table[prefix_insn] != NULL	   ? opc_table[prefix_insn]	   : get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata));      if (popcodep == NULL)	return NULL;      if (popcodep->match == BDAP_QUICK_OPCODE)	{	  /* Since some offsets are recognized with "push" macros, we	     have to have different tables for them.  */	  int offset = (prefix_insn & 255);	  if (offset > 127)	    offset -= 256;	  switch (offset)	    {	    case -4:	      prefix_opc_table = bdapq_m4_prefixes;	      break;	    case -2:	      prefix_opc_table = bdapq_m2_prefixes;	      break;	    case -1:	      prefix_opc_table = bdapq_m1_prefixes;	      break;	    default:	      prefix_opc_table = rest_prefixes;	      break;	    }	}      else if (popcodep->match == DIP_OPCODE)	/* We don't allow postincrement when the prefix is DIP, so use a	   different table for DIP.  */	prefix_opc_table = dip_prefixes;      else	prefix_opc_table = rest_prefixes;    }  if (prefix_insn != NO_CRIS_PREFIX      && prefix_opc_table[insn] != NULL)    max_matchedp = prefix_opc_table[insn];  else if (prefix_insn == NO_CRIS_PREFIX && opc_table[insn] != NULL)    max_matchedp = opc_table[insn];  else    {      const struct cris_opcode *opcodep;      int max_level_of_match = -1;      for (opcodep = cris_opcodes;	   opcodep->name != NULL;	   opcodep++)	{	  int level_of_match;	  if (disdata->distype == cris_dis_v32)	    {	      switch (opcodep->applicable_version)		{		case cris_ver_version_all:		  break;		case cris_ver_v0_3:		case cris_ver_v0_10:		case cris_ver_v3_10:		case cris_ver_sim_v0_10:		case cris_ver_v8_10:		case cris_ver_v10:		case cris_ver_warning:		  continue;		case cris_ver_v3p:		case cris_ver_v8p:		case cris_ver_v10p:		case cris_ver_v32p:		  break;		case cris_ver_v8:		  abort ();		default:		  abort ();		}	    }	  else	    {	      switch (opcodep->applicable_version)		{		case cris_ver_version_all:		case cris_ver_v0_3:		case cris_ver_v3p:		case cris_ver_v0_10:		case cris_ver_v8p:		case cris_ver_v8_10:		case cris_ver_v10:		case cris_ver_sim_v0_10:		case cris_ver_v10p:		case cris_ver_warning:		  break;		case cris_ver_v32p:		  continue;		case cris_ver_v8:		  abort ();		default:		  abort ();		}	    }	  /* We give a double lead for bits matching the template in	     cris_opcodes.  Not even, because then "move p8,r10" would	     be given 2 bits lead over "clear.d r10".  When there's a	     tie, the first entry in the table wins.  This is	     deliberate, to avoid a more complicated recognition	     formula.  */	  if ((opcodep->match & insn) == opcodep->match	      && (opcodep->lose & insn) == 0	      && ((level_of_match		   = cris_constraint (opcodep->args,				      insn,				      prefix_insn,				      disdata))		  >= 0)	      && ((level_of_match		   += 2 * number_of_bits (opcodep->match					  | opcodep->lose))			  > max_level_of_match))		    {		      max_matchedp = opcodep;		      max_level_of_match = level_of_match;		      /* If there was a full match, never mind looking			 further.  */		      if (level_of_match >= 2 * 16)			break;		    }		}      /* Fill in the new entry.	 If there are changes to the opcode-table involving prefixes, and	 disassembly then does not work correctly, try removing the	 else-clause below that fills in the prefix-table.  If that	 helps, you need to change the prefix_opc_table setting above, or	 something related.  */      if (prefix_insn == NO_CRIS_PREFIX)	opc_table[insn] = max_matchedp;      else	prefix_opc_table[insn] = max_matchedp;    }  return max_matchedp;}/* Return -1 if the constraints of a bitwise-matched instruction say   that there is no match.  Otherwise return a nonnegative number   indicating the confidence in the match (higher is better).  */static intcris_constraint (const char *cs,		 unsigned int insn,		 unsigned int prefix_insn,		 struct cris_disasm_data *disdata){  int retval = 0;  int tmp;  int prefix_ok = 0;  const char *s;  for (s = cs; *s; s++)    switch (*s)      {      case '!':	/* Do not recognize "pop" if there's a prefix and then only for           v0..v10.  */	if (prefix_insn != NO_CRIS_PREFIX	    || disdata->distype != cris_dis_v0_v10)	  return -1;	break;      case 'U':	/* Not recognized at disassembly.  */	return -1;      case 'M':	/* Size modifier for "clear", i.e. special register 0, 4 or 8.	   Check that it is one of them.  Only special register 12 could	   be mismatched, but checking for matches is more logical than	   checking for mismatches when there are only a few cases.  */	tmp = ((insn >> 12) & 0xf);	if (tmp != 0 && tmp != 4 && tmp != 8)	  return -1;	break;      case 'm':	if ((insn & 0x30) == 0x30)	  return -1;	break;      case 'S':	/* A prefix operand without side-effect.  */	if (prefix_insn != NO_CRIS_PREFIX && (insn & 0x400) == 0)	  {	    prefix_ok = 1;	    break;	  }	else	  return -1;      case 's':      case 'y':      case 'Y':	/* If this is a prefixed insn with postincrement (side-effect),	   the prefix must not be DIP.  */	if (prefix_insn != NO_CRIS_PREFIX)	  {	    if (insn & 0x400)	      {		const struct cris_opcode *prefix_opcodep		  = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata);		if (prefix_opcodep->match == DIP_OPCODE)		  return -1;	      }	    prefix_ok = 1;	  }	break;      case 'B':	/* If we don't fall through, then the prefix is ok.  */	prefix_ok = 1;	/* A "push" prefix.  Check for valid "push" size.	   In case of special register, it may be != 4.  */	if (prefix_insn != NO_CRIS_PREFIX)	  {	    /* Match the prefix insn to BDAPQ.  */	    const struct cris_opcode *prefix_opcodep	      = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata);	    if (prefix_opcodep->match == BDAP_QUICK_OPCODE)	      {		int pushsize = (prefix_insn & 255);		if (pushsize > 127)		  pushsize -= 256;		if (s[1] == 'P')		  {		    unsigned int spec_reg = (insn >> 12) & 15;		    const struct cris_spec_reg *sregp		      = spec_reg_info (spec_reg, disdata->distype);		    /* For a special-register, the "prefix size" must		       match the size of the register.  */		    if (sregp && sregp->reg_size == (unsigned int) -pushsize)		      break;		  }		else if (s[1] == 'R')		  {		    if ((insn & 0x30) == 0x20 && pushsize == -4)		      break;		  }		/* FIXME:  Should abort here; next constraint letter		   *must* be 'P' or 'R'.  */	      }	  }	return -1;      case 'D':	retval = (((insn >> 12) & 15) == (insn & 15));	if (!retval)	  return -1;	else	  retval += 4;	break;      case 'P':	{	  const struct cris_spec_reg *sregp	    = spec_reg_info ((insn >> 12) & 15, disdata->distype);	  /* Since we match four bits, we will give a value of 4-1 = 3	     in a match.  If there is a corresponding exact match of a	     special register in another pattern, it will get a value of	     4, which will be higher.  This should be correct in that an	     exact pattern would match better than a general pattern.	     Note that there is a reason for not returning zero; the	     pattern for "clear" is partly  matched in the bit-pattern	     (the two lower bits must be zero), while the bit-pattern	     for a move from a special register is matched in the	     register constraint.  */	  if (sregp != NULL)	    {	      retval += 3;	      break;	    }	  else	    return -1;	}      }  if (prefix_insn != NO_CRIS_PREFIX && ! prefix_ok)    return -1;  return retval;}/* Format number as hex with a leading "0x" into outbuffer.  */static char *format_hex (unsigned long number,	    char *outbuffer,	    struct cris_disasm_data *disdata){  /* Truncate negative numbers on >32-bit hosts.  */  number &= 0xffffffff;  sprintf (outbuffer, "0x%lx", number);  /* Save this value for the "case" support.  */  if (TRACE_CASE)    last_immediate = number;  return outbuffer + strlen (outbuffer);}/* Format number as decimal into outbuffer.  Parameter signedp says   whether the number should be formatted as signed (!= 0) or   unsigned (== 0).  */static char *format_dec (long number, char *outbuffer, int signedp){  last_immediate = number;  sprintf (outbuffer, signedp ? "%ld" : "%lu", number);  return outbuffer + strlen (outbuffer);}/* Format the name of the general register regno into outbuffer.  */static char *format_reg (struct cris_disasm_data *disdata,	    int regno,	    char *outbuffer_start,	    bfd_boolean with_reg_prefix){  char *outbuffer = outbuffer_start;  if (with_reg_prefix)    *outbuffer++ = REGISTER_PREFIX_CHAR;  switch (regno)    {    case 15:      /* For v32, there is no context in which we output PC.  */      if (disdata->distype == cris_dis_v32)	strcpy (outbuffer, "acr");      else

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲av色图| 久久电影网电视剧免费观看| 国产精品美女久久久久高潮| 26uuu精品一区二区| 亚洲精品一区二区三区在线观看| 日韩免费视频一区| 日韩一级欧美一级| 欧美va日韩va| 久久久久久久久蜜桃| 国产亚洲精品精华液| 国产偷国产偷亚洲高清人白洁| 国产人成亚洲第一网站在线播放| 国产日韩在线不卡| 中文字幕一区二区三| 樱花影视一区二区| 亚洲v精品v日韩v欧美v专区| 午夜婷婷国产麻豆精品| 日本女人一区二区三区| 国模套图日韩精品一区二区| 国产在线精品一区二区三区不卡 | 日韩电影在线一区二区三区| 日日欢夜夜爽一区| 久久99精品视频| 成人视屏免费看| 色伊人久久综合中文字幕| 欧美亚洲国产一区二区三区va | 欧美一卡二卡在线观看| 精品成人私密视频| 国产精品久久久久久久久图文区| 一区二区三区视频在线观看| 欧美a级一区二区| 国产v综合v亚洲欧| 欧美性做爰猛烈叫床潮| 日韩免费电影一区| 国产精品久久久久毛片软件| 亚洲一区二区三区四区在线 | 欧美性一区二区| 日韩一区二区三区免费看 | 久久福利视频一区二区| 国产成人丝袜美腿| 欧美午夜一区二区三区免费大片| 日韩欧美亚洲一区二区| 中文字幕日韩一区| 日本成人中文字幕在线视频| 丁香婷婷综合激情五月色| 色欧美片视频在线观看在线视频| 欧美一级黄色片| 最新久久zyz资源站| 视频一区中文字幕国产| 成人激情综合网站| 欧美精品日韩精品| 国产日产欧美一区| 日本三级亚洲精品| av电影在线观看完整版一区二区| 欧美日韩一区二区三区四区 | 中文字幕欧美区| 亚洲地区一二三色| 成人免费观看av| 欧美精品vⅰdeose4hd| 中文字幕一区二区在线播放| 免费人成黄页网站在线一区二区| 91麻豆免费视频| 欧美精品一区二| 亚洲国产精品久久不卡毛片| 懂色av中文一区二区三区| 91精品国产日韩91久久久久久| 中文字幕的久久| 国产一区二区主播在线| 欧美浪妇xxxx高跟鞋交| 亚洲人123区| 国产成人在线色| 日韩欧美成人午夜| 亚洲一区二区三区四区的| 国产成人午夜片在线观看高清观看| 3d动漫精品啪啪一区二区竹菊| 亚洲乱码国产乱码精品精的特点| 国产精品自在欧美一区| 欧美va亚洲va在线观看蝴蝶网| 午夜精品成人在线| 色94色欧美sute亚洲线路一久 | 亚洲午夜日本在线观看| 91在线观看一区二区| 久久九九久久九九| 狠狠v欧美v日韩v亚洲ⅴ| 91精选在线观看| 亚洲国产欧美另类丝袜| 91久久精品日日躁夜夜躁欧美| 国产精品久久国产精麻豆99网站| 国产呦精品一区二区三区网站| 91精品国产91综合久久蜜臀| 午夜精品免费在线观看| 欧洲亚洲精品在线| 一区二区三区在线视频观看| 99久久综合国产精品| 国产精品久久久久影院亚瑟| 成人久久18免费网站麻豆| 欧美国产精品久久| 成人国产在线观看| 欧美激情自拍偷拍| 国产v综合v亚洲欧| 中文子幕无线码一区tr| 国产高清精品在线| 中文一区二区完整视频在线观看| 懂色中文一区二区在线播放| 中文字幕成人在线观看| 99久久精品国产一区| 亚洲免费av高清| 91久久精品网| 久久99精品久久只有精品| 欧美mv日韩mv国产网站app| 精品一区二区日韩| 久久久久亚洲蜜桃| 成人激情av网| 最新久久zyz资源站| 在线观看精品一区| 日韩精品欧美精品| 日韩一级片在线观看| 国产裸体歌舞团一区二区| 中文字幕欧美国产| 色婷婷久久久亚洲一区二区三区 | 国产大陆亚洲精品国产| 国产精品久久久久久一区二区三区| 91亚洲国产成人精品一区二区三| 亚洲综合一区二区| 日韩情涩欧美日韩视频| 国产曰批免费观看久久久| 国产精品伦一区| 在线观看日韩精品| 免费成人结看片| 国产亚洲一二三区| 色综合久久综合网97色综合| 亚洲成人在线网站| 久久亚洲影视婷婷| 色久综合一二码| 麻豆传媒一区二区三区| 国产日产欧美一区二区三区| 91国在线观看| 久久狠狠亚洲综合| 1000精品久久久久久久久| 欧美视频在线观看一区| 国产一区二区在线视频| 一区二区三区四区在线| 日韩精品专区在线影院重磅| 不卡在线视频中文字幕| 午夜精品免费在线观看| 国产日韩欧美a| 欧美人与z0zoxxxx视频| 国产精品1024| 偷拍一区二区三区四区| 久久久99免费| 欧美日韩精品一区二区天天拍小说| 久久不见久久见中文字幕免费| 中文字幕一区二| 日韩欧美国产一区二区在线播放| 91在线国产福利| 国产在线视视频有精品| 一区二区三区不卡视频| 久久精品夜夜夜夜久久| 欧美三级电影在线看| 国产成人精品一区二区三区四区 | 精品成人在线观看| 欧美午夜片在线看| 成人国产精品免费网站| 美女国产一区二区三区| 亚洲精品久久嫩草网站秘色| www日韩大片| 欧美精品v日韩精品v韩国精品v| 成人福利视频在线| 国产制服丝袜一区| 波多野结衣视频一区| 久久99精品国产| 丝袜美腿高跟呻吟高潮一区| 亚洲色大成网站www久久九九| 久久综合给合久久狠狠狠97色69| 欧美日韩日日摸| 91久久精品网| 99精品国产一区二区三区不卡| 国产做a爰片久久毛片| 图片区日韩欧美亚洲| 一区二区三区视频在线观看| 中文字幕av资源一区| 26uuu久久天堂性欧美| 欧美精品在线观看一区二区| 91成人看片片| 99re热视频这里只精品| 国产精品一卡二卡| 久久成人免费网站| 免费看日韩a级影片| 日韩中文字幕亚洲一区二区va在线| 亚洲欧美一区二区三区极速播放| 中文字幕电影一区| 国产情人综合久久777777| 精品成a人在线观看| 日韩免费观看高清完整版| 欧美一区二区三区男人的天堂| 欧美日韩视频第一区| 欧美日韩一卡二卡三卡| 欧美日韩在线三级| 欧美色手机在线观看| 欧美主播一区二区三区美女|