public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Patch: more new instructions for PA2.0
@ 1999-08-11 12:43 Jerry Quinn
  0 siblings, 0 replies; 4+ messages in thread
From: Jerry Quinn @ 1999-08-11 12:43 UTC (permalink / raw)
  To: binutils

This patch adds a bunch of new instructions and pa2.0 syntax for existing
instructions.

-- 
Jerry Quinn                             Tel: (514) 761-8737
jquinn@nortelnetworks.com               Fax: (514) 761-8505
Speech Recognition Research


ChangeLog entry:

Wed Aug 11 15:21:27 EDT 1999  Jerry Quinn

    * hppa.h:  Document new completers and args.
    * hppa.h (pa_opcodes):  Add 64 bit patterns and pa2.0 syntax for uxor,
    uaddcm, dcor, addi, add, sub, subi, shladd, rfi, and probe.  Add pa2.0
    extensions for ssm, rsm, pdtlb, pitlb.  Add performance instructions
    pmenb and pmdis.
    * tc-hppa.c (pa_ip):  Absorb white space in instructions between args.
    Add new completers.  Fix bug in 64 bit condition handling.
    * hppa-dis.c (MASK_10, read_write_names, add_compl_names,
    extract_10U_store):  New.
    (print_insn_hppa):  Add new completers.

    * hppa/basic/add.s,addi.s,dcor.s,shladd.s,sub.s,subi.s,unit.s:  Add new
    syntax versions of instructions to tests. 
    * hppa/basic/add2.s,dcor2.s,perf.s,purge2.s,shladd2.s,sub2.s,system2.s,
    unit2.s:  New tests.
    * hppa/basic/basic.exp: Add new tests.

*** pa-prev/include/opcode/hppa.h	Thu Aug  5 17:23:43 1999
--- gas-src/include/opcode/hppa.h	Wed Aug 11 15:20:43 1999
***************
*** 71,78 ****
     In the args field, the following characters are unused:
  
  	'  "# %&    +-  /          :;< > @'
! 	'  C        LM       U   YZ[\]  '
! 	'   d       l              {|} '
  
     Here are all the characters:
  
--- 71,78 ----
     In the args field, the following characters are unused:
  
  	'  "# %&    +-  /          :;< > @'
! 	' BC        LM       U   YZ[\]  '
! 	'   de gh   lm   q         {|} '
  
     Here are all the characters:
  
***************
*** 104,110 ****
--- 104,125 ----
     cx   indexed load completer.
     cm   short load and store completer.
     cs   store bytes short completer.
+ 
+    cw	read/write completer for PROBE
+    cW	wide completer for MFCTL
+    cL	local processor completer for cache control
     cZ   System Control Completer (to support LPA, LHA, etc.)
+ 
+    ci	correction completer for DCOR
+    ca	add completer
+    cy	32 bit add carry completer
+    cY	64 bit add carry completer
+    cv	signed overflow trap completer
+    ct	trap on condition completer for ADDI, SUB
+    cT	trap on condition completer for UADDCM
+    cb	32 bit borrow completer for SUB
+    cB	64 bit borrow completer for SUB
+ 
     ch	left/right half completer
     cH	signed/unsigned saturation completer
     cS	signed/unsigned completer at 21
***************
*** 181,186 ****
--- 196,202 ----
  	low_sign_ext)
     R	5 bit immediate value at 15 (for the ssm, rsm, probei instructions)
  	(same as r above, except the value is in a different location)
+    U	10 bit immediate value at 15 (for SSM, RSM on pa2.0)
     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)
***************
*** 333,352 ****
--- 349,385 ----
  { "and",        0x08000200, 0xfc000fe0, "?lx,b,t", pa10},
  { "andcm",      0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
  { "andcm",      0x08000000, 0xfc000fe0, "?lx,b,t", pa10},
+ { "uxor",       0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT},
  { "uxor",       0x08000380, 0xfc000fe0, "?ux,b,t", pa10},
+ { "uaddcm",     0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT},
+ { "uaddcm",     0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT},
  { "uaddcm",     0x08000980, 0xfc000fe0, "?ux,b,t", pa10},
  { "uaddcmt",    0x080009c0, 0xfc000fe0, "?ux,b,t", pa10},
+ { "dcor",       0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT},
+ { "dcor",       0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT},
  { "dcor",       0x08000b80, 0xfc1f0fe0, "?ub,t",   pa10},
  { "idcor",      0x08000bc0, 0xfc1f0fe0, "?ub,t",   pa10},
+ { "addi",       0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT},
+ { "addi",       0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT},
  { "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",        0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT},
+ { "add",        0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT},
+ { "add",        0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT},
+ { "add",        0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT},
  { "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",        0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT},
+ { "sub",        0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT},
+ { "sub",        0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT},
+ { "sub",        0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT},
+ { "sub",        0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT},
+ { "sub",        0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT},
  { "sub",        0x08000400, 0xfc000fe0, "?sx,b,t", pa10},
  { "subo",       0x08000c00, 0xfc000fe0, "?sx,b,t", pa10},
  { "subb",       0x08000500, 0xfc000fe0, "?sx,b,t", pa10},
***************
*** 354,364 ****
--- 387,400 ----
  { "subt",       0x080004c0, 0xfc000fe0, "?sx,b,t", pa10},
  { "subto",      0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10},
  { "ds",         0x08000440, 0xfc000fe0, "?sx,b,t", pa10},
+ { "subi",       0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT},
  { "subi",       0x94000000, 0xfc000800, "?si,b,x", pa10},
  { "subio",      0x94000800, 0xfc000800, "?si,b,x", pa10},
  { "cmpiclr",    0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT},
  { "cmpiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT},
  { "comiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10},
+ { "shladd",     0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT},
+ { "shladd",     0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT},
  { "sh1add",     0x08000640, 0xfc000fe0, "?ax,b,t", pa10},
  { "sh1addl",    0x08000a40, 0xfc000fe0, "?ax,b,t", pa10},
  { "sh1addo",    0x08000e40, 0xfc000fe0, "?ax,b,t", pa10},
***************
*** 407,415 ****
--- 443,454 ----
  /* System Control Instructions */
  
  { "break",      0x00000000, 0xfc001fe0, "r,A", pa10},
+ { "rfi",        0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT},
  { "rfi",        0x00000c00, 0xffffffff, "", pa10},
  { "rfir",       0x00000ca0, 0xffffffff, "", pa11},
+ { "ssm",        0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
  { "ssm",        0x00000d60, 0xffe0ffe0, "R,t", pa10},
+ { "rsm",        0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
  { "rsm",        0x00000e60, 0xffe0ffe0, "R,t", pa10},
  { "mtsm",       0x00001860, 0xffe0ffff, "x", pa10},
  { "ldsid",      0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10},
***************
*** 419,427 ****
--- 458,471 ----
  { "mtsarcm",    0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT},
  { "mfia",       0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT},
  { "mfsp",       0x000004a0, 0xffff1fe0, "S,t", pa10},
+ { "mfctl",      0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT},
  { "mfctl",      0x000008a0, 0xfc1fffe0, "^,t", pa10},
  { "sync",       0x00000400, 0xffffffff, "", pa10},
  { "syncdma",    0x00100400, 0xffffffff, "", pa10},
+ { "probe",      0x04001180, 0xfc003fe0, "cw(s,b),x,t", pa10, FLAG_STRICT},
+ { "probe",      0x04001180, 0xfc003fe0, "cw(b),x,t", pa10, FLAG_STRICT},
+ { "probei",     0x04003180, 0xfc003fe0, "cw(s,b),R,t", pa10, FLAG_STRICT},
+ { "probei",     0x04003180, 0xfc003fe0, "cw(b),R,t", pa10, FLAG_STRICT},
  { "prober",     0x04001180, 0xfc003fe0, "(s,b),x,t", pa10},
  { "prober",     0x04001180, 0xfc003fe0, "(b),x,t", pa10},
  { "proberi",    0x04003180, 0xfc003fe0, "(s,b),R,t", pa10},
***************
*** 436,443 ****
--- 480,491 ----
  { "lha",        0x04001300, 0xfc003fc0, "cZx(b),t", pa10},
  { "lci",        0x04001300, 0xfc003fe0, "x(s,b),t", pa10},
  { "lci",        0x04001300, 0xfc003fe0, "x(b),t", pa10},
+ { "pdtlb",      0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT},
+ { "pdtlb",      0x04001600, 0xfc003fdf, "cLcZx(b)", pa20, FLAG_STRICT},
  { "pdtlb",      0x04001200, 0xfc003fdf, "cZx(s,b)", pa10},
  { "pdtlb",      0x04001200, 0xfc003fdf, "cZx(b)", pa10},
+ { "pitlb",      0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT},
+ { "pitlb",      0x04000600, 0xfc001fdf, "cLcZx(b)", pa20, FLAG_STRICT},
  { "pitlb",      0x04000200, 0xfc001fdf, "cZx(S,b)", pa10},
  { "pitlb",      0x04000200, 0xfc001fdf, "cZx(b)", pa10},
  { "pdtlbe",     0x04001240, 0xfc003fdf, "cZx(s,b)", pa10},
***************
*** 543,548 ****
--- 591,600 ----
  { "ftest",      0x30002420, 0xffffffff, "", pa10},
  { "fid",        0x30000000, 0xffffffff, "", pa11},
  
+ /* Performance Monitor Instructions */
+ 
+ { "pmdis",	0x30000280, 0xffffffdf, "N", pa20, FLAG_STRICT},
+ { "pmenb",	0x30000680, 0xffffffff, "", pa20, FLAG_STRICT},
  
  /* Assist Instructions */
  
*** pa-prev/gas/config/tc-hppa.c	Thu Aug  5 17:23:41 1999
--- gas-src/gas/config/tc-hppa.c	Wed Aug 11 13:24:58 1999
***************
*** 1529,1534 ****
--- 1529,1538 ----
           sure that the operands match.  */
        for (args = insn->args;; ++args)
  	{
+ 	  /* Absorb white space in instruction.  */
+ 	  while (*s == ' ' || *s == '\t')
+ 	    s++;
+ 
  	  switch (*args)
  	    {
  
***************
*** 1640,1645 ****
--- 1644,1656 ----
  	      CHECK_FIELD (num, 31, 0, 0);
  	      INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
  
+ 	    /* Handle an unsigned 10 bit immediate at 15.  */
+ 	    case 'U':
+ 	      num = pa_get_absolute_expression (&the_insn, &s);
+ 	      s = expr_end;
+ 	      CHECK_FIELD (num, 1023, 0, 0);
+ 	      INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
+ 
  	    /* Handle a 2 bit space identifier at 17.  */
  	    case 's':
  	      num = pa_parse_number (&s, 0);
***************
*** 1742,1747 ****
--- 1753,1799 ----
  		    INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
  		  }
  
+ 		/* Handle a local processor completer.  */
+ 		case 'L':
+ 		  if (strncasecmp (s, ",l", 2) != 0)
+ 		    break;
+ 		  s += 2;
+ 		  continue;
+ 
+ 		/* Handle a PROBE read/write completer.  */
+ 		case 'w':
+ 		  flag = 0;
+ 		  if (!strncasecmp (s, ",w", 2))
+ 		    {
+ 		      flag = 1;
+ 		      s += 2;
+ 		    }
+ 		  else if (!strncasecmp (s, ",r", 2))
+ 		    {
+ 		      flag = 0;
+ 		      s += 2;
+ 		    }
+ 
+ 		  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'))
***************
*** 1754,1759 ****
--- 1806,1955 ----
  
  		  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 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':
  		  {
***************
*** 1867,1873 ****
  		    if (*s == ',')
  		      {
  			s++;
- 			name = s;
  
  			/* 64 bit conditions.  */
  			if (*args == 'A')
--- 2063,2068 ----
***************
*** 1878,1883 ****
--- 2073,2079 ----
  			      break;
  			  }
  
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
***************
*** 2027,2033 ****
  		    if (*s == ',')
  		      {
  			s++;
- 			name = s;
  
  			/* 64 bit conditions.  */
  			if (*args == 'S')
--- 2223,2228 ----
***************
*** 2038,2043 ****
--- 2233,2239 ----
  			      break;
  			  }
  			    
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
***************
*** 2162,2168 ****
  		    if (*s == ',')
  		      {
  			s++;
- 			name = s;
  
  			/* 64 bit conditions.  */
  			if (*args == 'L')
--- 2358,2363 ----
***************
*** 2173,2178 ****
--- 2368,2374 ----
  			      break;
  			  }
  			    
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
***************
*** 2229,2236 ****
  		      {
  			save_s = s++;
  
- 			name = s;
- 
  			/* 64 bit conditions.  */
  			if (*args == 'X')
  			  {
--- 2425,2430 ----
***************
*** 2240,2245 ****
--- 2434,2440 ----
  			      break;
  			  }
  			    
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
*** pa-prev/opcodes/hppa-dis.c	Thu Aug  5 17:23:45 1999
--- gas-src/opcodes/hppa-dis.c	Mon Aug  9 19:57:30 1999
***************
*** 46,51 ****
--- 46,52 ----
  /* Get at various relevent fields of an instruction word. */
  
  #define MASK_5 0x1f
+ #define MASK_10 0x3ff
  #define MASK_11 0x7ff
  #define MASK_14 0x3fff
  #define MASK_21 0x1fffff
***************
*** 127,134 ****
  };
  static const char *const signed_unsigned_names[][3] = {",u", ",s"};
  static const char *const mix_half_names[][3] = {",l", ",r"};
! static const char *const saturation_names[][3] = {",us", ",ss", 0, ""};
! 
  
  /* For a bunch of different instructions form an index into a 
     completer name table. */
--- 128,138 ----
  };
  static const char *const signed_unsigned_names[][3] = {",u", ",s"};
  static const char *const mix_half_names[][3] = {",l", ",r"};
! static const char *const saturation_names[][4] = {",us", ",ss", 0, ""};
! static const char *const read_write_names[][3] = {",r", ",w"};
! static const char *const add_compl_names[] = {
!   0, "", ",l", ",tsv"
! };
  
  /* For a bunch of different instructions form an index into a 
     completer name table. */
***************
*** 235,240 ****
--- 239,252 ----
    return (word >> 16 & MASK_5);
  }
  
+ /* extract the 10 bit immediate field from a {sr}sm instruction */
+ static unsigned
+ extract_10U_store (word)
+      unsigned word;
+ {
+   return (word >> 16 & MASK_10);
+ }
+ 
  /* extract the immediate field from a bb instruction */
  static unsigned
  extract_5Q_store (word)
***************
*** 442,453 ****
--- 454,521 ----
  		      (*info->fprintf_func) (info->stream, "%s ",
  					     short_bytes_compl_names[GET_COMPL (insn)]);
  		      break;
+ 		    case 'L':
+ 		      (*info->fprintf_func) (info->stream, ",l");
+ 		      break;
+ 		    case 'w':
+ 		      (*info->fprintf_func) (info->stream, "%s ",
+ 					     read_write_names[GET_FIELD (insn, 25, 25)]);
+ 		      break;
+ 		    case 'W':
+ 		      (*info->fprintf_func) (info->stream, ",w");
+ 		      break;
+ 		    case 'r':
+ 		      if (GET_FIELD (insn, 23, 26) == 5)
+ 			(*info->fprintf_func) (info->stream, ",r");
+ 		      break;
  		    case 'Z':
  		      if (GET_FIELD (insn, 26, 26))
  			(*info->fprintf_func) (info->stream, ",m ");
  		      else
  			(*info->fprintf_func) (info->stream, " ");
  		      break;
+ 		    case 'i':
+ 		      if (GET_FIELD (insn, 25, 25))
+ 			(*info->fprintf_func) (info->stream, ",i");
+ 		      break;
+ 		    case 'a':
+ 		      (*info->fprintf_func)
+ 			(info->stream, "%s", add_compl_names[GET_FIELD
+ 							    (insn, 20, 21)]);
+ 		      break;
+ 		    case 'Y':
+ 		      (*info->fprintf_func)
+ 			(info->stream, ",dc%s", add_compl_names[GET_FIELD
+ 							       (insn, 20, 21)]);
+ 		      break;
+ 		    case 'y':
+ 		      (*info->fprintf_func)
+ 			(info->stream, ",c%s", add_compl_names[GET_FIELD
+ 							      (insn, 20, 21)]);
+ 		      break;
+ 		    case 'v':
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 't':
+ 		      (*info->fprintf_func) (info->stream, ",tc");
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 'B':
+ 		      (*info->fprintf_func) (info->stream, ",db");
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 'b':
+ 		      (*info->fprintf_func) (info->stream, ",b");
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 'T':
+ 		      if (GET_FIELD (insn, 25, 25))
+ 			(*info->fprintf_func) (info->stream, ",tc");
+ 		      break;
  		    case 'S':
  		      /* EXTRD/W has a following condition.  */
  		      if (*(s + 1) == '?')
***************
*** 615,620 ****
--- 683,691 ----
  		case 'R':
  		  fput_const (extract_5R_store (insn), info);
  		  break;
+ 		case 'U':
+ 		  fput_const (extract_10U_store (insn), info);
+ 		  break;
  		case 'Q':
  		  fput_const (extract_5Q_store (insn), info);
  		  break;
***************
*** 660,665 ****
--- 731,740 ----
  		case '.':
  		  (*info->fprintf_func) (info->stream, "%d",
  				    GET_FIELD (insn, 24, 25));
+ 		  break;
+ 		case '*':
+ 		  (*info->fprintf_func) (info->stream, "%d",
+ 				    GET_FIELD (insn, 22, 25));
  		  break;
  		case 'p':
  		  (*info->fprintf_func) (info->stream, "%d",

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Patch: more new instructions for PA2.0
       [not found] <199908111943.MAA18169@cygnus.com>
@ 1999-08-28  3:21 ` Jeffrey A Law
  0 siblings, 0 replies; 4+ messages in thread
From: Jeffrey A Law @ 1999-08-28  3:21 UTC (permalink / raw)
  To: Jerry Quinn; +Cc: binutils

  In message <199908111943.MAA18169@cygnus.com>you write:
  > This patch adds a bunch of new instructions and pa2.0 syntax for existing
  > instructions.
  > 
  > -- 
  > Jerry Quinn                             Tel: (514) 761-8737
  > jquinn@nortelnetworks.com               Fax: (514) 761-8505
  > Speech Recognition Research
  > 
  > 
  > ChangeLog entry:
  > 
  > Wed Aug 11 15:21:27 EDT 1999  Jerry Quinn
  > 
  >     * hppa.h:  Document new completers and args.
  >     * hppa.h (pa_opcodes):  Add 64 bit patterns and pa2.0 syntax for uxor,
  >     uaddcm, dcor, addi, add, sub, subi, shladd, rfi, and probe.  Add pa2.0
  >     extensions for ssm, rsm, pdtlb, pitlb.  Add performance instructions
  >     pmenb and pmdis.
  >     * tc-hppa.c (pa_ip):  Absorb white space in instructions between args.
  >     Add new completers.  Fix bug in 64 bit condition handling.
  >     * hppa-dis.c (MASK_10, read_write_names, add_compl_names,
  >     extract_10U_store):  New.
  >     (print_insn_hppa):  Add new completers.
  > 
  >     * hppa/basic/add.s,addi.s,dcor.s,shladd.s,sub.s,subi.s,unit.s:  Add new
  >     syntax versions of instructions to tests. 
  >     * hppa/basic/add2.s,dcor2.s,perf.s,purge2.s,shladd2.s,sub2.s,system2.s,
  >     unit2.s:  New tests.
  >     * hppa/basic/basic.exp: Add new tests.
This is quite a bit larger than what I would prefer to see.  It would have
been a lot easier to deal with had you broken it up a little.  For example
one patch for the unit stuff, another for normal arithmetic and another for
system/performance stuff.

The patch is also out of date in some respects.  For example, I fixed the 64bit
condition bug mentioned and "fixed" in this patch back on August 6th (right
after installing your rough 64bit code).

It was also out of date with some of the opcodes in the opcode table.  Not
sure if I missed a patch or something, but there your patch has references
to instructions which are not in the opcode table in the CVS tree.

Anyway, I *think* I've untangled this patch and managed to get it installed.

jeff

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Patch: more new instructions for PA2.0
       [not found] <89042619@toto.iv>
@ 1999-08-12 14:35 ` Jerry Quinn
  0 siblings, 0 replies; 4+ messages in thread
From: Jerry Quinn @ 1999-08-12 14:35 UTC (permalink / raw)
  To: binutils

I forgot to include the test cases in this patch.  Changelog info is already
there.  This can just be tacked onto the end. Here they are:

diff -cN pa-prev/gas/testsuite/gas/hppa/basic/add.s gas-src/gas/testsuite/gas/hppa/basic/add.s
*** pa-prev/gas/testsuite/gas/hppa/basic/add.s	Thu Aug  5 17:23:50 1999
--- gas-src/gas/testsuite/gas/hppa/basic/add.s	Tue Aug 10 14:42:05 1999
***************
*** 98,100 ****
--- 98,168 ----
  	addco,vnz  %r4,%r5,%r6
  	addco,nsv  %r4,%r5,%r6
  	addco,ev  %r4,%r5,%r6
+ 
+ 	add,l  %r4,%r5,%r6
+ 	add,l,=  %r4,%r5,%r6
+ 	add,l,<  %r4,%r5,%r6
+ 	add,l,<=  %r4,%r5,%r6
+ 	add,l,nuv  %r4,%r5,%r6
+ 	add,l,znv  %r4,%r5,%r6
+ 	add,l,sv  %r4,%r5,%r6
+ 	add,l,od  %r4,%r5,%r6
+ 	add,l,tr  %r4,%r5,%r6
+ 	add,l,<>  %r4,%r5,%r6
+ 	add,l,>=  %r4,%r5,%r6
+ 	add,l,>  %r4,%r5,%r6
+ 	add,l,uv  %r4,%r5,%r6
+ 	add,l,vnz  %r4,%r5,%r6
+ 	add,l,nsv  %r4,%r5,%r6
+ 	add,l,ev  %r4,%r5,%r6
+ 
+ 	add,tsv  %r4,%r5,%r6
+ 	add,tsv,=  %r4,%r5,%r6
+ 	add,tsv,<  %r4,%r5,%r6
+ 	add,tsv,<=  %r4,%r5,%r6
+ 	add,tsv,nuv  %r4,%r5,%r6
+ 	add,tsv,znv  %r4,%r5,%r6
+ 	add,tsv,sv  %r4,%r5,%r6
+ 	add,tsv,od  %r4,%r5,%r6
+ 	add,tsv,tr  %r4,%r5,%r6
+ 	add,tsv,<>  %r4,%r5,%r6
+ 	add,tsv,>=  %r4,%r5,%r6
+ 	add,tsv,>  %r4,%r5,%r6
+ 	add,tsv,uv  %r4,%r5,%r6
+ 	add,tsv,vnz  %r4,%r5,%r6
+ 	add,tsv,nsv  %r4,%r5,%r6
+ 	add,tsv,ev  %r4,%r5,%r6
+ 
+ 	add,c  %r4,%r5,%r6
+ 	add,c,=  %r4,%r5,%r6
+ 	add,c,<  %r4,%r5,%r6
+ 	add,c,<=  %r4,%r5,%r6
+ 	add,c,nuv  %r4,%r5,%r6
+ 	add,c,znv  %r4,%r5,%r6
+ 	add,c,sv  %r4,%r5,%r6
+ 	add,c,od  %r4,%r5,%r6
+ 	add,c,tr  %r4,%r5,%r6
+ 	add,c,<>  %r4,%r5,%r6
+ 	add,c,>=  %r4,%r5,%r6
+ 	add,c,>  %r4,%r5,%r6
+ 	add,c,uv  %r4,%r5,%r6
+ 	add,c,vnz  %r4,%r5,%r6
+ 	add,c,nsv  %r4,%r5,%r6
+ 	add,c,ev  %r4,%r5,%r6
+ 
+ 	add,c,tsv  %r4,%r5,%r6
+ 	add,c,tsv,=  %r4,%r5,%r6
+ 	add,c,tsv,<  %r4,%r5,%r6
+ 	add,c,tsv,<=  %r4,%r5,%r6
+ 	add,c,tsv,nuv  %r4,%r5,%r6
+ 	add,c,tsv,znv  %r4,%r5,%r6
+ 	add,c,tsv,sv  %r4,%r5,%r6
+ 	add,c,tsv,od  %r4,%r5,%r6
+ 	add,tsv,c,tr  %r4,%r5,%r6
+ 	add,tsv,c,<>  %r4,%r5,%r6
+ 	add,tsv,c,>=  %r4,%r5,%r6
+ 	add,tsv,c,>  %r4,%r5,%r6
+ 	add,tsv,c,uv  %r4,%r5,%r6
+ 	add,tsv,c,vnz  %r4,%r5,%r6
+ 	add,tsv,c,nsv  %r4,%r5,%r6
+ 	add,tsv,c,ev  %r4,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/add2.s gas-src/gas/testsuite/gas/hppa/basic/add2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/add2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/add2.s	Tue Aug 10 17:39:54 1999
***************
*** 0 ****
--- 1,101 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; Basic add/sh?add instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	add,*  %r4,%r5,%r6
+ 	add,*=  %r4,%r5,%r6
+ 	add,*<  %r4,%r5,%r6
+ 	add,*<=  %r4,%r5,%r6
+ 	add,*nuv  %r4,%r5,%r6
+ 	add,*znv  %r4,%r5,%r6
+ 	add,*sv  %r4,%r5,%r6
+ 	add,*od  %r4,%r5,%r6
+ 	add,*tr  %r4,%r5,%r6
+ 	add,*<>  %r4,%r5,%r6
+ 	add,*>=  %r4,%r5,%r6
+ 	add,*>  %r4,%r5,%r6
+ 	add,*uv  %r4,%r5,%r6
+ 	add,*vnz  %r4,%r5,%r6
+ 	add,*nsv  %r4,%r5,%r6
+ 	add,*ev  %r4,%r5,%r6
+ 
+ 	add,l,*  %r4,%r5,%r6
+ 	add,l,*=  %r4,%r5,%r6
+ 	add,l,*<  %r4,%r5,%r6
+ 	add,l,*<=  %r4,%r5,%r6
+ 	add,l,*nuv  %r4,%r5,%r6
+ 	add,l,*znv  %r4,%r5,%r6
+ 	add,l,*sv  %r4,%r5,%r6
+ 	add,l,*od  %r4,%r5,%r6
+ 	add,l,*tr  %r4,%r5,%r6
+ 	add,l,*<>  %r4,%r5,%r6
+ 	add,l,*>=  %r4,%r5,%r6
+ 	add,l,*>  %r4,%r5,%r6
+ 	add,l,*uv  %r4,%r5,%r6
+ 	add,l,*vnz  %r4,%r5,%r6
+ 	add,l,*nsv  %r4,%r5,%r6
+ 	add,l,*ev  %r4,%r5,%r6
+ 
+ 	add,tsv,*  %r4,%r5,%r6
+ 	add,tsv,*=  %r4,%r5,%r6
+ 	add,tsv,*<  %r4,%r5,%r6
+ 	add,tsv,*<=  %r4,%r5,%r6
+ 	add,tsv,*nuv  %r4,%r5,%r6
+ 	add,tsv,*znv  %r4,%r5,%r6
+ 	add,tsv,*sv  %r4,%r5,%r6
+ 	add,tsv,*od  %r4,%r5,%r6
+ 	add,tsv,*tr  %r4,%r5,%r6
+ 	add,tsv,*<>  %r4,%r5,%r6
+ 	add,tsv,*>=  %r4,%r5,%r6
+ 	add,tsv,*>  %r4,%r5,%r6
+ 	add,tsv,*uv  %r4,%r5,%r6
+ 	add,tsv,*vnz  %r4,%r5,%r6
+ 	add,tsv,*nsv  %r4,%r5,%r6
+ 	add,tsv,*ev  %r4,%r5,%r6
+ 
+ 	add,dc,*  %r4,%r5,%r6
+ 	add,dc,*=  %r4,%r5,%r6
+ 	add,dc,*<  %r4,%r5,%r6
+ 	add,dc,*<=  %r4,%r5,%r6
+ 	add,dc,*nuv  %r4,%r5,%r6
+ 	add,dc,*znv  %r4,%r5,%r6
+ 	add,dc,*sv  %r4,%r5,%r6
+ 	add,dc,*od  %r4,%r5,%r6
+ 	add,dc,*tr  %r4,%r5,%r6
+ 	add,dc,*<>  %r4,%r5,%r6
+ 	add,dc,*>=  %r4,%r5,%r6
+ 	add,dc,*>  %r4,%r5,%r6
+ 	add,dc,*uv  %r4,%r5,%r6
+ 	add,dc,*vnz  %r4,%r5,%r6
+ 	add,dc,*nsv  %r4,%r5,%r6
+ 	add,dc,*ev  %r4,%r5,%r6
+ 
+ 	add,dc,tsv,*  %r4,%r5,%r6
+ 	add,dc,tsv,*=  %r4,%r5,%r6
+ 	add,dc,tsv,*<  %r4,%r5,%r6
+ 	add,dc,tsv,*<=  %r4,%r5,%r6
+ 	add,dc,tsv,*nuv  %r4,%r5,%r6
+ 	add,dc,tsv,*znv  %r4,%r5,%r6
+ 	add,dc,tsv,*sv  %r4,%r5,%r6
+ 	add,dc,tsv,*od  %r4,%r5,%r6
+ 	add,tsv,dc,*tr  %r4,%r5,%r6
+ 	add,tsv,dc,*<>  %r4,%r5,%r6
+ 	add,tsv,dc,*>=  %r4,%r5,%r6
+ 	add,tsv,dc,*>  %r4,%r5,%r6
+ 	add,tsv,dc,*uv  %r4,%r5,%r6
+ 	add,tsv,dc,*vnz  %r4,%r5,%r6
+ 	add,tsv,dc,*nsv  %r4,%r5,%r6
+ 	add,tsv,dc,*ev  %r4,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/addi.s gas-src/gas/testsuite/gas/hppa/basic/addi.s
*** pa-prev/gas/testsuite/gas/hppa/basic/addi.s	Thu Aug  5 17:23:50 1999
--- gas-src/gas/testsuite/gas/hppa/basic/addi.s	Tue Aug 10 14:28:18 1999
***************
*** 9,15 ****
  	.SUBSPA $CODE$
  
  	.align 4
! ; Basic immediate instruction tests.  
  ;
  ; We could/should test some of the corner cases for register and 
  ; immediate fields.  We should also check the assorted field
--- 9,15 ----
  	.SUBSPA $CODE$
  
  	.align 4
! ; Basic add immediate instruction tests.  
  ;
  ; We could/should test some of the corner cases for register and 
  ; immediate fields.  We should also check the assorted field
***************
*** 81,83 ****
--- 81,134 ----
  	addito,vnz  123,%r5,%r6
  	addito,nsv  123,%r5,%r6
  	addito,ev  123,%r5,%r6
+ 
+ 	addi,tsv  123,%r5,%r6
+ 	addi,tsv,=  123,%r5,%r6
+ 	addi,tsv,<  123,%r5,%r6
+ 	addi,tsv,<=  123,%r5,%r6
+ 	addi,tsv,nuv  123,%r5,%r6
+ 	addi,tsv,znv  123,%r5,%r6
+ 	addi,tsv,sv  123,%r5,%r6
+ 	addi,tsv,od  123,%r5,%r6
+ 	addi,tsv,tr  123,%r5,%r6
+ 	addi,tsv,<>  123,%r5,%r6
+ 	addi,tsv,>=  123,%r5,%r6
+ 	addi,tsv,>  123,%r5,%r6
+ 	addi,tsv,uv  123,%r5,%r6
+ 	addi,tsv,vnz  123,%r5,%r6
+ 	addi,tsv,nsv  123,%r5,%r6
+ 	addi,tsv,ev  123,%r5,%r6
+ 
+ 	addi,tc  123,%r5,%r6
+ 	addi,tc,=  123,%r5,%r6
+ 	addi,tc,<  123,%r5,%r6
+ 	addi,tc,<=  123,%r5,%r6
+ 	addi,tc,nuv  123,%r5,%r6
+ 	addi,tc,znv  123,%r5,%r6
+ 	addi,tc,sv  123,%r5,%r6
+ 	addi,tc,od  123,%r5,%r6
+ 	addi,tc,tr  123,%r5,%r6
+ 	addi,tc,<>  123,%r5,%r6
+ 	addi,tc,>=  123,%r5,%r6
+ 	addi,tc,>  123,%r5,%r6
+ 	addi,tc,uv  123,%r5,%r6
+ 	addi,tc,vnz  123,%r5,%r6
+ 	addi,tc,nsv  123,%r5,%r6
+ 	addi,tc,ev  123,%r5,%r6
+ 
+ 	addi,tc,tsv  123,%r5,%r6
+ 	addi,tc,tsv,=  123,%r5,%r6
+ 	addi,tc,tsv,<  123,%r5,%r6
+ 	addi,tc,tsv,<=  123,%r5,%r6
+ 	addi,tc,tsv,nuv  123,%r5,%r6
+ 	addi,tc,tsv,znv  123,%r5,%r6
+ 	addi,tc,tsv,sv  123,%r5,%r6
+ 	addi,tc,tsv,od  123,%r5,%r6
+ 	addi,tsv,tc,tr  123,%r5,%r6
+ 	addi,tsv,tc,<>  123,%r5,%r6
+ 	addi,tsv,tc,>=  123,%r5,%r6
+ 	addi,tsv,tc,>  123,%r5,%r6
+ 	addi,tsv,tc,uv  123,%r5,%r6
+ 	addi,tsv,tc,vnz  123,%r5,%r6
+ 	addi,tsv,tc,nsv  123,%r5,%r6
+ 	addi,tsv,tc,ev  123,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/basic.exp gas-src/gas/testsuite/gas/hppa/basic/basic.exp
*** pa-prev/gas/testsuite/gas/hppa/basic/basic.exp	Thu Aug  5 17:23:51 1999
--- gas-src/gas/testsuite/gas/hppa/basic/basic.exp	Wed Aug 11 14:34:19 1999
***************
*** 500,505 ****
--- 500,678 ----
  	    -re "^ +\[0-9\]+ 0134 08A4BF06\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 0138 08A4DF06\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 013c 08A4FF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0140 08A40A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0144 08A42A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0148 08A44A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 014c 08A46A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0150 08A48A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0154 08A4AA06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0158 08A4CA06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 015c 08A4EA06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0160 08A41A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0164 08A43A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0168 08A45A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 016c 08A47A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0170 08A49A06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0174 08A4BA06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0178 08A4DA06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 017c 08A4FA06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0180 08A40E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0184 08A42E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0188 08A44E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 018c 08A46E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0190 08A48E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0194 08A4AE06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0198 08A4CE06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 019c 08A4EE06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a0 08A41E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a4 08A43E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a8 08A45E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ac 08A47E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b0 08A49E06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b4 08A4BE06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b8 08A4DE06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01bc 08A4FE06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c0 08A40706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c4 08A42706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c8 08A44706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01cc 08A46706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d0 08A48706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d4 08A4A706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d8 08A4C706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01dc 08A4E706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e0 08A41706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e4 08A43706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e8 08A45706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ec 08A47706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f0 08A49706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f4 08A4B706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f8 08A4D706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01fc 08A4F706\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0200 08A40F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0204 08A42F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0208 08A44F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 020c 08A46F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0210 08A48F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0214 08A4AF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0218 08A4CF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 021c 08A4EF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0220 08A41F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0224 08A43F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0228 08A45F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 022c 08A47F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0230 08A49F06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0234 08A4BF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0238 08A4DF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 023c 08A4FF06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==144] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_add2 {} {
+     set testname "add2.s: add2 tests"
+     set x 0
+ 
+     gas_start "add2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 08A40626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 08A42626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 08A44626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 08A46626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 08A48626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 08A4A626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 08A4C626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 08A4E626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 08A41626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0024 08A43626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0028 08A45626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 002c 08A47626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0030 08A49626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0034 08A4B626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0038 08A4D626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 003c 08A4F626\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0040 08A40A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0044 08A42A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0048 08A44A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 004c 08A46A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0050 08A48A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0054 08A4AA26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0058 08A4CA26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 005c 08A4EA26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0060 08A41A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0064 08A43A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0068 08A45A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 006c 08A47A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0070 08A49A26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0074 08A4BA26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0078 08A4DA26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 007c 08A4FA26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 08A40E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 08A42E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 08A44E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 08A46E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0090 08A48E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0094 08A4AE26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0098 08A4CE26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 009c 08A4EE26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a0 08A41E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a4 08A43E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a8 08A45E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ac 08A47E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b0 08A49E26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b4 08A4BE26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b8 08A4DE26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00bc 08A4FE26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c0 08A40726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c4 08A42726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c8 08A44726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00cc 08A46726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d0 08A48726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d4 08A4A726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d8 08A4C726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00dc 08A4E726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e0 08A41726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e4 08A43726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e8 08A45726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ec 08A47726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f0 08A49726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f4 08A4B726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f8 08A4D726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00fc 08A4F726\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0100 08A40F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0104 08A42F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0108 08A44F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 010c 08A46F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0110 08A48F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0114 08A4AF26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0118 08A4CF26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 011c 08A4EF26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0120 08A41F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0124 08A43F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0128 08A45F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 012c 08A47F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0130 08A49F26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0134 08A4BF26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0138 08A4DF26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 013c 08A4FF26\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "\[^\n\]*\n"				{ }
  	    timeout				{ perror "timeout\n"; break }
  	    eof					{ break }
***************
*** 745,750 ****
--- 918,1269 ----
      if [expr $x==48] then { pass $testname } else { fail $testname }
  }
  
+ proc do_shladd {} {
+     set testname "shladd.s: shladd tests"
+     set x 0
+ 
+     gas_start "shladd.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 08A40646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 08A42646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 08A44646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 08A46646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 08A48646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 08A4A646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 08A4C646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 08A4E646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 08A41646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0024 08A43646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0028 08A45646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 002c 08A47646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0030 08A49646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0034 08A4B646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0038 08A4D646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 003c 08A4F646\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0040 08A40A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0044 08A42A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0048 08A44A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 004c 08A46A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0050 08A48A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0054 08A4AA46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0058 08A4CA46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 005c 08A4EA46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0060 08A41A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0064 08A43A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0068 08A45A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 006c 08A47A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0070 08A49A46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0074 08A4BA46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0078 08A4DA46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 007c 08A4FA46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 08A40E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 08A42E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 08A44E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 08A46E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0090 08A48E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0094 08A4AE46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0098 08A4CE46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 009c 08A4EE46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a0 08A41E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a4 08A43E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a8 08A45E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ac 08A47E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b0 08A49E46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b4 08A4BE46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b8 08A4DE46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00bc 08A4FE46\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c0 08A40686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c4 08A42686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c8 08A44686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00cc 08A46686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d0 08A48686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d4 08A4A686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d8 08A4C686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00dc 08A4E686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e0 08A41686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e4 08A43686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e8 08A45686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ec 08A47686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f0 08A49686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f4 08A4B686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f8 08A4D686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00fc 08A4F686\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0100 08A40A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0104 08A42A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0108 08A44A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 010c 08A46A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0110 08A48A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0114 08A4AA86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0118 08A4CA86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 011c 08A4EA86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0120 08A41A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0124 08A43A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0128 08A45A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 012c 08A47A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0130 08A49A86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0134 08A4BA86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0138 08A4DA86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 013c 08A4FA86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0140 08A40E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0144 08A42E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0148 08A44E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 014c 08A46E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0150 08A48E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0154 08A4AE86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0158 08A4CE86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 015c 08A4EE86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0160 08A41E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0164 08A43E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0168 08A45E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 016c 08A47E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0170 08A49E86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0174 08A4BE86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0178 08A4DE86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 017c 08A4FE86\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0180 08A406C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0184 08A426C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0188 08A446C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 018c 08A466C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0190 08A486C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0194 08A4A6C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0198 08A4C6C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 019c 08A4E6C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a0 08A416C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a4 08A436C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a8 08A456C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ac 08A476C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b0 08A496C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b4 08A4B6C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b8 08A4D6C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01bc 08A4F6C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c0 08A40AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c4 08A42AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c8 08A44AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01cc 08A46AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d0 08A48AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d4 08A4AAC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d8 08A4CAC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01dc 08A4EAC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e0 08A41AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e4 08A43AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e8 08A45AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ec 08A47AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f0 08A49AC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f4 08A4BAC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f8 08A4DAC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01fc 08A4FAC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0200 08A40EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0204 08A42EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0208 08A44EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 020c 08A46EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0210 08A48EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0214 08A4AEC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0218 08A4CEC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 021c 08A4EEC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0220 08A41EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0224 08A43EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0228 08A45EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 022c 08A47EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0230 08A49EC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0234 08A4BEC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0238 08A4DEC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 023c 08A4FEC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==144] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_shladd2 {} {
+     set testname "shladd2.s: shladd2 tests"
+     set x 0
+ 
+     gas_start "shladd2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 08A40666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 08A42666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 08A44666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 08A46666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 08A48666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 08A4A666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 08A4C666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 08A4E666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 08A41666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0024 08A43666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0028 08A45666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 002c 08A47666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0030 08A49666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0034 08A4B666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0038 08A4D666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 003c 08A4F666\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0040 08A40A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0044 08A42A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0048 08A44A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 004c 08A46A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0050 08A48A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0054 08A4AA66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0058 08A4CA66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 005c 08A4EA66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0060 08A41A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0064 08A43A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0068 08A45A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 006c 08A47A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0070 08A49A66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0074 08A4BA66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0078 08A4DA66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 007c 08A4FA66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 08A40E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 08A42E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 08A44E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 08A46E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0090 08A48E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0094 08A4AE66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0098 08A4CE66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 009c 08A4EE66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a0 08A41E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a4 08A43E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a8 08A45E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ac 08A47E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b0 08A49E66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b4 08A4BE66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b8 08A4DE66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00bc 08A4FE66\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c0 08A406A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c4 08A426A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c8 08A446A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00cc 08A466A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d0 08A486A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d4 08A4A6A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d8 08A4C6A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00dc 08A4E6A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e0 08A416A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e4 08A436A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e8 08A456A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ec 08A476A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f0 08A496A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f4 08A4B6A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f8 08A4D6A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00fc 08A4F6A6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0100 08A40AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0104 08A42AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0108 08A44AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 010c 08A46AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0110 08A48AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0114 08A4AAA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0118 08A4CAA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 011c 08A4EAA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0120 08A41AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0124 08A43AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0128 08A45AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 012c 08A47AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0130 08A49AA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0134 08A4BAA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0138 08A4DAA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 013c 08A4FAA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0140 08A40EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0144 08A42EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0148 08A44EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 014c 08A46EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0150 08A48EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0154 08A4AEA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0158 08A4CEA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 015c 08A4EEA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0160 08A41EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0164 08A43EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0168 08A45EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 016c 08A47EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0170 08A49EA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0174 08A4BEA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0178 08A4DEA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 017c 08A4FEA6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0180 08A406E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0184 08A426E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0188 08A446E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 018c 08A466E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0190 08A486E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0194 08A4A6E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0198 08A4C6E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 019c 08A4E6E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a0 08A416E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a4 08A436E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a8 08A456E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ac 08A476E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b0 08A496E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b4 08A4B6E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b8 08A4D6E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01bc 08A4F6E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c0 08A40AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c4 08A42AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c8 08A44AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01cc 08A46AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d0 08A48AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d4 08A4AAE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d8 08A4CAE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01dc 08A4EAE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e0 08A41AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e4 08A43AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e8 08A45AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ec 08A47AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f0 08A49AE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f4 08A4BAE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f8 08A4DAE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01fc 08A4FAE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0200 08A40EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0204 08A42EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0208 08A44EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 020c 08A46EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0210 08A48EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0214 08A4AEE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0218 08A4CEE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 021c 08A4EEE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0220 08A41EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0224 08A43EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0228 08A45EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 022c 08A47EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0230 08A49EE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0234 08A4BEE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0238 08A4DEE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 023c 08A4FEE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==144] then { pass $testname } else { fail $testname }
+ }
+ 
  proc do_sub {} {
      set testname "sub.s: sub tests"
      set x 0
***************
*** 856,861 ****
--- 1375,1585 ----
  	    -re "^ +\[0-9\]+ 0174 08A4BCC6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 0178 08A4DCC6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 017c 08A4FCC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0180 08A40C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0184 08A42C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0188 08A44C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 018c 08A46C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0190 08A48C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0194 08A4AC06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0198 08A4CC06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 019c 08A4EC06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a0 08A41C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a4 08A43C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a8 08A45C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ac 08A47C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b0 08A49C06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b4 08A4BC06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b8 08A4DC06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01bc 08A4FC06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c0 08A40506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c4 08A42506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01c8 08A44506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01cc 08A46506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d0 08A48506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d4 08A4A506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01d8 08A4C506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01dc 08A4E506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e0 08A41506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e4 08A43506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01e8 08A45506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ec 08A47506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f0 08A49506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f4 08A4B506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01f8 08A4D506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01fc 08A4F506\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0200 08A40D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0204 08A42D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0208 08A44D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 020c 08A46D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0210 08A48D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0214 08A4AD06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0218 08A4CD06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 021c 08A4ED06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0220 08A41D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0224 08A43D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0228 08A45D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 022c 08A47D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0230 08A49D06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0234 08A4BD06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0238 08A4DD06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 023c 08A4FD06\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0240 08A404C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0244 08A424C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0248 08A444C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 024c 08A464C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0250 08A484C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0254 08A4A4C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0258 08A4C4C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 025c 08A4E4C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0260 08A414C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0264 08A434C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0268 08A454C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 026c 08A474C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0270 08A494C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0274 08A4B4C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0278 08A4D4C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 027c 08A4F4C6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0280 08A40CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0284 08A42CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0288 08A44CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 028c 08A46CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0290 08A48CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0294 08A4ACC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0298 08A4CCC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 029c 08A4ECC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02a0 08A41CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02a4 08A43CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02a8 08A45CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02ac 08A47CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02b0 08A49CC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02b4 08A4BCC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02b8 08A4DCC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 02bc 08A4FCC6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==176] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_sub2 {} {
+     set testname "sub2.s: sub2 tests"
+     set x 0
+ 
+     gas_start "sub2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 08A40426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 08A42426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 08A44426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 08A46426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 08A48426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 08A4A426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 08A4C426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 08A4E426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 08A41426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0024 08A43426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0028 08A45426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 002c 08A47426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0030 08A49426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0034 08A4B426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0038 08A4D426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 003c 08A4F426\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0040 08A40C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0044 08A42C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0048 08A44C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 004c 08A46C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0050 08A48C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0054 08A4AC26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0058 08A4CC26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 005c 08A4EC26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0060 08A41C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0064 08A43C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0068 08A45C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 006c 08A47C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0070 08A49C26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0074 08A4BC26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0078 08A4DC26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 007c 08A4FC26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 08A40526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 08A42526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 08A44526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 08A46526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0090 08A48526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0094 08A4A526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0098 08A4C526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 009c 08A4E526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a0 08A41526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a4 08A43526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a8 08A45526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ac 08A47526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b0 08A49526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b4 08A4B526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b8 08A4D526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00bc 08A4F526\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c0 08A40D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c4 08A42D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00c8 08A44D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00cc 08A46D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d0 08A48D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d4 08A4AD26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00d8 08A4CD26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00dc 08A4ED26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e0 08A41D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e4 08A43D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00e8 08A45D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ec 08A47D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f0 08A49D26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f4 08A4BD26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00f8 08A4DD26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00fc 08A4FD26\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0100 08A404E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0104 08A424E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0108 08A444E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 010c 08A464E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0110 08A484E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0114 08A4A4E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0118 08A4C4E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 011c 08A4E4E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0120 08A414E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0124 08A434E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0128 08A454E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 012c 08A474E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0130 08A494E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0134 08A4B4E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0138 08A4D4E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 013c 08A4F4E6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0140 08A40CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0144 08A42CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0148 08A44CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 014c 08A46CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0150 08A48CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0154 08A4ACE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0158 08A4CCE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 015c 08A4ECE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0160 08A41CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0164 08A43CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0168 08A45CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 016c 08A47CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0170 08A49CE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0174 08A4BCE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0178 08A4DCE6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 017c 08A4FCE6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "\[^\n\]*\n"				{ }
  	    timeout				{ perror "timeout\n"; break }
  	    eof					{ break }
***************
*** 1096,1101 ****
--- 1820,1902 ----
  	    -re "^ +\[0-9\]+ 0084 08A499C6\[^\n]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 0088 08A4D9C6\[^\n]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 008c 08A4F9C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0090 08A409C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0094 08A449C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0098 08A469C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 009c 08A489C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a0 08A4C9C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a4 08A4E9C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a8 08A419C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ac 08A459C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b0 08A479C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b4 08A499C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b8 08A4D9C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00bc 08A4F9C6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==48] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_unit2 {} {
+     set testname "unit2.s: unit2 tests"
+     set x 0
+ 
+     gas_start "unit2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 08A403A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 08A443A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 08A463A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 08A483A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 08A4C3A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 08A4E3A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 08A413A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 08A453A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 08A473A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0024 08A493A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0028 08A4D3A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 002c 08A4F3A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0030 08A409A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0034 08A449A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0038 08A469A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 003c 08A489A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0040 08A4C9A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0044 08A4E9A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0048 08A419A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 004c 08A459A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0050 08A479A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0054 08A499A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0058 08A4D9A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 005c 08A4F9A6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0060 08A409E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0064 08A449E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0068 08A469E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 006c 08A489E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0070 08A4C9E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0074 08A4E9E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0078 08A419E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 007c 08A459E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 08A479E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 08A499E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 08A4D9E6\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 08A4F9E6\[^\n]*\n"	{ set x [expr $x+1] }
  	    -re "\[^\n\]*\n"				{ }
  	    timeout				{ perror "timeout\n"; break }
  	    eof					{ break }
***************
*** 1149,1154 ****
--- 1950,2020 ----
  	    -re "^ +\[0-9\]+ 0054 08809BC5\[^\n]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 0058 0880DBC5\[^\n]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 005c 0880FBC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0060 08800BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0064 08804BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0068 08806BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 006c 08808BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0070 0880CBC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0074 0880EBC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0078 08801BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 007c 08805BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 08807BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 08809BC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 0880DBC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 0880FBC5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==36] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_dcor2 {} {
+     set testname "dcor2.s: dcor2 tests"
+     set x 0
+ 
+     gas_start "dcor2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 08800BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 08804BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 08806BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 08808BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 0880CBA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 0880EBA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 08801BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 08805BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 08807BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0024 08809BA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0028 0880DBA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 002c 0880FBA5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0030 08800BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0034 08804BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0038 08806BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 003c 08808BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0040 0880CBE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0044 0880EBE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0048 08801BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 004c 08805BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0050 08807BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0054 08809BE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0058 0880DBE5\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 005c 0880FBE5\[^\n]*\n"	{ set x [expr $x+1] }
  	    -re "\[^\n\]*\n"				{ }
  	    timeout				{ perror "timeout\n"; break }
  	    eof					{ break }
***************
*** 1242,1247 ****
--- 2108,2161 ----
  	    -re "^ +\[0-9\]+ 00f4 B0A6B8F6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 00f8 B0A6D8F6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 00fc B0A6F8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0100 B4A608F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0104 B4A628F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0108 B4A648F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 010c B4A668F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0110 B4A688F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0114 B4A6A8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0118 B4A6C8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 011c B4A6E8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0120 B4A618F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0124 B4A638F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0128 B4A658F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 012c B4A678F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0130 B4A698F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0134 B4A6B8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0138 B4A6D8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 013c B4A6F8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0140 B0A600F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0144 B0A620F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0148 B0A640F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 014c B0A660F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0150 B0A680F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0154 B0A6A0F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0158 B0A6C0F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 015c B0A6E0F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0160 B0A610F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0164 B0A630F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0168 B0A650F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 016c B0A670F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0170 B0A690F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0174 B0A6B0F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0178 B0A6D0F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 017c B0A6F0F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0180 B0A608F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0184 B0A628F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0188 B0A648F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 018c B0A668F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0190 B0A688F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0194 B0A6A8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0198 B0A6C8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 019c B0A6E8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a0 B0A618F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a4 B0A638F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01a8 B0A658F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01ac B0A678F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b0 B0A698F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b4 B0A6B8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01b8 B0A6D8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 01bc B0A6F8F6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "\[^\n\]*\n"				{ }
  	    timeout				{ perror "timeout\n"; break }
  	    eof					{ break }
***************
*** 1253,1259 ****
      gas_finish
  
      # Did we find what we were looking for?  If not, flunk it.
!     if [expr $x==64] then { pass $testname } else { fail $testname }
  }
  
  proc do_subi {} {
--- 2167,2173 ----
      gas_finish
  
      # Did we find what we were looking for?  If not, flunk it.
!     if [expr $x==112] then { pass $testname } else { fail $testname }
  }
  
  proc do_subi {} {
***************
*** 1303,1308 ****
--- 2217,2238 ----
  	    -re "^ +\[0-9\]+ 0074 94A6B8F6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 0078 94A6D8F6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "^ +\[0-9\]+ 007c 94A6F8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0080 94A608F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0084 94A628F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0088 94A648F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 008c 94A668F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0090 94A688F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0094 94A6A8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0098 94A6C8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 009c 94A6E8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a0 94A618F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a4 94A638F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00a8 94A658F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00ac 94A678F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b0 94A698F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b4 94A6B8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00b8 94A6D8F6\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 00bc 94A6F8F6\[^\n\]*\n"	{ set x [expr $x+1] }
  	    -re "\[^\n\]*\n"				{ }
  	    timeout				{ perror "timeout\n"; break }
  	    eof					{ break }
***************
*** 1314,1320 ****
      gas_finish
  
      # Did we find what we were looking for?  If not, flunk it.
!     if [expr $x==32] then { pass $testname } else { fail $testname }
  }
  
  proc do_shift {} {
--- 2244,2250 ----
      gas_finish
  
      # Did we find what we were looking for?  If not, flunk it.
!     if [expr $x==48] then { pass $testname } else { fail $testname }
  }
  
  proc do_shift {} {
***************
*** 1572,1577 ****
--- 2502,2545 ----
      if [expr $x==27] then { pass $testname } else { fail $testname }
  }
  
+ proc do_system2 {} {
+     set testname "system2.s: system2 tests"
+     set x 0
+ 
+     gas_start "system2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 00000C00\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 00000CA0\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 039B0D64\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 039B0E64\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0010 016048A4\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0014 04A61187\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0018 04A13187\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 001c 04A611C7\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0020 04A131C7\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==9] then { pass $testname } else { fail $testname }
+ }
+ 
  proc do_purge {} {
      set testname "purge.s: purge tests"
      set x 0
***************
*** 1620,1625 ****
--- 2588,2627 ----
      if [expr $x==18] then { pass $testname } else { fail $testname }
  }
  
+ proc do_purge2 {} {
+     set testname "purge2.s: purge2 tests"
+     set x 0
+ 
+     gas_start "purge2.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 04A41600\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 04A41620\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 04A42600\[^\n]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 000c 04A42620\[^\n]*\n"	{ set x [expr $x+1] }
+ 
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==4] then { pass $testname } else { fail $testname }
+ }
+ 
  proc do_fp_misc {} {
      set testname "fp_misc.s: fp_misc tests"
      set x 0
***************
*** 2072,2078 ****
  }
  
  proc do_media {} {
!     set testname "media.s: purge tests"
      set x 0
  
      gas_start "media.s" "-al"
--- 3074,3080 ----
  }
  
  proc do_media {} {
!     set testname "media.s: media tests"
      set x 0
  
      gas_start "media.s" "-al"
***************
*** 2157,2162 ****
--- 3159,3200 ----
      if [expr $x==4] then { pass $testname } else { fail $testname }
  }
  
+ proc do_perf {} {
+     set testname "perf.s: perf tests"
+     set x 0
+ 
+     gas_start "perf.s" "-al"
+ 
+     # Check the assembled instruction against a table built by the HP assembler
+     # Any differences should be checked by hand -- with the number of problems
+     # I've seen in the HP assembler I don't completely trust it.
+     #
+     # Instead of having a variable for each match string just increment the
+     # total number of matches seen.  That's simpler when testing large numbers
+     # of instructions (as these tests to).
+ 
+     # The third one is questionable.  HP as doesn't generate what the book
+     # says.  It outputs the nullify flag at 30 instead.
+ 
+     while 1 {
+ 	expect {
+ 	    -re "^ +\[0-9\]+ 0000 30000680\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0004 30000280\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "^ +\[0-9\]+ 0008 300002A0\[^\n\]*\n"	{ set x [expr $x+1] }
+ 	    -re "\[^\n\]*\n"				{ }
+ 	    timeout				{ perror "timeout\n"; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x==3] then { pass $testname } else { fail $testname }
+ }
+ 
  proc do_spop {} {
      set testname "spop.s: spop tests"
      set x 0
***************
*** 2373,2394 ****
--- 3411,3440 ----
      do_branch
      do_branch2
      do_add
+     do_add2
      do_sh1add
      do_sh2add
      do_sh3add
+     do_shladd
+     do_shladd2
      do_sub
+     do_sub2
      do_ds
      do_comclr
      do_logical
      do_unit
+     do_unit2
      do_dcor
+     do_dcor2
      do_addi
      do_subi
      do_shift
      do_extract
      do_deposit
      do_system
+     do_system2
      do_purge
+     do_purge2
      do_fp_misc
      do_fmem
      do_fp_comp
***************
*** 2397,2402 ****
--- 3443,3449 ----
      do_fp_fcmp
      do_media
      do_special
+     do_perf
      do_spop
      do_copr
      do_coprmem
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/dcor.s gas-src/gas/testsuite/gas/hppa/basic/dcor.s
*** pa-prev/gas/testsuite/gas/hppa/basic/dcor.s	Thu Aug  5 17:23:53 1999
--- gas-src/gas/testsuite/gas/hppa/basic/dcor.s	Tue Aug 10 15:12:00 1999
***************
*** 9,15 ****
  	.SUBSPA $CODE$
  
  	.align 4
! ; Basic immediate instruction tests.  
  ;
  ; We could/should test some of the corner cases for register and 
  ; immediate fields.  We should also check the assorted field
--- 9,15 ----
  	.SUBSPA $CODE$
  
  	.align 4
! ; decimal correction instruction tests.  
  ;
  ; We could/should test some of the corner cases for register and 
  ; immediate fields.  We should also check the assorted field
***************
*** 39,41 ****
--- 39,55 ----
  	idcor,ndc %r4,%r5
  	idcor,nbc %r4,%r5
  	idcor,nhc %r4,%r5
+ 
+ 	dcor,i %r4,%r5
+ 	dcor,i,sbz %r4,%r5
+ 	dcor,i,shz %r4,%r5
+ 	dcor,i,sdc %r4,%r5
+ 	dcor,i,sbc %r4,%r5
+ 	dcor,i,shc %r4,%r5
+ 	dcor,i,tr %r4,%r5
+ 	dcor,i,nbz %r4,%r5
+ 	dcor,i,nhz %r4,%r5
+ 	dcor,i,ndc %r4,%r5
+ 	dcor,i,nbc %r4,%r5
+ 	dcor,i,nhc %r4,%r5
+ 
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/dcor2.s gas-src/gas/testsuite/gas/hppa/basic/dcor2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/dcor2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/dcor2.s	Tue Aug 10 13:47:52 1999
***************
*** 0 ****
--- 1,43 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; PA2.0 decimal correction instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	dcor,* %r4,%r5
+ 	dcor,*sbz %r4,%r5
+ 	dcor,*shz %r4,%r5
+ 	dcor,*sdc %r4,%r5
+ 	dcor,*sbc %r4,%r5
+ 	dcor,*shc %r4,%r5
+ 	dcor,*tr %r4,%r5
+ 	dcor,*nbz %r4,%r5
+ 	dcor,*nhz %r4,%r5
+ 	dcor,*ndc %r4,%r5
+ 	dcor,*nbc %r4,%r5
+ 	dcor,*nhc %r4,%r5
+ 
+ 	dcor,i,* %r4,%r5
+ 	dcor,i,*sbz %r4,%r5
+ 	dcor,i,*shz %r4,%r5
+ 	dcor,i,*sdc %r4,%r5
+ 	dcor,i,*sbc %r4,%r5
+ 	dcor,i,*shc %r4,%r5
+ 	dcor,i,*tr %r4,%r5
+ 	dcor,i,*nbz %r4,%r5
+ 	dcor,i,*nhz %r4,%r5
+ 	dcor,i,*ndc %r4,%r5
+ 	dcor,i,*nbc %r4,%r5
+ 	dcor,i,*nhc %r4,%r5
+ 
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/perf.s gas-src/gas/testsuite/gas/hppa/basic/perf.s
*** pa-prev/gas/testsuite/gas/hppa/basic/perf.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/perf.s	Mon Aug  9 20:03:40 1999
***************
*** 0 ****
--- 1,19 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; PA2.0 performance monitor instruction tests
+ 
+ 
+ 	pmenb
+ 	pmdis
+ 	pmdis,n
+ 
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/purge2.s gas-src/gas/testsuite/gas/hppa/basic/purge2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/purge2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/purge2.s	Tue Aug 10 14:17:46 1999
***************
*** 0 ****
--- 1,21 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; PA2.0 purge instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	pdtlb,l %r4(%sr0,%r5)
+ 	pdtlb,l,m %r4(%sr0,%r5)
+ 	pitlb,l %r4(%sr4,%r5)
+ 	pitlb,l,m %r4(%sr4,%r5)
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/shladd.s gas-src/gas/testsuite/gas/hppa/basic/shladd.s
*** pa-prev/gas/testsuite/gas/hppa/basic/shladd.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/shladd.s	Tue Aug 10 15:05:12 1999
***************
*** 0 ****
--- 1,169 ----
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; Basic shladd instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	shladd  %r4,1,%r5,%r6
+ 	shladd,=  %r4,1,%r5,%r6
+ 	shladd,<  %r4,1,%r5,%r6
+ 	shladd,<=  %r4,1,%r5,%r6
+ 	shladd,nuv  %r4,1,%r5,%r6
+ 	shladd,znv  %r4,1,%r5,%r6
+ 	shladd,sv  %r4,1,%r5,%r6
+ 	shladd,od  %r4,1,%r5,%r6
+ 	shladd,tr  %r4,1,%r5,%r6
+ 	shladd,<>  %r4,1,%r5,%r6
+ 	shladd,>=  %r4,1,%r5,%r6
+ 	shladd,>  %r4,1,%r5,%r6
+ 	shladd,uv  %r4,1,%r5,%r6
+ 	shladd,vnz  %r4,1,%r5,%r6
+ 	shladd,nsv  %r4,1,%r5,%r6
+ 	shladd,ev  %r4,1,%r5,%r6
+ 
+ 	shladd,l  %r4,1,%r5,%r6
+ 	shladd,l,=  %r4,1,%r5,%r6
+ 	shladd,l,<  %r4,1,%r5,%r6
+ 	shladd,l,<=  %r4,1,%r5,%r6
+ 	shladd,l,nuv  %r4,1,%r5,%r6
+ 	shladd,l,znv  %r4,1,%r5,%r6
+ 	shladd,l,sv  %r4,1,%r5,%r6
+ 	shladd,l,od  %r4,1,%r5,%r6
+ 	shladd,l,tr  %r4,1,%r5,%r6
+ 	shladd,l,<>  %r4,1,%r5,%r6
+ 	shladd,l,>=  %r4,1,%r5,%r6
+ 	shladd,l,>  %r4,1,%r5,%r6
+ 	shladd,l,uv  %r4,1,%r5,%r6
+ 	shladd,l,vnz  %r4,1,%r5,%r6
+ 	shladd,l,nsv  %r4,1,%r5,%r6
+ 	shladd,l,ev  %r4,1,%r5,%r6
+ 
+ 	shladd,tsv  %r4,1,%r5,%r6
+ 	shladd,tsv,=  %r4,1,%r5,%r6
+ 	shladd,tsv,<  %r4,1,%r5,%r6
+ 	shladd,tsv,<=  %r4,1,%r5,%r6
+ 	shladd,tsv,nuv  %r4,1,%r5,%r6
+ 	shladd,tsv,znv  %r4,1,%r5,%r6
+ 	shladd,tsv,sv  %r4,1,%r5,%r6
+ 	shladd,tsv,od  %r4,1,%r5,%r6
+ 	shladd,tsv,tr  %r4,1,%r5,%r6
+ 	shladd,tsv,<>  %r4,1,%r5,%r6
+ 	shladd,tsv,>=  %r4,1,%r5,%r6
+ 	shladd,tsv,>  %r4,1,%r5,%r6
+ 	shladd,tsv,uv  %r4,1,%r5,%r6
+ 	shladd,tsv,vnz  %r4,1,%r5,%r6
+ 	shladd,tsv,nsv  %r4,1,%r5,%r6
+ 	shladd,tsv,ev  %r4,1,%r5,%r6
+ 
+ 	shladd  %r4,2,%r5,%r6
+ 	shladd,=  %r4,2,%r5,%r6
+ 	shladd,<  %r4,2,%r5,%r6
+ 	shladd,<=  %r4,2,%r5,%r6
+ 	shladd,nuv  %r4,2,%r5,%r6
+ 	shladd,znv  %r4,2,%r5,%r6
+ 	shladd,sv  %r4,2,%r5,%r6
+ 	shladd,od  %r4,2,%r5,%r6
+ 	shladd,tr  %r4,2,%r5,%r6
+ 	shladd,<>  %r4,2,%r5,%r6
+ 	shladd,>=  %r4,2,%r5,%r6
+ 	shladd,>  %r4,2,%r5,%r6
+ 	shladd,uv  %r4,2,%r5,%r6
+ 	shladd,vnz  %r4,2,%r5,%r6
+ 	shladd,nsv  %r4,2,%r5,%r6
+ 	shladd,ev  %r4,2,%r5,%r6
+ 
+ 	shladd,l  %r4,2,%r5,%r6
+ 	shladd,l,=  %r4,2,%r5,%r6
+ 	shladd,l,<  %r4,2,%r5,%r6
+ 	shladd,l,<=  %r4,2,%r5,%r6
+ 	shladd,l,nuv  %r4,2,%r5,%r6
+ 	shladd,l,znv  %r4,2,%r5,%r6
+ 	shladd,l,sv  %r4,2,%r5,%r6
+ 	shladd,l,od  %r4,2,%r5,%r6
+ 	shladd,l,tr  %r4,2,%r5,%r6
+ 	shladd,l,<>  %r4,2,%r5,%r6
+ 	shladd,l,>=  %r4,2,%r5,%r6
+ 	shladd,l,>  %r4,2,%r5,%r6
+ 	shladd,l,uv  %r4,2,%r5,%r6
+ 	shladd,l,vnz  %r4,2,%r5,%r6
+ 	shladd,l,nsv  %r4,2,%r5,%r6
+ 	shladd,l,ev  %r4,2,%r5,%r6
+ 
+ 	shladd,tsv  %r4,2,%r5,%r6
+ 	shladd,tsv,=  %r4,2,%r5,%r6
+ 	shladd,tsv,<  %r4,2,%r5,%r6
+ 	shladd,tsv,<=  %r4,2,%r5,%r6
+ 	shladd,tsv,nuv  %r4,2,%r5,%r6
+ 	shladd,tsv,znv  %r4,2,%r5,%r6
+ 	shladd,tsv,sv  %r4,2,%r5,%r6
+ 	shladd,tsv,od  %r4,2,%r5,%r6
+ 	shladd,tsv,tr  %r4,2,%r5,%r6
+ 	shladd,tsv,<>  %r4,2,%r5,%r6
+ 	shladd,tsv,>=  %r4,2,%r5,%r6
+ 	shladd,tsv,>  %r4,2,%r5,%r6
+ 	shladd,tsv,uv  %r4,2,%r5,%r6
+ 	shladd,tsv,vnz  %r4,2,%r5,%r6
+ 	shladd,tsv,nsv  %r4,2,%r5,%r6
+ 	shladd,tsv,ev  %r4,2,%r5,%r6
+ 
+ 	shladd  %r4,3,%r5,%r6
+ 	shladd,=  %r4,3,%r5,%r6
+ 	shladd,<  %r4,3,%r5,%r6
+ 	shladd,<=  %r4,3,%r5,%r6
+ 	shladd,nuv  %r4,3,%r5,%r6
+ 	shladd,znv  %r4,3,%r5,%r6
+ 	shladd,sv  %r4,3,%r5,%r6
+ 	shladd,od  %r4,3,%r5,%r6
+ 	shladd,tr  %r4,3,%r5,%r6
+ 	shladd,<>  %r4,3,%r5,%r6
+ 	shladd,>=  %r4,3,%r5,%r6
+ 	shladd,>  %r4,3,%r5,%r6
+ 	shladd,uv  %r4,3,%r5,%r6
+ 	shladd,vnz  %r4,3,%r5,%r6
+ 	shladd,nsv  %r4,3,%r5,%r6
+ 	shladd,ev  %r4,3,%r5,%r6
+ 
+ 	shladd,l  %r4,3,%r5,%r6
+ 	shladd,l,=  %r4,3,%r5,%r6
+ 	shladd,l,<  %r4,3,%r5,%r6
+ 	shladd,l,<=  %r4,3,%r5,%r6
+ 	shladd,l,nuv  %r4,3,%r5,%r6
+ 	shladd,l,znv  %r4,3,%r5,%r6
+ 	shladd,l,sv  %r4,3,%r5,%r6
+ 	shladd,l,od  %r4,3,%r5,%r6
+ 	shladd,l,tr  %r4,3,%r5,%r6
+ 	shladd,l,<>  %r4,3,%r5,%r6
+ 	shladd,l,>=  %r4,3,%r5,%r6
+ 	shladd,l,>  %r4,3,%r5,%r6
+ 	shladd,l,uv  %r4,3,%r5,%r6
+ 	shladd,l,vnz  %r4,3,%r5,%r6
+ 	shladd,l,nsv  %r4,3,%r5,%r6
+ 	shladd,l,ev  %r4,3,%r5,%r6
+ 
+ 	shladd,tsv  %r4,3,%r5,%r6
+ 	shladd,tsv,=  %r4,3,%r5,%r6
+ 	shladd,tsv,<  %r4,3,%r5,%r6
+ 	shladd,tsv,<=  %r4,3,%r5,%r6
+ 	shladd,tsv,nuv  %r4,3,%r5,%r6
+ 	shladd,tsv,znv  %r4,3,%r5,%r6
+ 	shladd,tsv,sv  %r4,3,%r5,%r6
+ 	shladd,tsv,od  %r4,3,%r5,%r6
+ 	shladd,tsv,tr  %r4,3,%r5,%r6
+ 	shladd,tsv,<>  %r4,3,%r5,%r6
+ 	shladd,tsv,>=  %r4,3,%r5,%r6
+ 	shladd,tsv,>  %r4,3,%r5,%r6
+ 	shladd,tsv,uv  %r4,3,%r5,%r6
+ 	shladd,tsv,vnz  %r4,3,%r5,%r6
+ 	shladd,tsv,nsv  %r4,3,%r5,%r6
+ 	shladd,tsv,ev  %r4,3,%r5,%r6
+ 
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/shladd2.s gas-src/gas/testsuite/gas/hppa/basic/shladd2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/shladd2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/shladd2.s	Tue Aug 10 15:05:08 1999
***************
*** 0 ****
--- 1,170 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; PA2.0 shladd instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	shladd,*  %r4,1,%r5,%r6
+ 	shladd,*=  %r4,1,%r5,%r6
+ 	shladd,*<  %r4,1,%r5,%r6
+ 	shladd,*<=  %r4,1,%r5,%r6
+ 	shladd,*nuv  %r4,1,%r5,%r6
+ 	shladd,*znv  %r4,1,%r5,%r6
+ 	shladd,*sv  %r4,1,%r5,%r6
+ 	shladd,*od  %r4,1,%r5,%r6
+ 	shladd,*tr  %r4,1,%r5,%r6
+ 	shladd,*<>  %r4,1,%r5,%r6
+ 	shladd,*>=  %r4,1,%r5,%r6
+ 	shladd,*>  %r4,1,%r5,%r6
+ 	shladd,*uv  %r4,1,%r5,%r6
+ 	shladd,*vnz  %r4,1,%r5,%r6
+ 	shladd,*nsv  %r4,1,%r5,%r6
+ 	shladd,*ev  %r4,1,%r5,%r6
+ 
+ 	shladd,l,*  %r4,1,%r5,%r6
+ 	shladd,l,*=  %r4,1,%r5,%r6
+ 	shladd,l,*<  %r4,1,%r5,%r6
+ 	shladd,l,*<=  %r4,1,%r5,%r6
+ 	shladd,l,*nuv  %r4,1,%r5,%r6
+ 	shladd,l,*znv  %r4,1,%r5,%r6
+ 	shladd,l,*sv  %r4,1,%r5,%r6
+ 	shladd,l,*od  %r4,1,%r5,%r6
+ 	shladd,l,*tr  %r4,1,%r5,%r6
+ 	shladd,l,*<>  %r4,1,%r5,%r6
+ 	shladd,l,*>=  %r4,1,%r5,%r6
+ 	shladd,l,*>  %r4,1,%r5,%r6
+ 	shladd,l,*uv  %r4,1,%r5,%r6
+ 	shladd,l,*vnz  %r4,1,%r5,%r6
+ 	shladd,l,*nsv  %r4,1,%r5,%r6
+ 	shladd,l,*ev  %r4,1,%r5,%r6
+ 
+ 	shladd,tsv,*  %r4,1,%r5,%r6
+ 	shladd,tsv,*=  %r4,1,%r5,%r6
+ 	shladd,tsv,*<  %r4,1,%r5,%r6
+ 	shladd,tsv,*<=  %r4,1,%r5,%r6
+ 	shladd,tsv,*nuv  %r4,1,%r5,%r6
+ 	shladd,tsv,*znv  %r4,1,%r5,%r6
+ 	shladd,tsv,*sv  %r4,1,%r5,%r6
+ 	shladd,tsv,*od  %r4,1,%r5,%r6
+ 	shladd,tsv,*tr  %r4,1,%r5,%r6
+ 	shladd,tsv,*<>  %r4,1,%r5,%r6
+ 	shladd,tsv,*>=  %r4,1,%r5,%r6
+ 	shladd,tsv,*>  %r4,1,%r5,%r6
+ 	shladd,tsv,*uv  %r4,1,%r5,%r6
+ 	shladd,tsv,*vnz  %r4,1,%r5,%r6
+ 	shladd,tsv,*nsv  %r4,1,%r5,%r6
+ 	shladd,tsv,*ev  %r4,1,%r5,%r6
+ 
+ 	shladd,*  %r4,2,%r5,%r6
+ 	shladd,*=  %r4,2,%r5,%r6
+ 	shladd,*<  %r4,2,%r5,%r6
+ 	shladd,*<=  %r4,2,%r5,%r6
+ 	shladd,*nuv  %r4,2,%r5,%r6
+ 	shladd,*znv  %r4,2,%r5,%r6
+ 	shladd,*sv  %r4,2,%r5,%r6
+ 	shladd,*od  %r4,2,%r5,%r6
+ 	shladd,*tr  %r4,2,%r5,%r6
+ 	shladd,*<>  %r4,2,%r5,%r6
+ 	shladd,*>=  %r4,2,%r5,%r6
+ 	shladd,*>  %r4,2,%r5,%r6
+ 	shladd,*uv  %r4,2,%r5,%r6
+ 	shladd,*vnz  %r4,2,%r5,%r6
+ 	shladd,*nsv  %r4,2,%r5,%r6
+ 	shladd,*ev  %r4,2,%r5,%r6
+ 
+ 	shladd,l,*  %r4,2,%r5,%r6
+ 	shladd,l,*=  %r4,2,%r5,%r6
+ 	shladd,l,*<  %r4,2,%r5,%r6
+ 	shladd,l,*<=  %r4,2,%r5,%r6
+ 	shladd,l,*nuv  %r4,2,%r5,%r6
+ 	shladd,l,*znv  %r4,2,%r5,%r6
+ 	shladd,l,*sv  %r4,2,%r5,%r6
+ 	shladd,l,*od  %r4,2,%r5,%r6
+ 	shladd,l,*tr  %r4,2,%r5,%r6
+ 	shladd,l,*<>  %r4,2,%r5,%r6
+ 	shladd,l,*>=  %r4,2,%r5,%r6
+ 	shladd,l,*>  %r4,2,%r5,%r6
+ 	shladd,l,*uv  %r4,2,%r5,%r6
+ 	shladd,l,*vnz  %r4,2,%r5,%r6
+ 	shladd,l,*nsv  %r4,2,%r5,%r6
+ 	shladd,l,*ev  %r4,2,%r5,%r6
+ 
+ 	shladd,tsv,*  %r4,2,%r5,%r6
+ 	shladd,tsv,*=  %r4,2,%r5,%r6
+ 	shladd,tsv,*<  %r4,2,%r5,%r6
+ 	shladd,tsv,*<=  %r4,2,%r5,%r6
+ 	shladd,tsv,*nuv  %r4,2,%r5,%r6
+ 	shladd,tsv,*znv  %r4,2,%r5,%r6
+ 	shladd,tsv,*sv  %r4,2,%r5,%r6
+ 	shladd,tsv,*od  %r4,2,%r5,%r6
+ 	shladd,tsv,*tr  %r4,2,%r5,%r6
+ 	shladd,tsv,*<>  %r4,2,%r5,%r6
+ 	shladd,tsv,*>=  %r4,2,%r5,%r6
+ 	shladd,tsv,*>  %r4,2,%r5,%r6
+ 	shladd,tsv,*uv  %r4,2,%r5,%r6
+ 	shladd,tsv,*vnz  %r4,2,%r5,%r6
+ 	shladd,tsv,*nsv  %r4,2,%r5,%r6
+ 	shladd,tsv,*ev  %r4,2,%r5,%r6
+ 
+ 	shladd,*  %r4,3,%r5,%r6
+ 	shladd,*=  %r4,3,%r5,%r6
+ 	shladd,*<  %r4,3,%r5,%r6
+ 	shladd,*<=  %r4,3,%r5,%r6
+ 	shladd,*nuv  %r4,3,%r5,%r6
+ 	shladd,*znv  %r4,3,%r5,%r6
+ 	shladd,*sv  %r4,3,%r5,%r6
+ 	shladd,*od  %r4,3,%r5,%r6
+ 	shladd,*tr  %r4,3,%r5,%r6
+ 	shladd,*<>  %r4,3,%r5,%r6
+ 	shladd,*>=  %r4,3,%r5,%r6
+ 	shladd,*>  %r4,3,%r5,%r6
+ 	shladd,*uv  %r4,3,%r5,%r6
+ 	shladd,*vnz  %r4,3,%r5,%r6
+ 	shladd,*nsv  %r4,3,%r5,%r6
+ 	shladd,*ev  %r4,3,%r5,%r6
+ 
+ 	shladd,l,*  %r4,3,%r5,%r6
+ 	shladd,l,*=  %r4,3,%r5,%r6
+ 	shladd,l,*<  %r4,3,%r5,%r6
+ 	shladd,l,*<=  %r4,3,%r5,%r6
+ 	shladd,l,*nuv  %r4,3,%r5,%r6
+ 	shladd,l,*znv  %r4,3,%r5,%r6
+ 	shladd,l,*sv  %r4,3,%r5,%r6
+ 	shladd,l,*od  %r4,3,%r5,%r6
+ 	shladd,l,*tr  %r4,3,%r5,%r6
+ 	shladd,l,*<>  %r4,3,%r5,%r6
+ 	shladd,l,*>=  %r4,3,%r5,%r6
+ 	shladd,l,*>  %r4,3,%r5,%r6
+ 	shladd,l,*uv  %r4,3,%r5,%r6
+ 	shladd,l,*vnz  %r4,3,%r5,%r6
+ 	shladd,l,*nsv  %r4,3,%r5,%r6
+ 	shladd,l,*ev  %r4,3,%r5,%r6
+ 
+ 	shladd,tsv,*  %r4,3,%r5,%r6
+ 	shladd,tsv,*=  %r4,3,%r5,%r6
+ 	shladd,tsv,*<  %r4,3,%r5,%r6
+ 	shladd,tsv,*<=  %r4,3,%r5,%r6
+ 	shladd,tsv,*nuv  %r4,3,%r5,%r6
+ 	shladd,tsv,*znv  %r4,3,%r5,%r6
+ 	shladd,tsv,*sv  %r4,3,%r5,%r6
+ 	shladd,tsv,*od  %r4,3,%r5,%r6
+ 	shladd,tsv,*tr  %r4,3,%r5,%r6
+ 	shladd,tsv,*<>  %r4,3,%r5,%r6
+ 	shladd,tsv,*>=  %r4,3,%r5,%r6
+ 	shladd,tsv,*>  %r4,3,%r5,%r6
+ 	shladd,tsv,*uv  %r4,3,%r5,%r6
+ 	shladd,tsv,*vnz  %r4,3,%r5,%r6
+ 	shladd,tsv,*nsv  %r4,3,%r5,%r6
+ 	shladd,tsv,*ev  %r4,3,%r5,%r6
+ 
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/sub.s gas-src/gas/testsuite/gas/hppa/basic/sub.s
*** pa-prev/gas/testsuite/gas/hppa/basic/sub.s	Thu Aug  5 17:23:55 1999
--- gas-src/gas/testsuite/gas/hppa/basic/sub.s	Tue Aug 10 14:52:59 1999
***************
*** 115,117 ****
--- 115,202 ----
  	subto,>> %r4,%r5,%r6
  	subto,nsv %r4,%r5,%r6
  	subto,ev %r4,%r5,%r6
+ 
+ 	sub,tsv %r4,%r5,%r6
+ 	sub,tsv,= %r4,%r5,%r6
+ 	sub,tsv,< %r4,%r5,%r6
+ 	sub,tsv,<= %r4,%r5,%r6
+ 	sub,tsv,<< %r4,%r5,%r6
+ 	sub,tsv,<<= %r4,%r5,%r6
+ 	sub,tsv,sv %r4,%r5,%r6
+ 	sub,tsv,od %r4,%r5,%r6
+ 	sub,tsv,tr %r4,%r5,%r6
+ 	sub,tsv,<> %r4,%r5,%r6
+ 	sub,tsv,>= %r4,%r5,%r6
+ 	sub,tsv,> %r4,%r5,%r6
+ 	sub,tsv,>>= %r4,%r5,%r6
+ 	sub,tsv,>> %r4,%r5,%r6
+ 	sub,tsv,nsv %r4,%r5,%r6
+ 	sub,tsv,ev %r4,%r5,%r6
+ 
+ 	sub,b %r4,%r5,%r6
+ 	sub,b,= %r4,%r5,%r6
+ 	sub,b,< %r4,%r5,%r6
+ 	sub,b,<= %r4,%r5,%r6
+ 	sub,b,<< %r4,%r5,%r6
+ 	sub,b,<<= %r4,%r5,%r6
+ 	sub,b,sv %r4,%r5,%r6
+ 	sub,b,od %r4,%r5,%r6
+ 	sub,b,tr %r4,%r5,%r6
+ 	sub,b,<> %r4,%r5,%r6
+ 	sub,b,>= %r4,%r5,%r6
+ 	sub,b,> %r4,%r5,%r6
+ 	sub,b,>>= %r4,%r5,%r6
+ 	sub,b,>> %r4,%r5,%r6
+ 	sub,b,nsv %r4,%r5,%r6
+ 	sub,b,ev %r4,%r5,%r6
+ 
+ 	sub,b,tsv %r4,%r5,%r6
+ 	sub,b,tsv,= %r4,%r5,%r6
+ 	sub,b,tsv,< %r4,%r5,%r6
+ 	sub,b,tsv,<= %r4,%r5,%r6
+ 	sub,b,tsv,<< %r4,%r5,%r6
+ 	sub,b,tsv,<<= %r4,%r5,%r6
+ 	sub,b,tsv,sv %r4,%r5,%r6
+ 	sub,b,tsv,od %r4,%r5,%r6
+ 	sub,tsv,b,tr %r4,%r5,%r6
+ 	sub,tsv,b,<> %r4,%r5,%r6
+ 	sub,tsv,b,>= %r4,%r5,%r6
+ 	sub,tsv,b,> %r4,%r5,%r6
+ 	sub,tsv,b,>>= %r4,%r5,%r6
+ 	sub,tsv,b,>> %r4,%r5,%r6
+ 	sub,tsv,b,nsv %r4,%r5,%r6
+ 	sub,tsv,b,ev %r4,%r5,%r6
+ 
+ 	sub,tc %r4,%r5,%r6
+ 	sub,tc,= %r4,%r5,%r6
+ 	sub,tc,< %r4,%r5,%r6
+ 	sub,tc,<= %r4,%r5,%r6
+ 	sub,tc,<< %r4,%r5,%r6
+ 	sub,tc,<<= %r4,%r5,%r6
+ 	sub,tc,sv %r4,%r5,%r6
+ 	sub,tc,od %r4,%r5,%r6
+ 	sub,tc,tr %r4,%r5,%r6
+ 	sub,tc,<> %r4,%r5,%r6
+ 	sub,tc,>= %r4,%r5,%r6
+ 	sub,tc,> %r4,%r5,%r6
+ 	sub,tc,>>= %r4,%r5,%r6
+ 	sub,tc,>> %r4,%r5,%r6
+ 	sub,tc,nsv %r4,%r5,%r6
+ 	sub,tc,ev %r4,%r5,%r6
+ 
+ 	sub,tc,tsv %r4,%r5,%r6
+ 	sub,tc,tsv,= %r4,%r5,%r6
+ 	sub,tc,tsv,< %r4,%r5,%r6
+ 	sub,tc,tsv,<= %r4,%r5,%r6
+ 	sub,tc,tsv,<< %r4,%r5,%r6
+ 	sub,tc,tsv,<<= %r4,%r5,%r6
+ 	sub,tc,tsv,sv %r4,%r5,%r6
+ 	sub,tc,tsv,od %r4,%r5,%r6
+ 	sub,tsv,tc,tr %r4,%r5,%r6
+ 	sub,tsv,tc,<> %r4,%r5,%r6
+ 	sub,tsv,tc,>= %r4,%r5,%r6
+ 	sub,tsv,tc,> %r4,%r5,%r6
+ 	sub,tsv,tc,>>= %r4,%r5,%r6
+ 	sub,tsv,tc,>> %r4,%r5,%r6
+ 	sub,tsv,tc,nsv %r4,%r5,%r6
+ 	sub,tsv,tc,ev %r4,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/sub2.s gas-src/gas/testsuite/gas/hppa/basic/sub2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/sub2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/sub2.s	Tue Aug 10 19:20:53 1999
***************
*** 0 ****
--- 1,118 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; Basic immediate instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	sub,* %r4,%r5,%r6
+ 	sub,*= %r4,%r5,%r6
+ 	sub,*< %r4,%r5,%r6
+ 	sub,*<= %r4,%r5,%r6
+ 	sub,*<< %r4,%r5,%r6
+ 	sub,*<<= %r4,%r5,%r6
+ 	sub,*sv %r4,%r5,%r6
+ 	sub,*od %r4,%r5,%r6
+ 	sub,*tr %r4,%r5,%r6
+ 	sub,*<> %r4,%r5,%r6
+ 	sub,*>= %r4,%r5,%r6
+ 	sub,*> %r4,%r5,%r6
+ 	sub,*>>= %r4,%r5,%r6
+ 	sub,*>> %r4,%r5,%r6
+ 	sub,*nsv %r4,%r5,%r6
+ 	sub,*ev %r4,%r5,%r6
+ 
+ 	sub,tsv,* %r4,%r5,%r6
+ 	sub,tsv,*= %r4,%r5,%r6
+ 	sub,tsv,*< %r4,%r5,%r6
+ 	sub,tsv,*<= %r4,%r5,%r6
+ 	sub,tsv,*<< %r4,%r5,%r6
+ 	sub,tsv,*<<= %r4,%r5,%r6
+ 	sub,tsv,*sv %r4,%r5,%r6
+ 	sub,tsv,*od %r4,%r5,%r6
+ 	sub,tsv,*tr %r4,%r5,%r6
+ 	sub,tsv,*<> %r4,%r5,%r6
+ 	sub,tsv,*>= %r4,%r5,%r6
+ 	sub,tsv,*> %r4,%r5,%r6
+ 	sub,tsv,*>>= %r4,%r5,%r6
+ 	sub,tsv,*>> %r4,%r5,%r6
+ 	sub,tsv,*nsv %r4,%r5,%r6
+ 	sub,tsv,*ev %r4,%r5,%r6
+ 
+ 	sub,db,* %r4,%r5,%r6
+ 	sub,db,*= %r4,%r5,%r6
+ 	sub,db,*< %r4,%r5,%r6
+ 	sub,db,*<= %r4,%r5,%r6
+ 	sub,db,*<< %r4,%r5,%r6
+ 	sub,db,*<<= %r4,%r5,%r6
+ 	sub,db,*sv %r4,%r5,%r6
+ 	sub,db,*od %r4,%r5,%r6
+ 	sub,db,*tr %r4,%r5,%r6
+ 	sub,db,*<> %r4,%r5,%r6
+ 	sub,db,*>= %r4,%r5,%r6
+ 	sub,db,*> %r4,%r5,%r6
+ 	sub,db,*>>= %r4,%r5,%r6
+ 	sub,db,*>> %r4,%r5,%r6
+ 	sub,db,*nsv %r4,%r5,%r6
+ 	sub,db,*ev %r4,%r5,%r6
+ 
+ 	sub,db,tsv,* %r4,%r5,%r6
+ 	sub,db,tsv,*= %r4,%r5,%r6
+ 	sub,db,tsv,*< %r4,%r5,%r6
+ 	sub,db,tsv,*<= %r4,%r5,%r6
+ 	sub,db,tsv,*<< %r4,%r5,%r6
+ 	sub,db,tsv,*<<= %r4,%r5,%r6
+ 	sub,db,tsv,*sv %r4,%r5,%r6
+ 	sub,db,tsv,*od %r4,%r5,%r6
+ 	sub,tsv,db,*tr %r4,%r5,%r6
+ 	sub,tsv,db,*<> %r4,%r5,%r6
+ 	sub,tsv,db,*>= %r4,%r5,%r6
+ 	sub,tsv,db,*> %r4,%r5,%r6
+ 	sub,tsv,db,*>>= %r4,%r5,%r6
+ 	sub,tsv,db,*>> %r4,%r5,%r6
+ 	sub,tsv,db,*nsv %r4,%r5,%r6
+ 	sub,tsv,db,*ev %r4,%r5,%r6
+ 
+ 	sub,tc,* %r4,%r5,%r6
+ 	sub,tc,*= %r4,%r5,%r6
+ 	sub,tc,*< %r4,%r5,%r6
+ 	sub,tc,*<= %r4,%r5,%r6
+ 	sub,tc,*<< %r4,%r5,%r6
+ 	sub,tc,*<<= %r4,%r5,%r6
+ 	sub,tc,*sv %r4,%r5,%r6
+ 	sub,tc,*od %r4,%r5,%r6
+ 	sub,tc,*tr %r4,%r5,%r6
+ 	sub,tc,*<> %r4,%r5,%r6
+ 	sub,tc,*>= %r4,%r5,%r6
+ 	sub,tc,*> %r4,%r5,%r6
+ 	sub,tc,*>>= %r4,%r5,%r6
+ 	sub,tc,*>> %r4,%r5,%r6
+ 	sub,tc,*nsv %r4,%r5,%r6
+ 	sub,tc,*ev %r4,%r5,%r6
+ 
+ 	sub,tc,tsv,* %r4,%r5,%r6
+ 	sub,tc,tsv,*= %r4,%r5,%r6
+ 	sub,tc,tsv,*< %r4,%r5,%r6
+ 	sub,tc,tsv,*<= %r4,%r5,%r6
+ 	sub,tc,tsv,*<< %r4,%r5,%r6
+ 	sub,tc,tsv,*<<= %r4,%r5,%r6
+ 	sub,tc,tsv,*sv %r4,%r5,%r6
+ 	sub,tc,tsv,*od %r4,%r5,%r6
+ 	sub,tsv,tc,*tr %r4,%r5,%r6
+ 	sub,tsv,tc,*<> %r4,%r5,%r6
+ 	sub,tsv,tc,*>= %r4,%r5,%r6
+ 	sub,tsv,tc,*> %r4,%r5,%r6
+ 	sub,tsv,tc,*>>= %r4,%r5,%r6
+ 	sub,tsv,tc,*>> %r4,%r5,%r6
+ 	sub,tsv,tc,*nsv %r4,%r5,%r6
+ 	sub,tsv,tc,*ev %r4,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/subi.s gas-src/gas/testsuite/gas/hppa/basic/subi.s
*** pa-prev/gas/testsuite/gas/hppa/basic/subi.s	Thu Aug  5 17:23:55 1999
--- gas-src/gas/testsuite/gas/hppa/basic/subi.s	Tue Aug 10 14:58:43 1999
***************
*** 47,49 ****
--- 47,66 ----
  	subio,>> 123,%r5,%r6
  	subio,nsv 123,%r5,%r6
  	subio,ev 123,%r5,%r6
+ 
+ 	subi,tsv 123,%r5,%r6
+ 	subi,tsv,= 123,%r5,%r6
+ 	subi,tsv,< 123,%r5,%r6
+ 	subi,tsv,<= 123,%r5,%r6
+ 	subi,tsv,<< 123,%r5,%r6
+ 	subi,tsv,<<= 123,%r5,%r6
+ 	subi,tsv,sv 123,%r5,%r6
+ 	subi,tsv,od 123,%r5,%r6
+ 	subi,tsv,tr 123,%r5,%r6
+ 	subi,tsv,<> 123,%r5,%r6
+ 	subi,tsv,>= 123,%r5,%r6
+ 	subi,tsv,> 123,%r5,%r6
+ 	subi,tsv,>>= 123,%r5,%r6
+ 	subi,tsv,>> 123,%r5,%r6
+ 	subi,tsv,nsv 123,%r5,%r6
+ 	subi,tsv,ev 123,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/system2.s gas-src/gas/testsuite/gas/hppa/basic/system2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/system2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/system2.s	Tue Aug 10 14:21:13 1999
***************
*** 0 ****
--- 1,28 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; PA2.0 system instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 	rfi
+ 	rfi,r
+ 	ssm 923,%r4
+ 	rsm 923,%r4
+ 	mfctl,w %cr11,%r4
+ 
+ 	probe,r (%sr0,%r5),%r6,%r7
+ 	probei,r (%sr0,%r5),1,%r7
+ 	probe,w (%sr0,%r5),%r6,%r7
+ 	probei,w (%sr0,%r5),1,%r7
+ 	
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/unit.s gas-src/gas/testsuite/gas/hppa/basic/unit.s
*** pa-prev/gas/testsuite/gas/hppa/basic/unit.s	Thu Aug  5 17:23:55 1999
--- gas-src/gas/testsuite/gas/hppa/basic/unit.s	Tue Aug 10 15:12:21 1999
***************
*** 9,15 ****
  	.SUBSPA $CODE$
  
  	.align 4
! ; Basic immediate instruction tests.  
  ;
  ; We could/should test some of the corner cases for register and 
  ; immediate fields.  We should also check the assorted field
--- 9,15 ----
  	.SUBSPA $CODE$
  
  	.align 4
! ; Basic unit instruction tests.  
  ;
  ; We could/should test some of the corner cases for register and 
  ; immediate fields.  We should also check the assorted field
***************
*** 53,55 ****
--- 53,68 ----
  	uaddcmt,ndc %r4,%r5,%r6
  	uaddcmt,nbc %r4,%r5,%r6
  	uaddcmt,nhc %r4,%r5,%r6
+ 
+ 	uaddcm,tc %r4,%r5,%r6
+ 	uaddcm,tc,sbz %r4,%r5,%r6
+ 	uaddcm,tc,shz %r4,%r5,%r6
+ 	uaddcm,tc,sdc %r4,%r5,%r6
+ 	uaddcm,tc,sbc %r4,%r5,%r6
+ 	uaddcm,tc,shc %r4,%r5,%r6
+ 	uaddcm,tc,tr %r4,%r5,%r6
+ 	uaddcm,tc,nbz %r4,%r5,%r6
+ 	uaddcm,tc,nhz %r4,%r5,%r6
+ 	uaddcm,tc,ndc %r4,%r5,%r6
+ 	uaddcm,tc,nbc %r4,%r5,%r6
+ 	uaddcm,tc,nhc %r4,%r5,%r6
diff -cN pa-prev/gas/testsuite/gas/hppa/basic/unit2.s gas-src/gas/testsuite/gas/hppa/basic/unit2.s
*** pa-prev/gas/testsuite/gas/hppa/basic/unit2.s	Wed Dec 31 19:00:00 1969
--- gas-src/gas/testsuite/gas/hppa/basic/unit2.s	Tue Aug 10 19:26:58 1999
***************
*** 0 ****
--- 1,56 ----
+ 	.LEVEL 2.0
+ 	.SPACE $PRIVATE$
+ 	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ 	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ 	.SPACE $TEXT$
+ 	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ 	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ 
+ 	.SPACE $TEXT$
+ 	.SUBSPA $CODE$
+ 
+ 	.align 4
+ ; PA2.0 unit instruction tests.  
+ ;
+ ; We could/should test some of the corner cases for register and 
+ ; immediate fields.  We should also check the assorted field
+ ; selectors to make sure they're handled correctly.
+ 
+ 	uxor,* %r4,%r5,%r6
+ 	uxor,*sbz %r4,%r5,%r6
+ 	uxor,*shz %r4,%r5,%r6
+ 	uxor,*sdc %r4,%r5,%r6
+ 	uxor,*sbc %r4,%r5,%r6
+ 	uxor,*shc %r4,%r5,%r6
+ 	uxor,*tr %r4,%r5,%r6
+ 	uxor,*nbz %r4,%r5,%r6
+ 	uxor,*nhz %r4,%r5,%r6
+ 	uxor,*ndc %r4,%r5,%r6
+ 	uxor,*nbc %r4,%r5,%r6
+ 	uxor,*nhc %r4,%r5,%r6
+ 
+ 	uaddcm,* %r4,%r5,%r6
+ 	uaddcm,*sbz %r4,%r5,%r6
+ 	uaddcm,*shz %r4,%r5,%r6
+ 	uaddcm,*sdc %r4,%r5,%r6
+ 	uaddcm,*sbc %r4,%r5,%r6
+ 	uaddcm,*shc %r4,%r5,%r6
+ 	uaddcm,*tr %r4,%r5,%r6
+ 	uaddcm,*nbz %r4,%r5,%r6
+ 	uaddcm,*nhz %r4,%r5,%r6
+ 	uaddcm,*ndc %r4,%r5,%r6
+ 	uaddcm,*nbc %r4,%r5,%r6
+ 	uaddcm,*nhc %r4,%r5,%r6
+ 
+ 	uaddcm,tc,* %r4,%r5,%r6
+ 	uaddcm,tc,*sbz %r4,%r5,%r6
+ 	uaddcm,tc,*shz %r4,%r5,%r6
+ 	uaddcm,tc,*sdc %r4,%r5,%r6
+ 	uaddcm,tc,*sbc %r4,%r5,%r6
+ 	uaddcm,tc,*shc %r4,%r5,%r6
+ 	uaddcm,tc,*tr %r4,%r5,%r6
+ 	uaddcm,tc,*nbz %r4,%r5,%r6
+ 	uaddcm,tc,*nhz %r4,%r5,%r6
+ 	uaddcm,tc,*ndc %r4,%r5,%r6
+ 	uaddcm,tc,*nbc %r4,%r5,%r6
+ 	uaddcm,tc,*nhc %r4,%r5,%r6

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Patch: more new instructions for PA2.0
@ 1999-08-11 12:43 Jerry Quinn
  0 siblings, 0 replies; 4+ messages in thread
From: Jerry Quinn @ 1999-08-11 12:43 UTC (permalink / raw)
  To: binutils

This patch adds a bunch of new instructions and pa2.0 syntax for existing
instructions.

-- 
Jerry Quinn                             Tel: (514) 761-8737
jquinn@nortelnetworks.com               Fax: (514) 761-8505
Speech Recognition Research


ChangeLog entry:

Wed Aug 11 15:21:27 EDT 1999  Jerry Quinn

    * hppa.h:  Document new completers and args.
    * hppa.h (pa_opcodes):  Add 64 bit patterns and pa2.0 syntax for uxor,
    uaddcm, dcor, addi, add, sub, subi, shladd, rfi, and probe.  Add pa2.0
    extensions for ssm, rsm, pdtlb, pitlb.  Add performance instructions
    pmenb and pmdis.
    * tc-hppa.c (pa_ip):  Absorb white space in instructions between args.
    Add new completers.  Fix bug in 64 bit condition handling.
    * hppa-dis.c (MASK_10, read_write_names, add_compl_names,
    extract_10U_store):  New.
    (print_insn_hppa):  Add new completers.

    * hppa/basic/add.s,addi.s,dcor.s,shladd.s,sub.s,subi.s,unit.s:  Add new
    syntax versions of instructions to tests. 
    * hppa/basic/add2.s,dcor2.s,perf.s,purge2.s,shladd2.s,sub2.s,system2.s,
    unit2.s:  New tests.
    * hppa/basic/basic.exp: Add new tests.

*** pa-prev/include/opcode/hppa.h	Thu Aug  5 17:23:43 1999
--- gas-src/include/opcode/hppa.h	Wed Aug 11 15:20:43 1999
***************
*** 71,78 ****
     In the args field, the following characters are unused:
  
  	'  "# %&    +-  /          :;< > @'
! 	'  C        LM       U   YZ[\]  '
! 	'   d       l              {|} '
  
     Here are all the characters:
  
--- 71,78 ----
     In the args field, the following characters are unused:
  
  	'  "# %&    +-  /          :;< > @'
! 	' BC        LM       U   YZ[\]  '
! 	'   de gh   lm   q         {|} '
  
     Here are all the characters:
  
***************
*** 104,110 ****
--- 104,125 ----
     cx   indexed load completer.
     cm   short load and store completer.
     cs   store bytes short completer.
+ 
+    cw	read/write completer for PROBE
+    cW	wide completer for MFCTL
+    cL	local processor completer for cache control
     cZ   System Control Completer (to support LPA, LHA, etc.)
+ 
+    ci	correction completer for DCOR
+    ca	add completer
+    cy	32 bit add carry completer
+    cY	64 bit add carry completer
+    cv	signed overflow trap completer
+    ct	trap on condition completer for ADDI, SUB
+    cT	trap on condition completer for UADDCM
+    cb	32 bit borrow completer for SUB
+    cB	64 bit borrow completer for SUB
+ 
     ch	left/right half completer
     cH	signed/unsigned saturation completer
     cS	signed/unsigned completer at 21
***************
*** 181,186 ****
--- 196,202 ----
  	low_sign_ext)
     R	5 bit immediate value at 15 (for the ssm, rsm, probei instructions)
  	(same as r above, except the value is in a different location)
+    U	10 bit immediate value at 15 (for SSM, RSM on pa2.0)
     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)
***************
*** 333,352 ****
--- 349,385 ----
  { "and",        0x08000200, 0xfc000fe0, "?lx,b,t", pa10},
  { "andcm",      0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
  { "andcm",      0x08000000, 0xfc000fe0, "?lx,b,t", pa10},
+ { "uxor",       0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT},
  { "uxor",       0x08000380, 0xfc000fe0, "?ux,b,t", pa10},
+ { "uaddcm",     0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT},
+ { "uaddcm",     0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT},
  { "uaddcm",     0x08000980, 0xfc000fe0, "?ux,b,t", pa10},
  { "uaddcmt",    0x080009c0, 0xfc000fe0, "?ux,b,t", pa10},
+ { "dcor",       0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT},
+ { "dcor",       0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT},
  { "dcor",       0x08000b80, 0xfc1f0fe0, "?ub,t",   pa10},
  { "idcor",      0x08000bc0, 0xfc1f0fe0, "?ub,t",   pa10},
+ { "addi",       0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT},
+ { "addi",       0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT},
  { "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",        0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT},
+ { "add",        0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT},
+ { "add",        0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT},
+ { "add",        0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT},
  { "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",        0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT},
+ { "sub",        0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT},
+ { "sub",        0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT},
+ { "sub",        0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT},
+ { "sub",        0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT},
+ { "sub",        0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT},
  { "sub",        0x08000400, 0xfc000fe0, "?sx,b,t", pa10},
  { "subo",       0x08000c00, 0xfc000fe0, "?sx,b,t", pa10},
  { "subb",       0x08000500, 0xfc000fe0, "?sx,b,t", pa10},
***************
*** 354,364 ****
--- 387,400 ----
  { "subt",       0x080004c0, 0xfc000fe0, "?sx,b,t", pa10},
  { "subto",      0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10},
  { "ds",         0x08000440, 0xfc000fe0, "?sx,b,t", pa10},
+ { "subi",       0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT},
  { "subi",       0x94000000, 0xfc000800, "?si,b,x", pa10},
  { "subio",      0x94000800, 0xfc000800, "?si,b,x", pa10},
  { "cmpiclr",    0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT},
  { "cmpiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT},
  { "comiclr",    0x90000000, 0xfc000800, "?si,b,x", pa10},
+ { "shladd",     0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT},
+ { "shladd",     0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT},
  { "sh1add",     0x08000640, 0xfc000fe0, "?ax,b,t", pa10},
  { "sh1addl",    0x08000a40, 0xfc000fe0, "?ax,b,t", pa10},
  { "sh1addo",    0x08000e40, 0xfc000fe0, "?ax,b,t", pa10},
***************
*** 407,415 ****
--- 443,454 ----
  /* System Control Instructions */
  
  { "break",      0x00000000, 0xfc001fe0, "r,A", pa10},
+ { "rfi",        0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT},
  { "rfi",        0x00000c00, 0xffffffff, "", pa10},
  { "rfir",       0x00000ca0, 0xffffffff, "", pa11},
+ { "ssm",        0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
  { "ssm",        0x00000d60, 0xffe0ffe0, "R,t", pa10},
+ { "rsm",        0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
  { "rsm",        0x00000e60, 0xffe0ffe0, "R,t", pa10},
  { "mtsm",       0x00001860, 0xffe0ffff, "x", pa10},
  { "ldsid",      0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10},
***************
*** 419,427 ****
--- 458,471 ----
  { "mtsarcm",    0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT},
  { "mfia",       0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT},
  { "mfsp",       0x000004a0, 0xffff1fe0, "S,t", pa10},
+ { "mfctl",      0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT},
  { "mfctl",      0x000008a0, 0xfc1fffe0, "^,t", pa10},
  { "sync",       0x00000400, 0xffffffff, "", pa10},
  { "syncdma",    0x00100400, 0xffffffff, "", pa10},
+ { "probe",      0x04001180, 0xfc003fe0, "cw(s,b),x,t", pa10, FLAG_STRICT},
+ { "probe",      0x04001180, 0xfc003fe0, "cw(b),x,t", pa10, FLAG_STRICT},
+ { "probei",     0x04003180, 0xfc003fe0, "cw(s,b),R,t", pa10, FLAG_STRICT},
+ { "probei",     0x04003180, 0xfc003fe0, "cw(b),R,t", pa10, FLAG_STRICT},
  { "prober",     0x04001180, 0xfc003fe0, "(s,b),x,t", pa10},
  { "prober",     0x04001180, 0xfc003fe0, "(b),x,t", pa10},
  { "proberi",    0x04003180, 0xfc003fe0, "(s,b),R,t", pa10},
***************
*** 436,443 ****
--- 480,491 ----
  { "lha",        0x04001300, 0xfc003fc0, "cZx(b),t", pa10},
  { "lci",        0x04001300, 0xfc003fe0, "x(s,b),t", pa10},
  { "lci",        0x04001300, 0xfc003fe0, "x(b),t", pa10},
+ { "pdtlb",      0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT},
+ { "pdtlb",      0x04001600, 0xfc003fdf, "cLcZx(b)", pa20, FLAG_STRICT},
  { "pdtlb",      0x04001200, 0xfc003fdf, "cZx(s,b)", pa10},
  { "pdtlb",      0x04001200, 0xfc003fdf, "cZx(b)", pa10},
+ { "pitlb",      0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT},
+ { "pitlb",      0x04000600, 0xfc001fdf, "cLcZx(b)", pa20, FLAG_STRICT},
  { "pitlb",      0x04000200, 0xfc001fdf, "cZx(S,b)", pa10},
  { "pitlb",      0x04000200, 0xfc001fdf, "cZx(b)", pa10},
  { "pdtlbe",     0x04001240, 0xfc003fdf, "cZx(s,b)", pa10},
***************
*** 543,548 ****
--- 591,600 ----
  { "ftest",      0x30002420, 0xffffffff, "", pa10},
  { "fid",        0x30000000, 0xffffffff, "", pa11},
  
+ /* Performance Monitor Instructions */
+ 
+ { "pmdis",	0x30000280, 0xffffffdf, "N", pa20, FLAG_STRICT},
+ { "pmenb",	0x30000680, 0xffffffff, "", pa20, FLAG_STRICT},
  
  /* Assist Instructions */
  
*** pa-prev/gas/config/tc-hppa.c	Thu Aug  5 17:23:41 1999
--- gas-src/gas/config/tc-hppa.c	Wed Aug 11 13:24:58 1999
***************
*** 1529,1534 ****
--- 1529,1538 ----
           sure that the operands match.  */
        for (args = insn->args;; ++args)
  	{
+ 	  /* Absorb white space in instruction.  */
+ 	  while (*s == ' ' || *s == '\t')
+ 	    s++;
+ 
  	  switch (*args)
  	    {
  
***************
*** 1640,1645 ****
--- 1644,1656 ----
  	      CHECK_FIELD (num, 31, 0, 0);
  	      INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
  
+ 	    /* Handle an unsigned 10 bit immediate at 15.  */
+ 	    case 'U':
+ 	      num = pa_get_absolute_expression (&the_insn, &s);
+ 	      s = expr_end;
+ 	      CHECK_FIELD (num, 1023, 0, 0);
+ 	      INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
+ 
  	    /* Handle a 2 bit space identifier at 17.  */
  	    case 's':
  	      num = pa_parse_number (&s, 0);
***************
*** 1742,1747 ****
--- 1753,1799 ----
  		    INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
  		  }
  
+ 		/* Handle a local processor completer.  */
+ 		case 'L':
+ 		  if (strncasecmp (s, ",l", 2) != 0)
+ 		    break;
+ 		  s += 2;
+ 		  continue;
+ 
+ 		/* Handle a PROBE read/write completer.  */
+ 		case 'w':
+ 		  flag = 0;
+ 		  if (!strncasecmp (s, ",w", 2))
+ 		    {
+ 		      flag = 1;
+ 		      s += 2;
+ 		    }
+ 		  else if (!strncasecmp (s, ",r", 2))
+ 		    {
+ 		      flag = 0;
+ 		      s += 2;
+ 		    }
+ 
+ 		  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'))
***************
*** 1754,1759 ****
--- 1806,1955 ----
  
  		  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 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':
  		  {
***************
*** 1867,1873 ****
  		    if (*s == ',')
  		      {
  			s++;
- 			name = s;
  
  			/* 64 bit conditions.  */
  			if (*args == 'A')
--- 2063,2068 ----
***************
*** 1878,1883 ****
--- 2073,2079 ----
  			      break;
  			  }
  
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
***************
*** 2027,2033 ****
  		    if (*s == ',')
  		      {
  			s++;
- 			name = s;
  
  			/* 64 bit conditions.  */
  			if (*args == 'S')
--- 2223,2228 ----
***************
*** 2038,2043 ****
--- 2233,2239 ----
  			      break;
  			  }
  			    
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
***************
*** 2162,2168 ****
  		    if (*s == ',')
  		      {
  			s++;
- 			name = s;
  
  			/* 64 bit conditions.  */
  			if (*args == 'L')
--- 2358,2363 ----
***************
*** 2173,2178 ****
--- 2368,2374 ----
  			      break;
  			  }
  			    
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
***************
*** 2229,2236 ****
  		      {
  			save_s = s++;
  
- 			name = s;
- 
  			/* 64 bit conditions.  */
  			if (*args == 'X')
  			  {
--- 2425,2430 ----
***************
*** 2240,2245 ****
--- 2434,2440 ----
  			      break;
  			  }
  			    
+ 			name = s;
  			while (*s != ',' && *s != ' ' && *s != '\t')
  			  s += 1;
  			c = *s;
*** pa-prev/opcodes/hppa-dis.c	Thu Aug  5 17:23:45 1999
--- gas-src/opcodes/hppa-dis.c	Mon Aug  9 19:57:30 1999
***************
*** 46,51 ****
--- 46,52 ----
  /* Get at various relevent fields of an instruction word. */
  
  #define MASK_5 0x1f
+ #define MASK_10 0x3ff
  #define MASK_11 0x7ff
  #define MASK_14 0x3fff
  #define MASK_21 0x1fffff
***************
*** 127,134 ****
  };
  static const char *const signed_unsigned_names[][3] = {",u", ",s"};
  static const char *const mix_half_names[][3] = {",l", ",r"};
! static const char *const saturation_names[][3] = {",us", ",ss", 0, ""};
! 
  
  /* For a bunch of different instructions form an index into a 
     completer name table. */
--- 128,138 ----
  };
  static const char *const signed_unsigned_names[][3] = {",u", ",s"};
  static const char *const mix_half_names[][3] = {",l", ",r"};
! static const char *const saturation_names[][4] = {",us", ",ss", 0, ""};
! static const char *const read_write_names[][3] = {",r", ",w"};
! static const char *const add_compl_names[] = {
!   0, "", ",l", ",tsv"
! };
  
  /* For a bunch of different instructions form an index into a 
     completer name table. */
***************
*** 235,240 ****
--- 239,252 ----
    return (word >> 16 & MASK_5);
  }
  
+ /* extract the 10 bit immediate field from a {sr}sm instruction */
+ static unsigned
+ extract_10U_store (word)
+      unsigned word;
+ {
+   return (word >> 16 & MASK_10);
+ }
+ 
  /* extract the immediate field from a bb instruction */
  static unsigned
  extract_5Q_store (word)
***************
*** 442,453 ****
--- 454,521 ----
  		      (*info->fprintf_func) (info->stream, "%s ",
  					     short_bytes_compl_names[GET_COMPL (insn)]);
  		      break;
+ 		    case 'L':
+ 		      (*info->fprintf_func) (info->stream, ",l");
+ 		      break;
+ 		    case 'w':
+ 		      (*info->fprintf_func) (info->stream, "%s ",
+ 					     read_write_names[GET_FIELD (insn, 25, 25)]);
+ 		      break;
+ 		    case 'W':
+ 		      (*info->fprintf_func) (info->stream, ",w");
+ 		      break;
+ 		    case 'r':
+ 		      if (GET_FIELD (insn, 23, 26) == 5)
+ 			(*info->fprintf_func) (info->stream, ",r");
+ 		      break;
  		    case 'Z':
  		      if (GET_FIELD (insn, 26, 26))
  			(*info->fprintf_func) (info->stream, ",m ");
  		      else
  			(*info->fprintf_func) (info->stream, " ");
  		      break;
+ 		    case 'i':
+ 		      if (GET_FIELD (insn, 25, 25))
+ 			(*info->fprintf_func) (info->stream, ",i");
+ 		      break;
+ 		    case 'a':
+ 		      (*info->fprintf_func)
+ 			(info->stream, "%s", add_compl_names[GET_FIELD
+ 							    (insn, 20, 21)]);
+ 		      break;
+ 		    case 'Y':
+ 		      (*info->fprintf_func)
+ 			(info->stream, ",dc%s", add_compl_names[GET_FIELD
+ 							       (insn, 20, 21)]);
+ 		      break;
+ 		    case 'y':
+ 		      (*info->fprintf_func)
+ 			(info->stream, ",c%s", add_compl_names[GET_FIELD
+ 							      (insn, 20, 21)]);
+ 		      break;
+ 		    case 'v':
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 't':
+ 		      (*info->fprintf_func) (info->stream, ",tc");
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 'B':
+ 		      (*info->fprintf_func) (info->stream, ",db");
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 'b':
+ 		      (*info->fprintf_func) (info->stream, ",b");
+ 		      if (GET_FIELD (insn, 20, 20))
+ 			(*info->fprintf_func) (info->stream, ",tsv");
+ 		      break;
+ 		    case 'T':
+ 		      if (GET_FIELD (insn, 25, 25))
+ 			(*info->fprintf_func) (info->stream, ",tc");
+ 		      break;
  		    case 'S':
  		      /* EXTRD/W has a following condition.  */
  		      if (*(s + 1) == '?')
***************
*** 615,620 ****
--- 683,691 ----
  		case 'R':
  		  fput_const (extract_5R_store (insn), info);
  		  break;
+ 		case 'U':
+ 		  fput_const (extract_10U_store (insn), info);
+ 		  break;
  		case 'Q':
  		  fput_const (extract_5Q_store (insn), info);
  		  break;
***************
*** 660,665 ****
--- 731,740 ----
  		case '.':
  		  (*info->fprintf_func) (info->stream, "%d",
  				    GET_FIELD (insn, 24, 25));
+ 		  break;
+ 		case '*':
+ 		  (*info->fprintf_func) (info->stream, "%d",
+ 				    GET_FIELD (insn, 22, 25));
  		  break;
  		case 'p':
  		  (*info->fprintf_func) (info->stream, "%d",

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~1999-08-28  3:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-08-11 12:43 Patch: more new instructions for PA2.0 Jerry Quinn
     [not found] <199908111943.MAA18169@cygnus.com>
1999-08-28  3:21 ` Jeffrey A Law
     [not found] <89042619@toto.iv>
1999-08-12 14:35 ` Jerry Quinn
  -- strict thread matches above, loose matches on Subject: below --
1999-08-11 12:43 Jerry Quinn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).