* v850.c (ep_memory_operand): Offsets < 0 are not valid for EP
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 22 Nov 1998 02:09:49 +0000 (02:09 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 22 Nov 1998 02:09:49 +0000 (02:09 +0000)
        addressing modes.
        (v850_reorg): Similarly.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23747 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/v850/v850.c

index 7253ffa..5f2ef26 100644 (file)
@@ -1,5 +1,9 @@
 Sat Nov 21 22:12:09 1998  Jeffrey A Law  (law@cygnus.com)
 
+       * v850.c (ep_memory_operand): Offsets < 0 are not valid for EP
+       addressing modes.
+       (v850_reorg): Similarly.
+
        * loop.c (check_dbra_loop): Avoid using gen_add2_insn.
 
 Sat Nov 21 02:18:38 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
index 319b6ab..cda00f0 100644 (file)
@@ -944,6 +944,7 @@ ep_memory_operand (op, mode, unsigned_load)
       op1 = XEXP (addr, 1);
       if (GET_CODE (op1) == CONST_INT
          && INTVAL (op1) < max_offset
+         && INTVAL (op1) >= 0
          && (INTVAL (op1) & mask) == 0)
        {
          if (GET_CODE (op0) == REG && REGNO (op0) == EP_REGNUM)
@@ -1149,7 +1150,8 @@ Saved %d bytes (%d uses of register %s) in function %s, starting as insn %d, end
                           && GET_CODE (XEXP (addr, 1)) == CONST_INT
                           && ((INTVAL (XEXP (addr, 1)))
                               < ep_memory_offset (GET_MODE (*p_mem),
-                                                  unsignedp)))
+                                                  unsignedp))
+                          && ((INTVAL (XEXP (addr, 1))) >= 0))
                    *p_mem = change_address (*p_mem, VOIDmode,
                                             gen_rtx (PLUS, Pmode,
                                                      *p_ep, XEXP (addr, 1)));
@@ -1300,7 +1302,8 @@ void v850_reorg (start_insn)
                           && GET_CODE (XEXP (addr, 0)) == REG
                           && GET_CODE (XEXP (addr, 1)) == CONST_INT
                           && ((INTVAL (XEXP (addr, 1)))
-                              < ep_memory_offset (GET_MODE (mem), unsignedp)))
+                              < ep_memory_offset (GET_MODE (mem), unsignedp))
+                          && ((INTVAL (XEXP (addr, 1))) >= 0))
                    {
                      short_p = TRUE;
                      regno = REGNO (XEXP (addr, 0));