diff options
author | Kazu Hirata <kazu@hxi.com> | 2002-03-01 22:07:44 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2002-03-01 22:07:44 +0000 |
commit | fbf0fe412ccdcf9412a6d1e093722ec1b5e11c06 (patch) | |
tree | c422d5a6c22460a69afefba5c2bf8d7a946bcc5c | |
parent | 0010687d231895bed42ac368254546872bb3e0fc (diff) | |
download | gcc-fbf0fe412ccdcf9412a6d1e093722ec1b5e11c06.zip gcc-fbf0fe412ccdcf9412a6d1e093722ec1b5e11c06.tar.gz gcc-fbf0fe412ccdcf9412a6d1e093722ec1b5e11c06.tar.bz2 |
* config/h8300/h8300.c (h8300_adjust_insn_length): Clean up.
From-SVN: r50207
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.c | 58 |
2 files changed, 35 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 57de667..0b9b000 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 7a77cc8..aa31531 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -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. */ |