/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

/* Functions _beginthread() and _beginthreadex() in 32-bit x86 pre-msvcr100
 * libraries do not handle STATUS_FLOAT_MULTIPLE_FAULTS and
 * STATUS_FLOAT_MULTIPLE_TRAPS SEH exceptions. These two SEH exceptions are thrown
 * by Windows system for 32-bit x86 processes when SSE floating point exception
 * occurs. So fix the pre-msvcr100 behavior by catching those two exceptions
 * manually and propagating them to __mingw_SEH_signal_dispatcher() which correctly
 * process them. x87 floating point exceptions and also 64-bit x86 processes are
 * correctly handled by msvcr* libraries. */

#include "../crt/seh_signal_dispatcher.h"

#if defined(__i386__)
/* We need to make sure that we align the stack to 16 bytes for the sake of SSE */
__attribute__((force_align_arg_pointer))
#endif
static EXCEPTION_DISPOSITION __cdecl
sse_float_exception_handler(EXCEPTION_RECORD *ExceptionRecord, PVOID EstablisherFrame,
                            CONTEXT *ContextRecord, PVOID DispatcherContext)
{
  if (ExceptionRecord->ExceptionCode == STATUS_FLOAT_MULTIPLE_FAULTS
      || ExceptionRecord->ExceptionCode == STATUS_FLOAT_MULTIPLE_TRAPS)
    return __mingw_SEH_signal_dispatcher(ExceptionRecord, EstablisherFrame,
                                         ContextRecord, DispatcherContext);

  else
    return ExceptionContinueSearch;
}
