]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386.h (ACCUMULATE_OUTGOING_ARGS): Enable for MSABI
authorJan Hubicka <jh@suse.cz>
Tue, 6 Jan 2009 15:04:25 +0000 (16:04 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 6 Jan 2009 15:04:25 +0000 (15:04 +0000)
* i386.h (ACCUMULATE_OUTGOING_ARGS): Enable for MSABI
* i386.c (init_cumulative_args): Disallow calls of MSABI functions when
accumulate outgoing args is off.

Co-Authored-By: Kai Tietz <kai.tietz@onevision.com>
From-SVN: r143118

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

index 9c9a5fad3e8698d09e2e3e7c986fb6b587bc2d6e..b1edf5e46710968f746cd8deb8207a67647af7d7 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 c698ee3b9e338d9a8e6ae4ea2715d53831535a58..d6fca325b1037070f35f917950a256d3472e7d4b 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 a1da0a754bdfdb74822d9fc9ef0f7eacc0a53fea..a853ed666ea805c06d9a8988dcb4620ca6ee522a 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.  */