diff gcc/config/i386/i386.c @ 25:2476ed92181e

modified machine description of i386 for support indirect sibcall attributed fastcall.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Tue, 27 Oct 2009 16:04:06 +0900
parents 58ad6c70ea60
children 27e6f95b2c21
line wrap: on
line diff
--- a/gcc/config/i386/i386.c	Thu Oct 15 18:47:39 2009 +0900
+++ b/gcc/config/i386/i386.c	Tue Oct 27 16:04:06 2009 +0900
@@ -18779,6 +18779,18 @@
       fnaddr = gen_rtx_MEM (QImode, 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)
     call = gen_rtx_SET (VOIDmode, retval, call);