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

📄 tc-hppa.c

📁 基于4个mips核的noc设计
💻 C
📖 第 1 页 / 共 5 页
字号:
		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 6);		/* Handle MFCTL wide completer.  */		case 'W':		  if (strncasecmp (s, ",w", 2) != 0)		    break;		  s += 2;		  continue;		/* Handle an RFI restore completer.  */		case 'r':		  flag = 0;		  if (!strncasecmp (s, ",r", 2))		    {		      flag = 5;		      s += 2;		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 5);		/* Handle a system control completer.  */		case 'Z':		  if (*s == ',' && (*(s + 1) == 'm' || *(s + 1) == 'M'))		    {		      flag = 1;		      s += 2;		    }		  else		    flag = 0;		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 5);		/* Handle intermediate/final completer for DCOR.  */		case 'i':		  flag = 0;		  if (!strncasecmp (s, ",i", 2))		    {		      flag = 1;		      s += 2;		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 6);		/* Handle zero/sign extension completer.  */		case 'z':		  flag = 1;		  if (!strncasecmp (s, ",z", 2))		    {		      flag = 0;		      s += 2;		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 10);		/* Handle add completer.  */		case 'a':		  flag = 1;		  if (!strncasecmp (s, ",l", 2))		    {		      flag = 2;		      s += 2;		    }		  else if (!strncasecmp (s, ",tsv", 4))		    {		      flag = 3;		      s += 4;		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 10);		/* Handle 64 bit carry for ADD.  */		case 'Y':		  flag = 0;		  if (!strncasecmp (s, ",dc,tsv", 7) ||		      !strncasecmp (s, ",tsv,dc", 7))		    {		      flag = 1;		      s += 7;		    }		  else if (!strncasecmp (s, ",dc", 3))		    {		      flag = 0;		      s += 3;		    }		  else		    break;		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);		/* Handle 32 bit carry for ADD.  */		case 'y':		  flag = 0;		  if (!strncasecmp (s, ",c,tsv", 6) ||		      !strncasecmp (s, ",tsv,c", 6))		    {		      flag = 1;		      s += 6;		    }		  else if (!strncasecmp (s, ",c", 2))		    {		      flag = 0;		      s += 2;		    }		  else		    break;		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);		/* Handle trap on signed overflow.  */		case 'v':		  flag = 0;		  if (!strncasecmp (s, ",tsv", 4))		    {		      flag = 1;		      s += 4;		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);		/* Handle trap on condition and overflow.  */		case 't':		  flag = 0;		  if (!strncasecmp (s, ",tc,tsv", 7) ||		      !strncasecmp (s, ",tsv,tc", 7))		    {		      flag = 1;		      s += 7;		    }		  else if (!strncasecmp (s, ",tc", 3))		    {		      flag = 0;		      s += 3;		    }		  else		    break;		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);		/* Handle 64 bit borrow for SUB.  */		case 'B':		  flag = 0;		  if (!strncasecmp (s, ",db,tsv", 7) ||		      !strncasecmp (s, ",tsv,db", 7))		    {		      flag = 1;		      s += 7;		    }		  else if (!strncasecmp (s, ",db", 3))		    {		      flag = 0;		      s += 3;		    }		  else		    break;		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);		/* Handle 32 bit borrow for SUB.  */		case 'b':		  flag = 0;		  if (!strncasecmp (s, ",b,tsv", 6) ||		      !strncasecmp (s, ",tsv,b", 6))		    {		      flag = 1;		      s += 6;		    }		  else if (!strncasecmp (s, ",b", 2))		    {		      flag = 0;		      s += 2;		    }		  else		    break;		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);		/* Handle trap condition completer for UADDCM.  */		case 'T':		  flag = 0;		  if (!strncasecmp (s, ",tc", 3))		    {		      flag = 1;		      s += 3;		    }		  INSERT_FIELD_AND_CONTINUE (opcode, flag, 6);		/* Handle signed/unsigned at 21.  */		case 'S':		  {		    int sign = 1;		    if (strncasecmp (s, ",s", 2) == 0)		      {			sign = 1;			s += 2;		      }		    else if (strncasecmp (s, ",u", 2) == 0)		      {			sign = 0;			s += 2;		      }		    INSERT_FIELD_AND_CONTINUE (opcode, sign, 10);		  }		/* Handle left/right combination at 17:18.  */		case 'h':		  if (*s++ == ',')		    {		      int lr = 0;		      if (*s == 'r')			lr = 2;		      else if (*s == 'l')			lr = 0;		      else			as_bad(_("Invalid left/right combination completer"));		      s++;		      INSERT_FIELD_AND_CONTINUE (opcode, lr, 13);		    }		  else		    as_bad(_("Invalid left/right combination completer"));		  break;		/* Handle saturation at 24:25.  */		case 'H':		  {		    int sat = 3;		    if (strncasecmp (s, ",ss", 3) == 0)		      {			sat = 1;			s += 3;		      }		    else if (strncasecmp (s, ",us", 3) == 0)		      {			sat = 0;			s += 3;		      }		    INSERT_FIELD_AND_CONTINUE (opcode, sat, 6);		  }		/* Handle permutation completer.  */		case '*':		  if (*s++ == ',')		    {		      int permloc[4];		      int perm = 0;		      int i = 0;		      permloc[0] = 13;		      permloc[1] = 10;		      permloc[2] = 8;		      permloc[3] = 6;		      for (; i < 4; i++)		        {			  switch (*s++)			    {			    case '0':			      perm = 0;			      break;			    case '1':			      perm = 1;			      break;			    case '2':			      perm = 2;			      break;			    case '3':			      perm = 3;			      break;			    default:			      as_bad(_("Invalid permutation completer"));			    }			  opcode |= perm << permloc[i];			}		      continue;		    }		  else		    as_bad(_("Invalid permutation completer"));		  break;		default:		  abort ();		}	      break;	    /* Handle all conditions.  */	    case '?':	      {		args++;		switch (*args)		  { 		  /* Handle FP compare conditions.  */ 		  case 'f': 		    cond = pa_parse_fp_cmp_cond (&s); 		    INSERT_FIELD_AND_CONTINUE (opcode, cond, 0);		  /* Handle an add condition.  */		  case 'A':		  case 'a': 		    cmpltr = 0; 		    flag = 0;		    if (*s == ',')		      {			s++;			/* 64 bit conditions.  */			if (*args == 'A')			  {			    if (*s == '*')			      s++;			    else			      break;			  }			else if (*s == '*')			  break;			name = s;			name = s;			while (*s != ',' && *s != ' ' && *s != '\t')			  s += 1;			c = *s;			*s = 0x00;			if (strcmp (name, "=") == 0)			  cmpltr = 1;			else if (strcmp (name, "<") == 0)			  cmpltr = 2;			else if (strcmp (name, "<=") == 0)			  cmpltr = 3;			else if (strcasecmp (name, "nuv") == 0)			  cmpltr = 4;			else if (strcasecmp (name, "znv") == 0)			  cmpltr = 5;			else if (strcasecmp (name, "sv") == 0)			  cmpltr = 6;			else if (strcasecmp (name, "od") == 0)			  cmpltr = 7;			else if (strcasecmp (name, "tr") == 0)			  {			    cmpltr = 0;			    flag = 1;			  }			else if (strcmp (name, "<>") == 0)			  {			    cmpltr = 1;			    flag = 1;			  }			else if (strcmp (name, ">=") == 0)			  {			    cmpltr = 2;			    flag = 1;			  }			else if (strcmp (name, ">") == 0)			  {			    cmpltr = 3;			    flag = 1;			  }			else if (strcasecmp (name, "uv") == 0)			  {			    cmpltr = 4;			    flag = 1;			  }			else if (strcasecmp (name, "vnz") == 0)			  {			    cmpltr = 5;			    flag = 1;			  }			else if (strcasecmp (name, "nsv") == 0)			  {			    cmpltr = 6;			    flag = 1;			  }			else if (strcasecmp (name, "ev") == 0)			  {			    cmpltr = 7;			    flag = 1;			  }			/* ",*" is a valid condition.  */			else if (*args == 'a')			  as_bad (_("Invalid Add Condition: %s"), name);			*s = c;		      }		    opcode |= cmpltr << 13;		    INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);		  /* Handle non-negated add and branch condition.  */		  case 'd':		    cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);		    if (cmpltr < 0)		      {			as_bad (_("Invalid Add and Branch Condition: %c"), *s);			cmpltr = 0;		      }		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);		  /* Handle 64 bit wide-mode add and branch condition.  */		  case 'W':		    cmpltr = pa_parse_addb_64_cmpltr (&s);		    if (cmpltr < 0)		      {			as_bad (_("Invalid Add and Branch Condition: %c"), *s);			cmpltr = 0;		      }		    else		      {			/* Negated condition requires an opcode change.  */			opcode |= (cmpltr & 8) << 24;		      }		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr & 7, 13);		  /* Handle a negated or non-negated add and branch		     condition.  */		  case '@':		    save_s = s;		    cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);		    if (cmpltr < 0)		      {			s = save_s;			cmpltr = pa_parse_neg_add_cmpltr (&s, 1);			if (cmpltr < 0)			  {			    as_bad (_("Invalid Compare/Subtract Condition"));			    cmpltr = 0;			  }			else			  {			    /* Negated condition requires an opcode change.  */			    opcode |= 1 << 27;			  }		      }		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);		  /* Handle branch on bit conditions.  */		  case 'B':		  case 'b':		    cmpltr = 0;		    if (*s == ',')		      {			s++;			if (*args == 'B')			  {			    if (*s == '*')			      s++;			    else			      break;			  }			else if (*s == '*')			  break;			if (strncmp (s, "<", 1) == 0)			  {			    cmpltr = 0;			    s++;			  }			else if (strncmp (s, ">=", 2) == 0)			  {			    cmpltr = 1;			    s += 2;			  }			else			  as_bad (_("Invalid Bit Branch Condition: %c"), *s);		      }		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 15);		  /* Handle a compare/subtract condition.  */		  case 'S':		  case 's':		    cmpltr = 0;		    flag = 0;		    if (*s == ',')		      {			s++;			/* 64 bit conditions.  */			if (*args == 'S')			  {			    if (*s == '*')			      s++;			    else			      break;			  }			else if (*s == '*')			  break;			name = s;			name = s;			while (*s != ',' && *s != ' ' && *s != '\t')			  s += 1;			c = *s;			*s = 0x00;			if (strcmp (name, "=") == 0)			  cmpltr = 1;			else if (strcmp (name, "<") == 0)			  cmpltr = 2;			else if (strcmp (name, "<=") == 0)			  cmpltr = 3;			else if (strcasecmp (name, "<<") == 0)			  cmpltr = 4;			else if (strcasecmp (name, "<<=") == 0)			  cmpltr = 5;			else if (strcasecmp (name, "sv") == 0)			  cmpltr = 6;			else if (strcasecmp (name, "o

⌨️ 快捷键说明

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