aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-02-12 18:43:48 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1996-02-12 18:43:48 -0500
commitd91f7b5002c707642b871c9548a1f9b2bb47507e (patch)
tree4f15a69a6198a2664242d373494f17be92dfcfa2 /gcc
parent662ad81ddd8be33cbd28420c48eeab5b1c325b04 (diff)
downloadgcc-d91f7b5002c707642b871c9548a1f9b2bb47507e.zip
gcc-d91f7b5002c707642b871c9548a1f9b2bb47507e.tar.gz
gcc-d91f7b5002c707642b871c9548a1f9b2bb47507e.tar.bz2
(add_1_to_mem): Corrected.
From-SVN: r11239
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/1750a/1750a.c53
1 files changed, 35 insertions, 18 deletions
diff --git a/gcc/config/1750a/1750a.c b/gcc/config/1750a/1750a.c
index dfd1ef1..90a4fdd 100644
--- a/gcc/config/1750a/1750a.c
+++ b/gcc/config/1750a/1750a.c
@@ -385,46 +385,63 @@ simple_memory_operand (op, mode)
return 0;
}
+
/* destructively add one to memory address */
-add_1_to_mem (opnd) /* returns 1 for success, 0 for failure */
+add_1_to_mem (opnd) /* returns 0 for success, -1 for failure */
rtx opnd; /* OPND must be a MEM rtx */
{
rtx inner = XEXP (opnd, 0);
if (GET_CODE (opnd) != MEM)
- return 0; /* failure */
-first:
+ {
+ fprintf (stderr, "add_1_to_mem: input is not MEM\n");
+ return -1; /* failure */
+ }
switch (GET_CODE (inner))
{
case CONST:
inner = XEXP (inner, 0);
- goto first;
+ if (GET_CODE (inner) != PLUS
+ || GET_CODE (XEXP (inner, 1)) != CONST_INT)
+ {
+ fprintf (stderr, "add_1_to_mem: CONST failure\n");
+ return -1;
+ }
+ INTVAL (XEXP (XEXP (XEXP (opnd, 0), 0), 1)) += 1;
+ break;
case REG:
+ XEXP (opnd, 0) = gen_rtx (PLUS, Pmode, inner, const1_rtx);
+ break;
case SYMBOL_REF:
case LABEL_REF:
- inner = gen_rtx (PLUS, Pmode, inner, const1_rtx);
- return 1;
+ XEXP (opnd, 0) = gen_rtx (CONST, VOIDmode,
+ gen_rtx (PLUS, Pmode, inner, const1_rtx));
+ break;
case PLUS:
inner = XEXP (inner, 1);
-second:
switch (GET_CODE (inner))
{
case CONST:
inner = XEXP (inner, 0);
- goto second;
+ if (GET_CODE (inner) != PLUS
+ || GET_CODE (XEXP (inner, 1)) != CONST_INT)
+ {
+ fprintf (stderr, "add_1_to_mem: PLUS CONST failure\n");
+ return -1;
+ }
+ INTVAL (XEXP (XEXP (XEXP (XEXP (opnd, 0), 1), 0), 1)) += 1;
+ break;
case CONST_INT:
- INTVAL (inner) += 1;
- return 1;
+ INTVAL (XEXP (XEXP (opnd, 0), 1)) += 1;
+ break;
case SYMBOL_REF:
case LABEL_REF:
- inner = gen_rtx (PLUS, Pmode, inner, const1_rtx);
- return 1;
- case PLUS:
- inner = XEXP (inner, 1);
- if (GET_CODE (inner) != CONST_INT)
- return 0;
- INTVAL (inner) += 1;
- return 1;
+ XEXP (XEXP (opnd, 0), 1) = gen_rtx (CONST, VOIDmode,
+ gen_rtx (PLUS, Pmode, inner, const1_rtx));
+ break;
+ default:
+ fprintf (stderr, "add_1_to_mem: PLUS failure\n");
+ return -1;
}
}
return 0;