diff --git a/gas/ChangeLog b/gas/ChangeLog
index 913dd76445c..5fe9bbf472c 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,7 @@
 Sun Sep 19 10:43:31 1999  Jeffrey A Law  (law@cygnus.com)
 
+	* config/tc-hppa.c (pa_ip); Handle "fe", and 'cJ'.
+
 	* config/tc-hppa.c (pa_ip): Handle 'd', '#' and 'cq'.
 
 	* config/tc-hppa.c (struct pa_it): New field "trunc".
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index 755585a7e03..191b6cd1957 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -1786,6 +1786,7 @@ pa_ip (str)
 		/* Handle a short load/store completer.  */
 		case 'm':
 		case 'q':
+		case 'J':
 		  {
 		    int a = 0;
 		    int m = 0;
@@ -1810,8 +1811,8 @@ pa_ip (str)
 			s += 2;
 		      }
 
-		   /* 'm' and 'q' are the same, except for where they encode
-		       the before/after field.  */
+		   /* 'J', 'm' and 'q' are the same, except for where they
+		       encode the before/after field.  */
 		   if (*args == 'm')
 		      {
 			opcode |= m << 5;
@@ -1822,6 +1823,11 @@ pa_ip (str)
 			opcode |= m << 3;
 			INSERT_FIELD_AND_CONTINUE (opcode, a, 2);
 		      }
+		    else if (*args == 'J')
+		      {
+		        /* M bit is explicit in the major opcode.  */
+			INSERT_FIELD_AND_CONTINUE (opcode, a, 2);
+		      }
 		  }
 
 		/* Handle a stbys completer.  */
@@ -3605,6 +3611,21 @@ pa_ip (str)
 		    INSERT_FIELD_AND_CONTINUE (opcode, result.number_part, 11);
 		  }
 
+		/* Handle L/R register halves like 'x'.  */
+		case 'e':
+		  {
+		    struct pa_11_fp_reg_struct result;
+
+		    if (strict && *s != '%')
+		      break;
+		    pa_parse_number (&s, &result);
+		    CHECK_FIELD (result.number_part, 31, 0, 0);
+		    opcode |= (result.number_part & 0x1f) << 16;
+		    if (need_pa11_opcode (&the_insn, &result))
+		      {
+			opcode |= (result.l_r_select & 1) << 1;
+		      }
+		    continue;
 		default:
 		  abort ();
 		}