[MLton] MLton on MinGW/win64: regression ok(ish)!
Matthew Fluet
fluet at tti-c.org
Tue Jun 24 06:54:58 PDT 2008
On Mon, 16 Jun 2008, Nicolas Bertolotti wrote:
>> I tried to add an 'ms_abi' toggle in the amd64 codegen, but couldn't
>> figure out where to add instructions for pushing/popping the "shadow
>> space" (32 bytes) as required. I'd appreciate some help here,
>> Matthew. :-) At the moment I only have it working with the C codegen.
>> I'm hoping that using gcc only as an assembler will make the floating
>> point and ICE regressions go away.
>
> I am unfortunately unable to answer it ... and hope someone can.
<src>/mlton/codegen/amd64-codegen/amd64-generate-transfers.fun:1348 has
code to round the C-stack to a 16byte alignment. You could probably
follow that code by something like:
val (setup_args, size_stack_args) =
if convention = CFunction.Convention.MSx64
then (AppendList.append
(setup_args,
AppendList.single
(Assembly.instruction_binal
{oper = Instruction.SUB,
dst = c_stackP,
src = Operand.immediate_int 32,
size = pointerSize})),
size_stack_args + 32)
else (setup_args, size_stack_args)
You might also need to adjust the fixCStack instructions
(<src>/mlton/codegen/amd64-codegen/amd64-generate-transfers.fun:1554) if
the MSx64 ABI requires the caller to pop the C stack.
The portion of Wesley's patch that adjusts the argument registers
depending on the ABI wasn't committed, so you would need to add that as
well.
More information about the MLton
mailing list