This is the mail archive of the 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]
Other format: [Raw text]

Re: ia64 breakage due to old powerpc64 patch

>>>>> Richard Henderson writes:

Richard> I'm investigating ia64 compat failures and I find that 


Richard> is the cause of one of them.

Richard> What was the original problem you were trying to solve?  The
Richard> original posting makes vague references to ppc64 mixed mode
Richard> problems, but isn't terribly enlightening.  I presume you want
Richard> word_mode == DImode and have SImode entries in your PARALLEL?
Richard> And so need FUNCTION_ARG_PARTIAL_NREGS to return a fractional
Richard> number of words?

Richard> If so, I think we'll just have to bite the bullet and replace
Richard> FUNCTION_ARG_PARTIAL_NREGS with a hook that talks about bytes
Richard> instead of words.

	Most of the discussion occurred in October 2003:

The messages include some examples.

	The original problem was that store_one_arg and emit_push_insn
used UNITS_PER_WORD for the size of the elements, without regard for the
actual size of the granularity size of arguments specified by the ABI.  In
Darwin 32/64 mixed mode, UNITS_PER_WORD is increased to the full 64 bit
size of GPRs, but the "ABI" size of registers for argument passing remains
32 bits.  The Darwin mixed mode argument passing creates PARALLELs and
offsets in the ABI mode (SImode).

	GCC argument passing infrastructure needs information about the
granularity of objects specified by the ABI, but we have not developed the
correct way to communicate it.  The original assumption of UNITS_PER_WORD
fails.  The IA-64 example shows that the element size is not
representative either.


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