diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9d55846489c4b5c5ae28eee203b90028f3db674f..c90dc60049f3097d774d9a95760418d388858f66 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2000-03-31  Geoff Keating  <geoffk@cygnus.com>
+
+	* config/rs6000/rs6000.c (print_operand): Don't use %l for 'low
+	part', it's already in use.  Use %K instead.  Add a return at the
+	end of what is now %K.
+	* config/rs6000/rs6000.md (elf_low): Use %K instead of %l. 
+
 Sat Apr  1 02:05:29 MET DST 2000  Jan Hubicka  <jh@suse.cz>
 
 	* builtins.c  (expand_builtin_apply):  Pass proper parameters to
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 04539ee0c132c9f10d1469a50ecd03136f422ce3..83eb642f2516895b73b0772964a3f1318257ba49 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -3325,6 +3325,8 @@ print_operand (file, x, code)
       putc ((DEFAULT_ABI == ABI_SOLARIS) ? '.' : '$', file);
       return;
 
+      /* %a is output_address.  */
+
     case 'A':
       /* If X is a constant integer whose low-order 5 bits are zero,
 	 write 'l'.  Otherwise, write 'r'.  This is a kludge to fix a bug
@@ -3350,6 +3352,9 @@ print_operand (file, x, code)
       putc (((INT_LOWPART(x) & 1) == 0 ? 'r' : 'l'), file);
       return;
 
+      /* %c is output_addr_const if a CONSTANT_ADDRESS_P, otherwise
+	 output_operand.  */
+
     case 'C':
       {
 	enum rtx_code code = GET_CODE (x);
@@ -3496,7 +3501,7 @@ print_operand (file, x, code)
       fprintf (file, HOST_WIDE_INT_PRINT_DEC, ~ INT_LOWPART (x));
       return;
 
-    case 'l':
+    case 'K':
       /* X must be a symbolic constant on ELF.  Write an
 	 expression suitable for an 'addi' that adds in the low 16
 	 bits of the MEM.  */
@@ -3516,6 +3521,9 @@ print_operand (file, x, code)
 	  fputs ("@l", file);
 	  print_operand (file, XEXP (XEXP (x, 0), 1), 0);
 	}
+      return;
+
+      /* %l is output_asm_label.  */
 
     case 'L':
       /* Write second word of DImode or DFmode reference.  Works on register
@@ -3610,6 +3618,8 @@ print_operand (file, x, code)
       fprintf (file, "%d", i);
       return;
 
+      /* %n outputs the negative of its operand.  */
+
     case 'N':
       /* Write the number of elements in the vector times 4.  */
       if (GET_CODE (x) != PARALLEL)
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 8d9d8a70f83e5cb0e4c3e4446541e2cb6f827b14..4573330a820674f1336d4816cc29fc15d167c320 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -7923,7 +7923,7 @@
    "TARGET_ELF && ! TARGET_64BIT"
    "@
     {cal|la} %0,%2@l(%1)
-    {ai|addic} %0,%1,%l2")
+    {ai|addic} %0,%1,%K2")
 
 ;; Set up a register with a value from the GOT table