* config/h8300/h8300.c (h8300_adjust_insn_length): Clean up.
authorKazu Hirata <kazu@hxi.com>
Fri, 1 Mar 2002 22:07:44 +0000 (22:07 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 1 Mar 2002 22:07:44 +0000 (22:07 +0000)
From-SVN: r50207

gcc/ChangeLog
gcc/config/h8300/h8300.c

index 57de66776eb67ca3a34db563fb3a7f5e164b50ab..0b9b000659cde4266510a9a6db6aeb71768fded2 100644 (file)
@@ -1,3 +1,7 @@
+2002-03-01  Kazu Hirata  <kazu@hxi.com>
+
+       * config/h8300/h8300.c (h8300_adjust_insn_length): Clean up.
+
 Fri Mar  1 20:59:14 CET 2002  Jan Hubicka  <jh@suse.cz>
 
        * toplev.c (rest_of_compilation): Delete dead jumptables before
index 7a77cc8a024374d4471c408e6c5909489b94ea67..aa31531e6b9f65c6f1bbc77601f0a039a8155eee 100644 (file)
@@ -3367,34 +3367,38 @@ h8300_adjust_insn_length (insn, length)
       else
        addr = XEXP (SET_DEST (pat), 0);
 
-      /* On the H8/300, only one adjustment is necessary; if the
-        address mode is register indirect, then this insn is two
-        bytes shorter than indicated in the machine description.  */
-      if (TARGET_H8300 && GET_CODE (addr) == REG)
-       return -2;
-
-      /* On the H8/300H and H8/S, register indirect is 6 bytes shorter than
-        indicated in the machine description.  */
-      if ((TARGET_H8300H || TARGET_H8300S)
-          && GET_CODE (addr) == REG)
-       return -6;
+      if (TARGET_H8300)
+       {
+         /* On the H8/300, we subtract the difference between the
+             actual length and the longest one, which is @(d:16,ERs).  */
 
-      /* On the H8/300H and H8/S, reg + d, for small displacements is
-        4 bytes shorter than indicated in the machine description.  */
-      if ((TARGET_H8300H || TARGET_H8300S)
-         && GET_CODE (addr) == PLUS
-         && GET_CODE (XEXP (addr, 0)) == REG
-         && GET_CODE (XEXP (addr, 1)) == CONST_INT
-         && INTVAL (XEXP (addr, 1)) > -32768
-         && INTVAL (XEXP (addr, 1)) < 32767)
-       return -4;
-
-      /* On the H8/300H and H8/S, abs:16 is two bytes shorter than the
-        more general abs:24.  */
-      if ((TARGET_H8300H || TARGET_H8300S)
-         && GET_CODE (addr) == SYMBOL_REF
-         && TINY_DATA_NAME_P (XSTR (addr, 0)))
-       return -2;
+         /* @Rs is 2 bytes shorter than the longest.  */
+         if (GET_CODE (addr) == REG)
+           return -2;
+       }
+      else
+       {
+         /* On the H8/300H and H8/S, we subtract the difference
+             between the actual length and the longest one, which is
+             @(d:24,ERs).  */
+
+         /* @ERs is 6 bytes shorter than the longest.  */
+         if (GET_CODE (addr) == REG)
+           return -6;
+
+         /* @(d:16,ERs) is 6 bytes shorter than the longest.  */
+         if (GET_CODE (addr) == PLUS
+             && GET_CODE (XEXP (addr, 0)) == REG
+             && GET_CODE (XEXP (addr, 1)) == CONST_INT
+             && INTVAL (XEXP (addr, 1)) > -32768
+             && INTVAL (XEXP (addr, 1)) < 32767)
+           return -4;
+
+         /* @aa:16 is 2 bytes shorter than the longest.  */
+         if (GET_CODE (addr) == SYMBOL_REF
+             && TINY_DATA_NAME_P (XSTR (addr, 0)))
+           return -2;
+       }
     }
 
   /* Loading some constants needs adjustment.  */