diff gcc/config/i386/i386.c @ 112:ab0bcb71f44d

merge gcc 7
author mir3636
date Fri, 10 Nov 2017 19:46:38 +0900
parents 04ced10e8804 1b10fe6932e1
children d34655255c78
line wrap: on
line diff
--- a/gcc/config/i386/i386.c	Fri Oct 27 22:46:09 2017 +0900
+++ b/gcc/config/i386/i386.c	Fri Nov 10 19:46:38 2017 +0900
@@ -27832,6 +27832,18 @@
       fnaddr = gen_rtx_MEM (QImode, copy_to_mode_reg (word_mode, fnaddr));
     }
 
+#ifndef noCbC
+  if (pop
+	  && sibcall
+	  && !( GET_CODE (fnaddr) == MEM
+	        && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF) )
+    {
+      rtx eax = gen_rtx_REG (Pmode, AX_REG);
+      eax = copy_to_suggested_reg (XEXP (fnaddr, 0), eax, Pmode);
+      fnaddr = gen_rtx_MEM (QImode, eax);
+    }
+#endif
+
   call = gen_rtx_CALL (VOIDmode, fnaddr, callarg1);
 
   if (retval)