* config/microblaze/microblaze.md (call_value_intern): Check symbol is
authoreager <eager@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Feb 2013 23:05:40 +0000 (23:05 +0000)
committereager <eager@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Feb 2013 23:05:40 +0000 (23:05 +0000)
function before branching.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196157 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/microblaze/microblaze.md

index bd1eef3..98b01b4 100644 (file)
@@ -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
index 1d55a16..b3d0514 100644 (file)
     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,%@\;%#";