OSDN Git Service

* i386.h (ACCUMULATE_OUTGOING_ARGS): Enable for MSABI
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Jan 2009 15:04:25 +0000 (15:04 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Jan 2009 15:04:25 +0000 (15:04 +0000)
* i386.c (init_cumulative_args): Disallow calls of MSABI functions when
accumulate outgoing args is off.

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

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.h

index 9c9a5fa..b1edf5e 100644 (file)
@@ -1,3 +1,10 @@
+2009-01-06  Jan Hubicka  <jh@suse.cz>
+           Kai Tietz <kai.tietz@onevision.com>
+
+       * i386.h (ACCUMULATE_OUTGOING_ARGS): Enable for MSABI
+       * i386.c (init_cumulative_args): Disallow calls of MSABI functions when
+       accumulate outgoing args is off.
+
 2009-01-06  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR bootstrap/38742
index c698ee3..d6fca32 100644 (file)
@@ -4639,6 +4639,9 @@ init_cumulative_args (CUMULATIVE_ARGS *cum,  /* Argument info to initialize */
   else
    cum->call_abi = ix86_function_type_abi (fntype);
   /* Set up the number of registers to use for passing arguments.  */
+
+  if (cum->call_abi == MS_ABI && !ACCUMULATE_OUTGOING_ARGS)
+    sorry ("ms_abi attribute require -maccumulate-outgoing-args or subtarget optimization implying it");
   cum->nregs = ix86_regparm;
   if (TARGET_64BIT)
     {
index a1da0a7..a853ed6 100644 (file)
@@ -1509,9 +1509,13 @@ enum reg_class
    be computed and placed into the variable
    `crtl->outgoing_args_size'.  No space will be pushed onto the
    stack for each call; instead, the function prologue should increase the stack
-   frame size by this amount.  */
+   frame size by this amount.  
+   
+   MS ABI seem to require 16 byte alignment everywhere except for function
+   prologue and apilogue.  This is not possible without
+   ACCUMULATE_OUTGOING_ARGS.  */
 
-#define ACCUMULATE_OUTGOING_ARGS TARGET_ACCUMULATE_OUTGOING_ARGS
+#define ACCUMULATE_OUTGOING_ARGS (TARGET_ACCUMULATE_OUTGOING_ARGS || ix86_cfun_abi () == MS_ABI)
 
 /* If defined, a C expression whose value is nonzero when we want to use PUSH
    instructions to pass outgoing arguments.  */