diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-02-12 18:43:48 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-02-12 18:43:48 -0500 |
commit | d91f7b5002c707642b871c9548a1f9b2bb47507e (patch) | |
tree | 4f15a69a6198a2664242d373494f17be92dfcfa2 /gcc | |
parent | 662ad81ddd8be33cbd28420c48eeab5b1c325b04 (diff) | |
download | gcc-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.c | 53 |
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; |