From a54d04b7dd9a4e14f1eb47a1678160497b4ae02d Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Thu, 25 Jan 1996 20:33:51 +0000 Subject: [PATCH] Fix bugs in last changes From-SVN: r11103 --- gcc/config/rs6000/rs6000.c | 27 +++++++++++++++++++-------- gcc/config/rs6000/rs6000.md | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 24cbc8123c4..86cdc255a3e 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -857,6 +857,11 @@ small_data_operand (op, mode) { rtx sym_ref, const_part; +#ifdef TARGET_SDATA + if (!TARGET_SDATA) + return 0; +#endif + if (DEFAULT_ABI != ABI_V4) return 0; @@ -2086,9 +2091,11 @@ print_operand (file, x, code) we have already done it, we can just use an offset of four. */ if (GET_CODE (XEXP (x, 0)) == PRE_INC || GET_CODE (XEXP (x, 0)) == PRE_DEC) - print_operand_address (file, plus_constant (XEXP (XEXP (x, 0), 0), 4)); + output_address (plus_constant (XEXP (XEXP (x, 0), 0), 4)); else - print_operand_address (file, plus_constant (XEXP (x, 0), 4)); + output_address (plus_constant (XEXP (x, 0), 4)); + if (DEFAULT_ABI == ABI_V4 && small_data_operand (x, GET_MODE (x))) + fprintf (file, "@sda21(%s)", reg_names[0]); } return; @@ -2296,9 +2303,11 @@ print_operand (file, x, code) { if (GET_CODE (XEXP (x, 0)) == PRE_INC || GET_CODE (XEXP (x, 0)) == PRE_DEC) - print_operand_address (file, plus_constant (XEXP (XEXP (x, 0), 0), 8)); + output_address (plus_constant (XEXP (XEXP (x, 0), 0), 8)); else - print_operand_address (file, plus_constant (XEXP (x, 0), 8)); + output_address (plus_constant (XEXP (x, 0), 8)); + if (DEFAULT_ABI == ABI_V4 && small_data_operand (x, GET_MODE (x))) + fprintf (file, "@sda21(%s)", reg_names[0]); } return; @@ -2342,9 +2351,11 @@ print_operand (file, x, code) { if (GET_CODE (XEXP (x, 0)) == PRE_INC || GET_CODE (XEXP (x, 0)) == PRE_DEC) - print_operand_address (file, plus_constant (XEXP (XEXP (x, 0), 0), 12)); + output_address (plus_constant (XEXP (XEXP (x, 0), 0), 12)); else - print_operand_address (file, plus_constant (XEXP (x, 0), 12)); + output_address (plus_constant (XEXP (x, 0), 12)); + if (DEFAULT_ABI == ABI_V4 && small_data_operand (x, GET_MODE (x))) + fprintf (file, "@sda21(%s)", reg_names[0]); } return; @@ -2362,10 +2373,10 @@ print_operand (file, x, code) fprintf (file, "%d(%d)", - GET_MODE_SIZE (GET_MODE (x)), REGNO (XEXP (XEXP (x, 0), 0))); else - print_operand_address (file, XEXP (x, 0)); + output_address (XEXP (x, 0)); } else - print_operand_address (file, x); + output_addr_const (file, x); return; default: diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index daaec5112b8..0fed0116304 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -4733,7 +4733,7 @@ /* Use default pattern for address of ELF small data */ if (TARGET_ELF - && TARGET_SDATA + && DEFAULT_ABI == ABI_V4 && (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == CONST) && !small_data_operand (operands[1], SImode)) { -- 2.30.2