This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: ACCUMULATE_OUTGOING_ARGS and the i386


>>   Defining both @code{PUSH_ROUNDING} and @code{ACCUMULATE_OUTGOING_ARGS}
>>   is not proper.
>>
>> The i386 port defines PUSH_ROUNDING and actually pushes a halfword
>> when it pushes a byte.  What does ACCUMULATE_OUTGOING_ARGS do in
>> this situation?  Is there a compatibility problem?
>
> Since ACCUMULATE_OUTGOING_ARGS never does a push, it doesn't matter (ie, the
> whole point of A_O_A is that it builds the stack frame once, and then does
> stores to copy the arguments instead of pushes).

Ultimately ACCUMULATE_OUTGOING_ARGS needs to build a stack frame
for a call which is compatible with what the called function expects.
It appears that PUSH_ROUNDING affects the stack layout.  How is
ACCUMULATE_OUTGOING_ARGS guaranteed to create the same stack layout
on a platform which previously didn't use ACCUMULATE_OUTGOING_ARGS
and defined PUSH_ROUNDING if ACCUMULATE_OUTGOING_ARGS doesn't use
information provided by PUSH_ROUNDING?

For example ... if the platform's calling convention requires two bytes
to be allocated in the stack when only one byte is being passed what
happens when using ACCUMULATE_OUTGOING_ARGS?  This is handled when
not using ACCUMULATE_OUTGOING_ARGS by correctly defining PUSH_ROUNDING
and the push patterns.

-- John
-------------------------------------------------------------------------
|   Feith Systems  |   Voice: 1-215-646-8000  |  Email: john@feith.com  |
|    John Wehle    |     Fax: 1-215-540-5495  |                         |
-------------------------------------------------------------------------



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]