config/v850/v850.h (GO_IF_LEGITIMATE_ADDRESS): Tidy up formatting.
authorNick Clifton <nickc@redhat.com>
Wed, 28 Sep 2005 15:56:53 +0000 (15:56 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 28 Sep 2005 15:56:53 +0000 (15:56 +0000)
Add check to PLUS case to ensure that the offset is within an acceptable range.

config/v850/v850.md (casesi): Disable the generation of the switch pattern as
it is not being handled properly at the moment.

From-SVN: r104736

gcc/ChangeLog
gcc/config/v850/v850.h
gcc/config/v850/v850.md

index 478493e3756ac31b5ce6050571f2ce340b273cca..4cea691eab40d15ae5fc4d760a86d70145f30178 100644 (file)
@@ -1,5 +1,12 @@
 2005-09-28  Nick Clifton  <nickc@redhat.com>
 
+       * config/v850/v850.h (GO_IF_LEGITIMATE_ADDRESS): Tidy up
+       formatting.  Add check to PLUS case to ensure that the offset is
+       within an acceptable range.
+
+       * config/v850/v850.md (casesi): Disable the generation of the
+       switch pattern as it is not being handled properly at the moment.
+
        * config/v850/lib1funcs.asm (___ucmpdi2): Correct jump instruction
        for when the high words are identical.
 
index 08c85fdbade1a005c4fece99b99feeeac2cea68d..c43c802838a31a0f30c1996b0be5c624969195e6 100644 (file)
@@ -797,13 +797,14 @@ struct cum_arg { int nbytes; int anonymous_args; };
 
 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                                \
 do {                                                                   \
-  if (RTX_OK_FOR_BASE_P (X)) goto ADDR;                                        \
+  if (RTX_OK_FOR_BASE_P (X))                                           \
+    goto ADDR;                                                         \
   if (CONSTANT_ADDRESS_P (X)                                           \
       && (MODE == QImode || INTVAL (X) % 2 == 0)                       \
       && (GET_MODE_SIZE (MODE) <= 4 || INTVAL (X) % 4 == 0))           \
     goto ADDR;                                                         \
   if (GET_CODE (X) == LO_SUM                                           \
-      && GET_CODE (XEXP (X, 0)) == REG                                 \
+      && REG_P (XEXP (X, 0))                                           \
       && REG_OK_FOR_BASE_P (XEXP (X, 0))                               \
       && CONSTANT_P (XEXP (X, 1))                                      \
       && (GET_CODE (XEXP (X, 1)) != CONST_INT                          \
@@ -815,9 +816,12 @@ do {                                                                       \
       && (GET_MODE_SIZE (MODE) <= GET_MODE_SIZE (word_mode)))          \
      goto ADDR;                                                                \
   if (GET_CODE (X) == PLUS                                             \
+      && RTX_OK_FOR_BASE_P (XEXP (X, 0))                               \
       && CONSTANT_ADDRESS_P (XEXP (X, 1))                              \
-      && (MODE == QImode || INTVAL (XEXP (X, 1)) % 2 == 0)             \
-      && RTX_OK_FOR_BASE_P (XEXP (X, 0))) goto ADDR;                   \
+      && ((MODE == QImode || INTVAL (XEXP (X, 1)) % 2 == 0)            \
+          && CONST_OK_FOR_K (INTVAL (XEXP (X, 1))                      \
+                              + (GET_MODE_NUNITS (MODE) * UNITS_PER_WORD)))) \
+    goto ADDR;                 \
 } while (0)
 
 \f
index 15c0cafbb7c7e7db2bde00bdb611a26be735f02d..e67dc40b999acae45c2753e497f4b6799a234cf6 100644 (file)
   /* Branch to the default label if out of range of the table.  */
   emit_jump_insn (gen_bgtu (operands[4]));
 
-  if (! TARGET_BIG_SWITCH && TARGET_V850E)
+  /* Disabled because the switch pattern is not being recognised
+     properly at the moment.  eg. compiling vfscanf.c in newlib.  */
+  if (0 && ! TARGET_BIG_SWITCH && TARGET_V850E)
     {
       emit_jump_insn (gen_switch (reg, operands[3]));
       DONE;