Patch: add prefix to condition args in opcodes

Jerry Quinn jquinn@nortelnetworks.com
Wed Jul 28 10:12:00 GMT 1999


Here's the revised condition arg prefix patch.  The 64 bit conditionals are
stripped out and I cleaned up the indentation and other style errors.

Jerry


Wed Jul 28 13:08:13 EDT 1999  Jerry Quinn <jquinn@nortelnetworks.com>

    * gas/config/tc-hppa.c (pa_ip): Change condition args to have '?' prefix.
    * include/opcode/hppa.h (pa_opcodes): Change condition args to use '?'
    prefix.
    * opcodes/hppa-dis.c (print_insn_hppa): Change condition args to use '?'
    prefix.


*** orig/gas/config/tc-hppa.c	Wed Jul  7 17:31:52 1999
--- gas-src/gas/config/tc-hppa.c	Wed Jul 28 11:29:20 1999
***************
*** 1714,2120 ****
  		INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
  	      }
  
! 	    /* Handle a non-negated compare/stubtract condition.  */
! 	    case '<':
! 	      cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
! 	      if (cmpltr < 0)
! 		{
! 		  as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
! 		  cmpltr = 0;
! 		}
! 	      INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
! 
! 	    /* Handle a negated or non-negated compare/subtract condition.  */
  	    case '?':
! 	      save_s = s;
! 	      cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
! 	      if (cmpltr < 0)
! 		{
! 		  s = save_s;
! 		  cmpltr = pa_parse_neg_cmpsub_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 non-negated add condition.  */
! 	    case '!':
! 	      cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);
! 	      if (cmpltr < 0)
! 		{
! 		  as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
! 		  cmpltr = 0;
! 		}
! 	      INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
! 
! 	    /* Handle a negated or non-negated add 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 a compare/subtract condition.  */
! 	    case 'a':
! 	      cmpltr = 0;
! 	      flag = 0;
! 	      if (*s == ',')
! 		{
! 		  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, "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, ">>=") == 0)
! 		    {
! 		      cmpltr = 4;
! 		      flag = 1;
! 		    }
! 		  else if (strcasecmp (name, ">>") == 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;
! 		    }
! 		  else
! 		    as_bad (_("Invalid Add Condition: %s"), name);
! 		  *s = c;
! 		}
! 	      opcode |= cmpltr << 13;
! 	      INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 	    /* Handle a non-negated add condition.  */
! 	    case 'd':
! 	      cmpltr = 0;
! 	      flag = 0;
! 	      if (*s == ',')
! 		{
! 		  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;
! 		    }
! 		  else
! 		    as_bad (_("Invalid Add Condition: %s"), name);
! 		  *s = c;
! 		}
! 	      opcode |= cmpltr << 13;
! 	      INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 	    /* HANDLE a logical instruction condition.  */
! 	    case '&':
! 	      cmpltr = 0;
! 	      flag = 0;
! 	      if (*s == ',')
! 		{
! 		  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, "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, "ev") == 0)
! 		    {
! 		      cmpltr = 7;
! 		      flag = 1;
! 		    }
! 		  else
! 		    as_bad (_("Invalid Logical Instruction Condition."));
! 		  *s = c;
! 		}
! 	      opcode |= cmpltr << 13;
! 	      INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 	    /* Handle a unit instruction condition.  */
! 	    case 'U':
! 	      cmpltr = 0;
! 	      flag = 0;
! 	      if (*s == ',')
! 		{
! 		  s++;
! 
! 
! 		  if (strncasecmp (s, "sbz", 3) == 0)
! 		    {
! 		      cmpltr = 2;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "shz", 3) == 0)
! 		    {
! 		      cmpltr = 3;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "sdc", 3) == 0)
! 		    {
! 		      cmpltr = 4;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "sbc", 3) == 0)
! 		    {
! 		      cmpltr = 6;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "shc", 3) == 0)
! 		    {
! 		      cmpltr = 7;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "tr", 2) == 0)
! 		    {
! 		      cmpltr = 0;
! 		      flag = 1;
! 		      s += 2;
! 		    }
! 		  else if (strncasecmp (s, "nbz", 3) == 0)
! 		    {
! 		      cmpltr = 2;
! 		      flag = 1;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "nhz", 3) == 0)
! 		    {
! 		      cmpltr = 3;
! 		      flag = 1;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "ndc", 3) == 0)
! 		    {
! 		      cmpltr = 4;
! 		      flag = 1;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "nbc", 3) == 0)
! 		    {
! 		      cmpltr = 6;
! 		      flag = 1;
! 		      s += 3;
! 		    }
! 		  else if (strncasecmp (s, "nhc", 3) == 0)
! 		    {
! 		      cmpltr = 7;
! 		      flag = 1;
! 		      s += 3;
! 		    }
! 		  else
! 		    as_bad (_("Invalid Logical Instruction Condition."));
! 		}
! 	      opcode |= cmpltr << 13;
! 	      INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 	    /* Handle a shift/extract/deposit condition.  */
! 	    case '|':
! 	    case '>':
! 	      cmpltr = 0;
! 	      if (*s == ',')
! 		{
! 		  save_s = 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 (strcasecmp (name, "od") == 0)
! 		    cmpltr = 3;
! 		  else if (strcasecmp (name, "tr") == 0)
! 		    cmpltr = 4;
! 		  else if (strcmp (name, "<>") == 0)
! 		    cmpltr = 5;
! 		  else if (strcmp (name, ">=") == 0)
! 		    cmpltr = 6;
! 		  else if (strcasecmp (name, "ev") == 0)
! 		    cmpltr = 7;
! 		  /* Handle movb,n.  Put things back the way they were.
! 		     This includes moving s back to where it started.  */
! 		  else if (strcasecmp (name, "n") == 0 && *args == '|')
! 		    {
! 		      *s = c;
! 		      s = save_s;
! 		      continue;
! 		    }
! 		  else
! 		    as_bad (_("Invalid Shift/Extract/Deposit Condition."));
! 		  *s = c;
! 		}
! 	      INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
! 
! 	    /* Handle bvb and bb conditions.  */
! 	    case '~':
! 	      cmpltr = 0;
! 	      if (*s == ',')
! 		{
! 		  s++;
! 		  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 system control completer.  */
  	    case 'Z':
--- 1714,2137 ----
  		INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
  	      }
  
! 	    /* 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':
!  		    cmpltr = 0;
!  		    flag = 0;
! 		    if (*s == ',')
! 		      {
! 			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;
! 			  }
! 			else
! 			  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 Compare/Subtract Condition: %c"), *s);
! 			cmpltr = 0;
! 		      }
! 		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 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':
! 		    cmpltr = 0;
! 		    if (*s == ',')
! 		      {
! 			s++;
! 			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':
! 		    cmpltr = 0;
! 		    flag = 0;
! 		    if (*s == ',')
! 		      {
! 			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, "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, ">>=") == 0)
! 			  {
! 			    cmpltr = 4;
! 			    flag = 1;
! 			  }
! 			else if (strcasecmp (name, ">>") == 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;
! 			  }
! 			else
! 			  as_bad (_("Invalid Compare/Subtract Condition: %s"),
! 				  name);
! 			*s = c;
! 		      }
! 		    opcode |= cmpltr << 13;
! 		    INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 		  /* Handle a non-negated compare condition.  */
! 		  case 't':
! 		    cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
! 		    if (cmpltr < 0)
! 		      {
! 			as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
! 			cmpltr = 0;
! 		      }
! 		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
!   
! 		  /* Handle a negated or non-negated compare/subtract
! 		     condition.  */
! 		  case 'n':
! 		    save_s = s;
! 		    cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
! 		    if (cmpltr < 0)
! 		      {
! 			s = save_s;
! 			cmpltr = pa_parse_neg_cmpsub_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 a logical instruction condition.  */
! 		  case 'l':
! 		    cmpltr = 0;
! 		    flag = 0;
! 		    if (*s == ',')
! 		      {
! 			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, "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, "ev") == 0)
! 			  {
! 			    cmpltr = 7;
! 			    flag = 1;
! 			  }
! 			else
! 			  as_bad (_("Invalid Logical Instruction Condition."));
! 			*s = c;
! 		      }
! 		    opcode |= cmpltr << 13;
! 		    INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 		  /* Handle a shift/extract/deposit condition.  */
! 		  case 'x':
! 		  case 'y':
! 		    cmpltr = 0;
! 		    if (*s == ',')
! 		      {
! 			save_s = 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 (strcasecmp (name, "od") == 0)
! 			  cmpltr = 3;
! 			else if (strcasecmp (name, "tr") == 0)
! 			  cmpltr = 4;
! 			else if (strcmp (name, "<>") == 0)
! 			  cmpltr = 5;
! 			else if (strcmp (name, ">=") == 0)
! 			  cmpltr = 6;
! 			else if (strcasecmp (name, "ev") == 0)
! 			  cmpltr = 7;
! 			/* Handle movb,n.  Put things back the way they were.
! 			   This includes moving s back to where it started.  */
! 			else if (strcasecmp (name, "n") == 0 && *args == 'y')
! 			  {
! 			    *s = c;
! 			    s = save_s;
! 			    continue;
! 			  }
! 			else
! 			  as_bad (_("Invalid Shift/Extract/Deposit Condition."));
! 			*s = c;
! 		      }
! 		    INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
! 
! 		  /* Handle a unit instruction condition.  */
! 		  case 'u':	/* unit */
! 		    cmpltr = 0;
! 		    flag = 0;
! 		    if (*s == ',')
! 		      {
! 			s++;
! 	    
! 			if (strncasecmp (s, "sbz", 3) == 0)
! 			  {
! 			    cmpltr = 2;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "shz", 3) == 0)
! 			  {
! 			    cmpltr = 3;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "sdc", 3) == 0)
! 			  {
! 			    cmpltr = 4;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "sbc", 3) == 0)
! 			  {
! 			    cmpltr = 6;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "shc", 3) == 0)
! 			  {
! 			    cmpltr = 7;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "tr", 2) == 0)
! 			  {
! 			    cmpltr = 0;
! 			    flag = 1;
! 			    s += 2;
! 			  }
! 			else if (strncasecmp (s, "nbz", 3) == 0)
! 			  {
! 			    cmpltr = 2;
! 			    flag = 1;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "nhz", 3) == 0)
! 			  {
! 			    cmpltr = 3;
! 			    flag = 1;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "ndc", 3) == 0)
! 			  {
! 			    cmpltr = 4;
! 			    flag = 1;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "nbc", 3) == 0)
! 			  {
! 			    cmpltr = 6;
! 			    flag = 1;
! 			    s += 3;
! 			  }
! 			else if (strncasecmp (s, "nhc", 3) == 0)
! 			  {
! 			    cmpltr = 7;
! 			    flag = 1;
! 			    s += 3;
! 			  }
! 			else
! 			  as_bad (_("Invalid Unit Instruction Condition."));
! 		      }
! 		    opcode |= cmpltr << 13;
! 		    INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
! 
! 		  default:
! 		    abort ();
! 		  }
! 	      }
  
  	    /* Handle a system control completer.  */
  	    case 'Z':
***************
*** 2426,2436 ****
  	      flag = pa_parse_fp_format (&s);
  	      the_insn.fpof2 = flag;
  	      INSERT_FIELD_AND_CONTINUE (opcode, flag, 13);
- 
- 	    /* Handle FP compare conditions.  */
- 	    case 'M':
- 	      cond = pa_parse_fp_cmp_cond (&s);
- 	      INSERT_FIELD_AND_CONTINUE (opcode, cond, 0);
  
  	    /* Handle L/R register halves like 't'.  */
  	    case 'v':
--- 2443,2448 ----
*** orig/include/opcode/hppa.h	Wed Jul  7 17:32:08 1999
--- gas-src/include/opcode/hppa.h	Wed Jul 28 11:39:34 1999
***************
*** 57,64 ****
     particular opcode in order for an instruction to be an instance
     of that opcode.
  
!    The args component is a string containing one character
!    for each operand of the instruction.
  
     Bit positions in this description follow HP usage of lsb = 31,
     "at" is lsb of field.
--- 57,65 ----
     particular opcode in order for an instruction to be an instance
     of that opcode.
  
!    The args component is a string containing one character for each operand of
!    the instruction.  Characters used as a prefix allow any second character to
!    be used without conflicting with the main operand characters.
  
     Bit positions in this description follow HP usage of lsb = 31,
     "at" is lsb of field.
***************
*** 69,77 ****
  
     In the args field, the following characters are unused:
  
! 	'  "#$%    *+- ./          :;    '
! 	'                          [\]  '
! 	'                          { } '
  
     Here are all the characters:
  
--- 70,78 ----
  
     In the args field, the following characters are unused:
  
! 	' !"#$%&   *+- ./          :;< > @'
! 	'            M       U     [\]  '
! 	'a  d                      {|}~'
  
     Here are all the characters:
  
***************
*** 90,102 ****
     c    indexed load completer.
     C    short load and store completer.
     Y	Store Bytes Short completer
-    <    non-negated compare/subtract conditions.
-    a	compare/subtract conditions
-    d    non-negated add conditions
-    &    logical instruction conditions
-    U    unit instruction conditions
-    >    shift/extract/deposit conditions.
-    ~    bvb,bb conditions
     V    5 bit immediate value at 31
     i    11 bit immediate value at 31
     j    14 bit immediate value at 31
--- 91,96 ----
***************
*** 107,112 ****
--- 101,127 ----
     W    17 bit branch displacement (PC relative)
     z    17 bit branch displacement (just a number, not an address)
  
+ Condition operands all have '?' as the prefix:
+ 
+    ?f   Floating point compare conditions (encoded as 5 bits at 31)
+ 
+    ?a	add conditions
+    ?d	non-negated add branch conditions
+    ?@   add branch conditions followed by nullify
+ 
+    ?s   compare/subtract conditions
+    ?t   non-negated compare conditions
+    ?n   compare conditions followed by nullify
+ 
+    ?l   logical conditions
+    ?b   branch on bit conditions
+ 
+    ?x   shift/extract/deposit conditions
+    ?y   shift/extract/deposit conditions followed by nullify for conditional
+         branches
+ 
+    ?u   unit conditions
+ 
  Also these:
  
     p    5 bit shift count at 26 (to support the SHD instruction) encoded as
***************
*** 133,142 ****
     I    Source Floating Point Operand Format Completer encoded 1 bits at 20
  	(for 0xe format FP instructions)
     G    Destination Floating Point Operand Format Completer encoded 2 bits at 18
-    M    Floating-Point Compare Conditions (encoded as 5 bits at 31)
-    ?    non-negated/negated compare/subtract conditions.
-    @    non-negated/negated add conditions.
-    !    non-negated add conditions.
  
     s    2 bit space specifier at 17.
     b    register field at 10.
--- 148,153 ----
***************
*** 148,154 ****
     Q	5 bit immediate value at 10 (a bit position specified in
  	the bb instruction. It's the same as r above, except the
          value is in a different location)
-    |	shift/extract/deposit conditions when used in a conditional branch
  
  And these (PJH) for PA-89 F.P. registers and instructions:
  
--- 159,164 ----
***************
*** 163,170 ****
     8    5 bit register field at 20 (used in 'fmpyadd' and 'fmpysub')
     9    5 bit register field at 25 (used in 'fmpyadd' and 'fmpysub')
     H    Floating Point Operand Format at 26 for 'fmpyadd' and 'fmpysub'
!         (very similar to 'F')
! */
  
  
  /* List of characters not to put a space after.  Note that
--- 173,179 ----
     8    5 bit register field at 20 (used in 'fmpyadd' and 'fmpysub')
     9    5 bit register field at 25 (used in 'fmpyadd' and 'fmpysub')
     H    Floating Point Operand Format at 26 for 'fmpyadd' and 'fmpysub'
!         (very similar to 'F') */
  
  
  /* List of characters not to put a space after.  Note that
***************
*** 187,208 ****
  
  { "b",		0xe8000000, 0xffe0e000, "nW", pa10}, /* bl foo,r0 */
  { "ldi",	0x34000000, 0xffe0c000, "j,x", pa10},	/* ldo val(r0),r */
! { "comib", 	0x84000000, 0xfc000000, "?n5,b,w", pa10}, /* comib{tf}*/
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "comib", 	0x8c000000, 0xfc000000, "?n5,b,w", pa10}, /* comib{tf}*/
! { "comb",	0x80000000, 0xfc000000, "?nx,b,w", pa10}, /* comb{tf} */
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "comb",	0x88000000, 0xfc000000, "?nx,b,w", pa10}, /* comb{tf} */
! { "addb",	0xa0000000, 0xfc000000, "@nx,b,w", pa10}, /* addb{tf} */
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "addb",	0xa8000000, 0xfc000000, "@nx,b,w", pa10},
! { "addib",	0xa4000000, 0xfc000000, "@n5,b,w", pa10}, /* addib{tf}*/
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "addib",	0xac000000, 0xfc000000, "@n5,b,w", pa10}, /* addib{tf}*/
  { "nop",        0x08000240, 0xffffffff, "", pa10},      /* or 0,0,0 */
  { "copy",       0x08000240, 0xffe0ffe0, "x,t", pa10},   /* or r,0,t */
  { "mtsar",      0x01601840, 0xffe0ffff, "x", pa10}, /* mtctl r,cr11 */
--- 196,217 ----
  
  { "b",		0xe8000000, 0xffe0e000, "nW", pa10}, /* bl foo,r0 */
  { "ldi",	0x34000000, 0xffe0c000, "j,x", pa10},	/* ldo val(r0),r */
! { "comib", 	0x84000000, 0xfc000000, "?nn5,b,w", pa10}, /* comib{tf}*/
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "comib", 	0x8c000000, 0xfc000000, "?nn5,b,w", pa10}, /* comib{tf}*/
! { "comb",	0x80000000, 0xfc000000, "?nnx,b,w", pa10}, /* comb{tf} */
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "comb",	0x88000000, 0xfc000000, "?nnx,b,w", pa10}, /* comb{tf} */
! { "addb",	0xa0000000, 0xfc000000, "?@nx,b,w", pa10}, /* addb{tf} */
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "addb",	0xa8000000, 0xfc000000, "?@nx,b,w", pa10},
! { "addib",	0xa4000000, 0xfc000000, "?@n5,b,w", pa10}, /* addib{tf}*/
  /* This entry is for the disassembler only.  It will never be used by
     assembler.  */
! { "addib",	0xac000000, 0xfc000000, "?@n5,b,w", pa10}, /* addib{tf}*/
  { "nop",        0x08000240, 0xffffffff, "", pa10},      /* or 0,0,0 */
  { "copy",       0x08000240, 0xffe0ffe0, "x,t", pa10},   /* or r,0,t */
  { "mtsar",      0x01601840, 0xffe0ffff, "x", pa10}, /* mtctl r,cr11 */
***************
*** 265,341 ****
  { "bv",		0xe800c000, 0xfc00fffd, "n(b)", pa10},
  { "be",		0xe0000000, 0xfc000000, "nz(S,b)", pa10},
  { "ble",	0xe4000000, 0xfc000000, "nz(S,b)", pa10},
! { "movb",	0xc8000000, 0xfc000000, "|nx,b,w", pa10},
! { "movib",	0xcc000000, 0xfc000000, "|n5,b,w", pa10},
! { "combt",	0x80000000, 0xfc000000, "<nx,b,w", pa10},
! { "combf",	0x88000000, 0xfc000000, "<nx,b,w", pa10},
! { "comibt",	0x84000000, 0xfc000000, "<n5,b,w", pa10},
! { "comibf",	0x8c000000, 0xfc000000, "<n5,b,w", pa10},
! { "addbt",	0xa0000000, 0xfc000000, "!nx,b,w", pa10},
! { "addbf",	0xa8000000, 0xfc000000, "!nx,b,w", pa10},
! { "addibt",	0xa4000000, 0xfc000000, "!n5,b,w", pa10},
! { "addibf",	0xac000000, 0xfc000000, "!n5,b,w", pa10},
! { "bb",		0xc4004000, 0xfc004000, "~nx,Q,w", pa10}, 
! { "bvb",	0xc0004000, 0xffe04000, "~nx,w", pa10},
  { "clrbts",	0xe8004005, 0xffffffff, "", pa20},
  
  /* Computation Instructions */
  
! { "comclr",     0x08000880, 0xfc000fe0, "ax,b,t", pa10},
! { "or",         0x08000240, 0xfc000fe0, "&x,b,t", pa10},
! { "xor",        0x08000280, 0xfc000fe0, "&x,b,t", pa10},
! { "and",        0x08000200, 0xfc000fe0, "&x,b,t", pa10},
! { "andcm",      0x08000000, 0xfc000fe0, "&x,b,t", pa10},
! { "uxor",       0x08000380, 0xfc000fe0, "Ux,b,t", pa10},
! { "uaddcm",     0x08000980, 0xfc000fe0, "Ux,b,t", pa10},
! { "uaddcmt",    0x080009c0, 0xfc000fe0, "Ux,b,t", pa10},
! { "dcor",       0x08000b80, 0xfc1f0fe0, "Ub,t",   pa10},
! { "idcor",      0x08000bc0, 0xfc1f0fe0, "Ub,t",   pa10},
! { "addi",       0xb4000000, 0xfc000800, "di,b,x", pa10},
! { "addio",      0xb4000800, 0xfc000800, "di,b,x", pa10},
! { "addit",      0xb0000000, 0xfc000800, "di,b,x", pa10},
! { "addito",     0xb0000800, 0xfc000800, "di,b,x", pa10},
! { "add",        0x08000600, 0xfc000fe0, "dx,b,t", pa10},
! { "addl",       0x08000a00, 0xfc000fe0, "dx,b,t", pa10},
! { "addo",       0x08000e00, 0xfc000fe0, "dx,b,t", pa10},
! { "addc",       0x08000700, 0xfc000fe0, "dx,b,t", pa10},
! { "addco",      0x08000f00, 0xfc000fe0, "dx,b,t", pa10},
! { "sub",        0x08000400, 0xfc000fe0, "ax,b,t", pa10},
! { "subo",       0x08000c00, 0xfc000fe0, "ax,b,t", pa10},
! { "subb",       0x08000500, 0xfc000fe0, "ax,b,t", pa10},
! { "subbo",      0x08000d00, 0xfc000fe0, "ax,b,t", pa10},
! { "subt",       0x080004c0, 0xfc000fe0, "ax,b,t", pa10},
! { "subto",      0x08000cc0, 0xfc000fe0, "ax,b,t", pa10},
! { "ds",         0x08000440, 0xfc000fe0, "ax,b,t", pa10},
! { "subi",       0x94000000, 0xfc000800, "ai,b,x", pa10},
! { "subio",      0x94000800, 0xfc000800, "ai,b,x", pa10},
! { "comiclr",    0x90000000, 0xfc000800, "ai,b,x", pa10},
! { "sh1add",     0x08000640, 0xfc000fe0, "dx,b,t", pa10},
! { "sh1addl",    0x08000a40, 0xfc000fe0, "dx,b,t", pa10},
! { "sh1addo",    0x08000e40, 0xfc000fe0, "dx,b,t", pa10},
! { "sh2add",     0x08000680, 0xfc000fe0, "dx,b,t", pa10},
! { "sh2addl",    0x08000a80, 0xfc000fe0, "dx,b,t", pa10},
! { "sh2addo",    0x08000e80, 0xfc000fe0, "dx,b,t", pa10},
! { "sh3add",     0x080006c0, 0xfc000fe0, "dx,b,t", pa10},
! { "sh3addl",    0x08000ac0, 0xfc000fe0, "dx,b,t", pa10},
! { "sh3addo",    0x08000ec0, 0xfc000fe0, "dx,b,t", pa10},
  
  /* Extract and Deposit Instructions */
  
! { "vshd",       0xd0000000, 0xfc001fe0, ">x,b,t", pa10},
! { "shd",        0xd0000800, 0xfc001c00, ">x,b,p,t", pa10},
! { "vextru",     0xd0001000, 0xfc001fe0, ">b,T,x", pa10},
! { "vextrs",     0xd0001400, 0xfc001fe0, ">b,T,x", pa10},
! { "extru",      0xd0001800, 0xfc001c00, ">b,P,T,x", pa10},
! { "extrs",      0xd0001c00, 0xfc001c00, ">b,P,T,x", pa10},
! { "zvdep",      0xd4000000, 0xfc001fe0, ">x,T,b", pa10},
! { "vdep",       0xd4000400, 0xfc001fe0, ">x,T,b", pa10},
! { "zdep",       0xd4000800, 0xfc001c00, ">x,p,T,b", pa10},
! { "dep",        0xd4000c00, 0xfc001c00, ">x,p,T,b", pa10},
! { "zvdepi",     0xd4001000, 0xfc001fe0, ">5,T,b", pa10},
! { "vdepi",      0xd4001400, 0xfc001fe0, ">5,T,b", pa10},
! { "zdepi",      0xd4001800, 0xfc001c00, ">5,p,T,b", pa10},
! { "depi",       0xd4001c00, 0xfc001c00, ">5,p,T,b", pa10},
  
  /* System Control Instructions */
  
--- 274,350 ----
  { "bv",		0xe800c000, 0xfc00fffd, "n(b)", pa10},
  { "be",		0xe0000000, 0xfc000000, "nz(S,b)", pa10},
  { "ble",	0xe4000000, 0xfc000000, "nz(S,b)", pa10},
! { "movb",	0xc8000000, 0xfc000000, "?ynx,b,w", pa10},
! { "movib",	0xcc000000, 0xfc000000, "?yn5,b,w", pa10},
! { "combt",	0x80000000, 0xfc000000, "?tnx,b,w", pa10},
! { "combf",	0x88000000, 0xfc000000, "?tnx,b,w", pa10},
! { "comibt",	0x84000000, 0xfc000000, "?tn5,b,w", pa10},
! { "comibf",	0x8c000000, 0xfc000000, "?tn5,b,w", pa10},
! { "addbt",	0xa0000000, 0xfc000000, "?dnx,b,w", pa10},
! { "addbf",	0xa8000000, 0xfc000000, "?dnx,b,w", pa10},
! { "addibt",	0xa4000000, 0xfc000000, "?dn5,b,w", pa10},
! { "addibf",	0xac000000, 0xfc000000, "?dn5,b,w", pa10},
! { "bb",		0xc4004000, 0xfc004000, "?bnx,Q,w", pa10}, 
! { "bvb",	0xc0004000, 0xffe04000, "?bnx,w", pa10},
  { "clrbts",	0xe8004005, 0xffffffff, "", pa20},
  
  /* Computation Instructions */
  
! { "comclr",     0x08000880, 0xfc000fe0, "?sx,b,t", pa10},
! { "or",         0x08000240, 0xfc000fe0, "?lx,b,t", pa10},
! { "xor",        0x08000280, 0xfc000fe0, "?lx,b,t", pa10},
! { "and",        0x08000200, 0xfc000fe0, "?lx,b,t", pa10},
! { "andcm",      0x08000000, 0xfc000fe0, "?lx,b,t", pa10},
! { "uxor",       0x08000380, 0xfc000fe0, "?ux,b,t", pa10},
! { "uaddcm",     0x08000980, 0xfc000fe0, "?ux,b,t", pa10},
! { "uaddcmt",    0x080009c0, 0xfc000fe0, "?ux,b,t", pa10},
! { "dcor",       0x08000b80, 0xfc1f0fe0, "?ub,t",   pa10},
! { "idcor",      0x08000bc0, 0xfc1f0fe0, "?ub,t",   pa10},
! { "addi",       0xb4000000, 0xfc000800, "?ai,b,x", pa10},
! { "addio",      0xb4000800, 0xfc000800, "?ai,b,x", pa10},
! { "addit",      0xb0000000, 0xfc000800, "?ai,b,x", pa10},
! { "addito",     0xb0000800, 0xfc000800, "?ai,b,x", pa10},
! { "add",        0x08000600, 0xfc000fe0, "?ax,b,t", pa10},
! { "addl",       0x08000a00, 0xfc000fe0, "?ax,b,t", pa10},
! { "addo",       0x08000e00, 0xfc000fe0, "?ax,b,t", pa10},
! { "addc",       0x08000700, 0xfc000fe0, "?ax,b,t", pa10},
! { "addco",      0x08000f00, 0xfc000fe0, "?ax,b,t", pa10},
! { "sub",        0x08000400, 0xfc000fe0, "?sx,b,t", pa10},
! { "subo",       0x08000c00, 0xfc000fe0, "?sx,b,t", pa10},
! { "subb",       0x08000500, 0xfc000fe0, "?sx,b,t", pa10},
! { "subbo",      0x08000d00, 0xfc000fe0, "?sx,b,t", pa10},
! { "subt",       0x080004c0, 0xfc000fe0, "?sx,b,t", pa10},
! { "subto",      0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10},
! { "ds",         0x08000440, 0xfc000fe0, "?sx,b,t", pa10},
! { "subi",       0x94000000, 0xfc000800, "?si,b,x", pa10},
! { "subio",      0x94000800, 0xfc000800, "?si,b,x", pa10},
! { "comiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10},
! { "sh1add",     0x08000640, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh1addl",    0x08000a40, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh1addo",    0x08000e40, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh2add",     0x08000680, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh2addl",    0x08000a80, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh2addo",    0x08000e80, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh3add",     0x080006c0, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh3addl",    0x08000ac0, 0xfc000fe0, "?ax,b,t", pa10},
! { "sh3addo",    0x08000ec0, 0xfc000fe0, "?ax,b,t", pa10},
  
  /* Extract and Deposit Instructions */
  
! { "vshd",       0xd0000000, 0xfc001fe0, "?xx,b,t", pa10},
! { "shd",        0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10},
! { "vextru",     0xd0001000, 0xfc001fe0, "?xb,T,x", pa10},
! { "vextrs",     0xd0001400, 0xfc001fe0, "?xb,T,x", pa10},
! { "extru",      0xd0001800, 0xfc001c00, "?xb,P,T,x", pa10},
! { "extrs",      0xd0001c00, 0xfc001c00, "?xb,P,T,x", pa10},
! { "zvdep",      0xd4000000, 0xfc001fe0, "?xx,T,b", pa10},
! { "vdep",       0xd4000400, 0xfc001fe0, "?xx,T,b", pa10},
! { "zdep",       0xd4000800, 0xfc001c00, "?xx,p,T,b", pa10},
! { "dep",        0xd4000c00, 0xfc001c00, "?xx,p,T,b", pa10},
! { "zvdepi",     0xd4001000, 0xfc001fe0, "?x5,T,b", pa10},
! { "vdepi",      0xd4001400, 0xfc001fe0, "?x5,T,b", pa10},
! { "zdepi",      0xd4001800, 0xfc001c00, "?x5,p,T,b", pa10},
! { "depi",       0xd4001c00, 0xfc001c00, "?x5,p,T,b", pa10},
  
  /* System Control Instructions */
  
***************
*** 468,475 ****
  { "fneg",       0x3800c000, 0xfc1fe720, "FJ,v", pa20},
  { "fnegabs",    0x3000e000, 0xfc1fe7e0, "FE,v", pa20},
  { "fnegabs",    0x3800e000, 0xfc1fe720, "FJ,v", pa20},
! { "fcmp",       0x30000400, 0xfc00e7e0, "FME,X", pa10},
! { "fcmp",       0x38000400, 0xfc00e720, "IMJ,K", pa10},
  { "xmpyu",	0x38004700, 0xfc00e720, "E,X,v", pa11},
  { "fmpyadd",	0x18000000, 0xfc000000, "H4,6,7,9,8", pa11},
  { "fmpysub",	0x98000000, 0xfc000000, "H4,6,7,9,8", pa11},
--- 477,484 ----
  { "fneg",       0x3800c000, 0xfc1fe720, "FJ,v", pa20},
  { "fnegabs",    0x3000e000, 0xfc1fe7e0, "FE,v", pa20},
  { "fnegabs",    0x3800e000, 0xfc1fe720, "FJ,v", pa20},
! { "fcmp",       0x30000400, 0xfc00e7e0, "F?fE,X", pa10},
! { "fcmp",       0x38000400, 0xfc00e720, "I?fJ,K", pa10},
  { "xmpyu",	0x38004700, 0xfc00e720, "E,X,v", pa11},
  { "fmpyadd",	0x18000000, 0xfc000000, "H4,6,7,9,8", pa11},
  { "fmpysub",	0x98000000, 0xfc000000, "H4,6,7,9,8", pa11},
*** orig/opcodes/hppa-dis.c	Wed Jul  7 17:32:17 1999
--- gas-src/opcodes/hppa-dis.c	Wed Jul 28 12:10:28 1999
***************
*** 305,311 ****
  	  
  	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
  
! 	  if (!strchr ("cfCY<?!@-+&U>~nHNZFIMadu|", opcode->args[0]))
  	    (*info->fprintf_func) (info->stream, " ");
  	  for (s = opcode->args; *s != '\0'; ++s)
  	    {
--- 305,311 ----
  	  
  	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
  
! 	  if (!strchr ("cfCY?-+nHNZFIu", opcode->args[0]))
  	    (*info->fprintf_func) (info->stream, " ");
  	  for (s = opcode->args; *s != '\0'; ++s)
  	    {
***************
*** 406,459 ****
  		  (*info->fprintf_func) (info->stream, "%s ",
  				    short_bytes_compl_names[GET_COMPL (insn)]);
  		  break;
! 		/* these four conditions are for the set of instructions
! 		   which distinguish true/false conditions by opcode rather
! 		   than by the 'f' bit (sigh): comb, comib, addb, addib */
! 		case '<':
! 		  fputs_filtered (compare_cond_names[GET_FIELD (insn, 16, 18)],
! 				  info);
! 		  break;
  		case '?':
! 		  fputs_filtered (compare_cond_names[GET_FIELD (insn, 16, 18)
! 				  + GET_FIELD (insn, 4, 4) * 8], info);
! 		  break;
! 		case '@':
! 		  fputs_filtered (add_cond_names[GET_FIELD (insn, 16, 18)
! 				  + GET_FIELD (insn, 4, 4) * 8], info);
! 		  break;
! 		case 'a':
! 		  (*info->fprintf_func) (info->stream, "%s ",
! 					 compare_cond_names[GET_COND (insn)]);
! 		  break;
! 		case 'd':
! 		  (*info->fprintf_func) (info->stream, "%s ",
! 					 add_cond_names[GET_COND (insn)]);
! 		  break;
! 		case '!':
! 		  (*info->fprintf_func) (info->stream, "%s",
! 				    add_cond_names[GET_FIELD (insn, 16, 18)]);
! 		  break;
  
- 		case '&':
- 		  (*info->fprintf_func) (info->stream, "%s ",
- 				    logical_cond_names[GET_COND (insn)]);
- 		  break;
- 		case 'U':
- 		  (*info->fprintf_func) (info->stream, "%s ",
- 				    unit_cond_names[GET_COND (insn)]);
- 		  break;
- 		case '|':
- 		case '>':
- 		case '~':
- 		  (*info->fprintf_func)
- 		    (info->stream, "%s",
- 		     shift_cond_names[GET_FIELD (insn, 16, 18)]);
- 
- 		  /* If the next character in args is 'n', it will handle
- 		     putting out the space.  */
- 		  if (s[1] != 'n')
- 		    (*info->fprintf_func) (info->stream, " ");
- 		  break;
  		case 'V':
  		  fput_const (extract_5_store (insn), info);
  		  break;
--- 406,478 ----
  		  (*info->fprintf_func) (info->stream, "%s ",
  				    short_bytes_compl_names[GET_COMPL (insn)]);
  		  break;
! 
! 		/* Handle conditions.  */
  		case '?':
! 		  {
! 		    s++;
! 		    switch (*s)
! 		      {
! 		      case 'f':
! 			(*info->fprintf_func) (info->stream, "%s ",
! 					       float_comp_names[GET_FIELD
! 							       (insn, 27, 31)]);
! 			break;
! 
! 		      /* these four conditions are for the set of instructions
! 			   which distinguish true/false conditions by opcode
! 			   rather than by the 'f' bit (sigh): comb, comib,
! 			   addb, addib */
! 		      case 't':
! 			fputs_filtered (compare_cond_names[GET_FIELD (insn, 16, 18)],
! 					info);
! 			break;
! 		      case 'n':
! 			fputs_filtered (compare_cond_names[GET_FIELD (insn, 16, 18)
! 					+ GET_FIELD (insn, 4, 4) * 8], info);
! 			break;
! 		      case '@':
! 			fputs_filtered (add_cond_names[GET_FIELD (insn, 16, 18)
! 					+ GET_FIELD (insn, 4, 4) * 8], info);
! 			break;
! 		      case 's':
! 			(*info->fprintf_func) (info->stream, "%s ",
! 					       compare_cond_names[GET_COND (insn)]);
! 			break;
! 		      case 'a':
! 			(*info->fprintf_func) (info->stream, "%s ",
! 					       add_cond_names[GET_COND (insn)]);
! 			break;
! 		      case 'd':
! 			(*info->fprintf_func) (info->stream, "%s",
! 					       add_cond_names[GET_FIELD (insn, 16, 18)]);
! 			break;
! 
! 		      case 'l':
! 			(*info->fprintf_func) (info->stream, "%s ",
! 					       logical_cond_names[GET_COND (insn)]);
! 			break;
! 		      case 'u':
! 			(*info->fprintf_func) (info->stream, "%s ",
! 					       unit_cond_names[GET_COND (insn)]);
! 			break;
! 		      case 'y':
! 		      case 'x':
! 		      case 'b':
! 			(*info->fprintf_func)
! 			  (info->stream, "%s",
! 			   shift_cond_names[GET_FIELD (insn, 16, 18)]);
! 
! 			/* If the next character in args is 'n', it will handle
! 			   putting out the space.  */
! 			if (s[1] != 'n')
! 			  (*info->fprintf_func) (info->stream, " ");
! 			break;
! 
! 		      }
! 		    break;
! 		  }
  
  		case 'V':
  		  fput_const (extract_5_store (insn), info);
  		  break;
***************
*** 568,574 ****
  		case 'F':
  		  /* if no destination completer and not before a completer
  		     for fcmp, need a space here */
! 		  if (GET_FIELD (insn, 21, 22) == 1 || s[1] == 'M')
  		    fputs_filtered (float_format_names[GET_FIELD (insn, 19, 20)],
  				    info);
  		  else
--- 587,593 ----
  		case 'F':
  		  /* if no destination completer and not before a completer
  		     for fcmp, need a space here */
! 		  if (GET_FIELD (insn, 21, 22) == 1 || s[1] == '?')
  		    fputs_filtered (float_format_names[GET_FIELD (insn, 19, 20)],
  				    info);
  		  else
***************
*** 592,598 ****
  		case 'I':
  		  /* if no destination completer and not before a completer
  		     for fcmp, need a space here */
! 		  if (GET_FIELD (insn, 21, 22) == 1 || s[1] == 'M')
  		    fputs_filtered (float_format_names[GET_FIELD (insn, 20, 20)],
  				    info);
  		  else
--- 611,617 ----
  		case 'I':
  		  /* if no destination completer and not before a completer
  		     for fcmp, need a space here */
! 		  if (GET_FIELD (insn, 21, 22) == 1 || s[1] == '?')
  		    fputs_filtered (float_format_names[GET_FIELD (insn, 20, 20)],
  				    info);
  		  else
***************
*** 612,622 ****
  		      fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
  		  else
  		      fput_fp_reg (GET_FIELD (insn, 11, 15), info);
- 		  break;
- 		case 'M':
- 		    (*info->fprintf_func) (info->stream, "%s ",
- 					   float_comp_names[GET_FIELD
- 							      (insn, 27, 31)]);
  		  break;
  		default:
  		  (*info->fprintf_func) (info->stream, "%c", *s);
--- 631,636 ----



More information about the Binutils mailing list