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