David Edelsohn wrote:
However, this design does not function properly when the 64-bit
computation / 32-bit ABI mode is enabled. emit_group_{load,store} do
not
generate the correct argument moves with word_mode remaining SImode.
At
least now we can focus on patches to fix emit_group_{load,store} and
friends.
Why would you have word_mode == SImode? I've been playing around with
the same issue on zSeries, and found I could get it working pretty well
with setting word_mode to DImode, allowing DImode in GPRs, but forcing
function arguments/return values to register pairs using PARALLEL.
(When having word_mode == SImode, everything broke because there
appears
to be the assumption that every word_mode-sized SUBREG of a GPR must
be directly accessible - which is not the case at least on zSeries ...)
Everything's still not perfect: emit_group_load has a bug where it
doesn't
handle constants correctly, and even when it works, it generates pretty
inefficient code (for some reason, it always converts between the two-
register and single-register form of a DImode value via a stack temp);