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] |
>> 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] |