aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>2013-02-19 23:05:40 +0000
committerMichael Eager <eager@gcc.gnu.org>2013-02-19 23:05:40 +0000
commit959434e6ba489bceb258ae02936e789be894d0e7 (patch)
tree33dd06db317ab7fd847303bd864c7ad0e8bd94e6 /gcc
parent7c422dbbc7446d733bc080617efe7afa3e6c0e20 (diff)
downloadgcc-959434e6ba489bceb258ae02936e789be894d0e7.zip
gcc-959434e6ba489bceb258ae02936e789be894d0e7.tar.gz
gcc-959434e6ba489bceb258ae02936e789be894d0e7.tar.bz2
microblaze.md (call_value_intern): Check symbol is function before branching.
* config/microblaze/microblaze.md (call_value_intern): Check symbol is function before branching. From-SVN: r196157
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/microblaze/microblaze.md14
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd1eef3..98b01b4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-19 Edgar E. Iglesias <edgar.iglesias@gmail.com>
+
+ * config/microblaze/microblaze.md (call_value_intern): Check symbol is
+ function before branching.
+
2012-02-19 Andrey Belevantsev <abel@ispras.ru>
* sel-sched-dump.c (dump_insn_rtx_flags): Explicitly set
diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md
index 1d55a16..b3d0514 100644
--- a/gcc/config/microblaze/microblaze.md
+++ b/gcc/config/microblaze/microblaze.md
@@ -2128,9 +2128,17 @@
register rtx target = operands[1];
register rtx target2=gen_rtx_REG (Pmode,GP_REG_FIRST + MB_ABI_SUB_RETURN_ADDR_REGNUM);
- if (GET_CODE (target) == SYMBOL_REF){
- gen_rtx_CLOBBER (VOIDmode,target2);
- return "brlid\tr15,%1\;%#";
+ if (GET_CODE (target) == SYMBOL_REF)
+ {
+ gen_rtx_CLOBBER (VOIDmode,target2);
+ if (SYMBOL_REF_FLAGS (target) & SYMBOL_FLAG_FUNCTION)
+ {
+ return "brlid\tr15,%1\;%#";
+ }
+ else
+ {
+ return "bralid\tr15,%1\;%#";
+ }
}
else if (GET_CODE (target) == CONST_INT)
return "la\t%@,r0,%1\;brald\tr15,%@\;%#";