microblaze.md (call_value_intern): Check symbol is function before branching.
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>
Tue, 19 Feb 2013 23:05:40 +0000 (23:05 +0000)
committerMichael Eager <eager@gcc.gnu.org>
Tue, 19 Feb 2013 23:05:40 +0000 (23:05 +0000)
*  config/microblaze/microblaze.md (call_value_intern): Check symbol is
function before branching.

From-SVN: r196157

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

index bd1eef34a46dfaee3723b5777e758d6436d259f7..98b01b4b9dc3c89508e999db36fd704952fbc6b5 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 1d55a167be4d216656519d685734553292a3d207..b3d0514ded96b65799d9de1f6ffdf986001bf2e7 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,%@\;%#";