diff --git a/src/arm/ffi.c b/src/arm/ffi.c index b2e7667..532c330 100644 --- a/src/arm/ffi.c +++ b/src/arm/ffi.c @@ -64,6 +64,7 @@ int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space) i--, p_arg++) { size_t z; + size_t alignment; /* Allocated in VFP registers. */ if (ecif->cif->abi == FFI_VFP @@ -81,8 +82,13 @@ int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space) } /* Align if necessary */ - if (((*p_arg)->alignment - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, (*p_arg)->alignment); + alignment = (*p_arg)->alignment; +#ifdef _WIN32_WCE + if (alignment > 4) + alignment = 4; +#endif + if ((alignment - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, alignment); } if ((*p_arg)->type == FFI_TYPE_STRUCT) @@ -320,6 +326,10 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, alignment = (*p_arg)->alignment; if (alignment < 4) alignment = 4; +#ifdef _WIN32_WCE + if (alignment > 4) + alignment = 4; +#endif /* Align if necessary */ if ((alignment - 1) & (unsigned) argp) { argp = (char *) ALIGN(argp, alignment);