diff options
author | dj <dj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-14 21:46:15 +0000 |
---|---|---|
committer | dj <dj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-14 21:46:15 +0000 |
commit | 2053b71fcfcf959bd89f2aebf46f5c386e1171ae (patch) | |
tree | 628b6ca227c7c1b689283cf8ff9bf0529db08c38 | |
parent | c9181063632c631a7c70829e70da6d7ebe34781c (diff) | |
download | gcc-2053b71fcfcf959bd89f2aebf46f5c386e1171ae.tar.gz |
* config/mep/mep.c (mep_vliw_jmp_match): New function.
* config/mep/mep-protos.h (mep_vliw_jmp_match): Prototype it.
* config/mep/mep.md (sibcall_internal): Change test from
mep_vliw_mode_match to mep_vliw_jmp_match.
(sibcall_value_internal): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149644 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/mep/mep-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/mep/mep.c | 14 | ||||
-rw-r--r-- | gcc/config/mep/mep.md | 4 |
4 files changed, 25 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dc77e9dfe5a..66697c48833 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2009-07-14 DJ Delorie <dj@redhat.com> + + * config/mep/mep.c (mep_vliw_jmp_match): New function. + * config/mep/mep-protos.h (mep_vliw_jmp_match): Prototype it. + * config/mep/mep.md (sibcall_internal): Change test from + mep_vliw_mode_match to mep_vliw_jmp_match. + (sibcall_value_internal): Likewise. + 2009-07-14 Uros Bizjak <ubizjak@gmail.com> * config/i386/sse.md (copysign<mode>3): New expander. diff --git a/gcc/config/mep/mep-protos.h b/gcc/config/mep/mep-protos.h index eb37702ddf4..a4de754bbd9 100644 --- a/gcc/config/mep/mep-protos.h +++ b/gcc/config/mep/mep-protos.h @@ -33,6 +33,7 @@ extern bool mep_allow_clip (rtx, rtx, int); extern bool mep_bit_position_p (rtx, bool); extern bool mep_split_mov (rtx *, int); extern bool mep_vliw_mode_match (rtx); +extern bool mep_vliw_jmp_match (rtx); extern bool mep_multi_slot (rtx); extern bool mep_legitimate_address (enum machine_mode, rtx, int); extern int mep_legitimize_address (rtx *, rtx, enum machine_mode); diff --git a/gcc/config/mep/mep.c b/gcc/config/mep/mep.c index 9e63b4dbe32..80d20184055 100644 --- a/gcc/config/mep/mep.c +++ b/gcc/config/mep/mep.c @@ -1182,6 +1182,20 @@ mep_vliw_mode_match (rtx tgt) return src_vliw == tgt_vliw; } +/* Like the above, but also test for near/far mismatches. */ + +bool +mep_vliw_jmp_match (rtx tgt) +{ + bool src_vliw = mep_vliw_function_p (cfun->decl); + bool tgt_vliw = INTVAL (tgt); + + if (mep_section_tag (DECL_RTL (cfun->decl)) == 'f') + return false; + + return src_vliw == tgt_vliw; +} + bool mep_multi_slot (rtx x) { diff --git a/gcc/config/mep/mep.md b/gcc/config/mep/mep.md index 2b6aa808526..828c3c5e7a0 100644 --- a/gcc/config/mep/mep.md +++ b/gcc/config/mep/mep.md @@ -1923,7 +1923,7 @@ ] "SIBLING_CALL_P (insn)" { - if (mep_vliw_mode_match (operands[2])) + if (mep_vliw_jmp_match (operands[2])) return "jmp\t%0"; else return @@ -1994,7 +1994,7 @@ ] "SIBLING_CALL_P (insn)" { - if (mep_vliw_mode_match (operands[3])) + if (mep_vliw_jmp_match (operands[3])) return "jmp\t%1"; else return |