I've put notes on my understanding of extra bytes reserved by alloca when using gcc on github comment below:
AFAICT, it seems that win64 x64 gcc alloca works the same (Don't remember though if the difference was alloca return value=sp+8 or sp+16).
So x64 win64 FFI only works because we force sp before calling externalFunction with:
if ((0 + (cStackAlignment())) > 0) {
setsp((calloutState->argVector));
}
Nicolas