On Thu, Apr 24, 2025 at 12:49:39PM +0200, Jakub Jelinek wrote: > On Thu, Apr 24, 2025 at 09:44:45AM +0200, Stefan Schulze Frielinghaus wrote: > > Yes, every parameter is sign or zero extended if its type is smaller > > than 64bit. > > > Note, on s390 a parameter is either passed in a register (pair) or via > > memory, but not partly in a register and memory. > > Ok, so like this then if it passes bootstrap/regtest?
Just for the records: the parallel part is coming from s390_function_arg() where we have that if a parameter is supposed to be passed via a register pair then for -mesa we return a REG with DImode whereas for -mzarch we return a parallel containing two REGs each with SImode. That means with this patch extern void bar (int p1, int p2, int p3, long long p4); void foo (int p1, int p2, int p3, long long p4) { [[gnu::musttail]] return bar (p1, p2, p3, p4); } fails to compile for -m31 -mzarch and succeeds for -m31 -mesa due to the missing handling of the parallel case. IMHO we can ignore this difference for the moment and install this patch. Especially if this patch is supposed to go into gcc15, then I don't want to hold it back, i.e., please apply. Cheers, Stefan