On Tue, Jun 20, 2017 at 04:12:18PM +0100, Henry Vermaak wrote:
> On Tue, Jun 20, 2017 at 10:53:32AM -0400, Anthony Walter wrote:
> > Some progress ... Since this is an OpenGL app I had been
> > setting Set8087CW($133F) to prevent FPU errors from showing as exceptions.
> > When I omit Set8087CW I get EDivByZero an exception, but my program is
> > still in an unusable state.
> > 
> > Since this error occurs in the SSE XMM registers, I think I should also be
> > using the SetSSECSR function. Does anyone have any details about how this
> > function works in relation to XMM registers and rounding or divide by zero
> > errors and how it could be applied in my situation?
> 
> I use this for all my programs that use C libraries:
> 
> {$if defined(cpui386) or defined(cpux86_64)}
>   SetExceptionMask(GetExceptionMask + [exZeroDivide, exInvalidOp]);
> {$ifend}
> 
> Works fine with libs like OpenCV, etc.

Sorry, meant to add that this will also set the flags in MXCSR if you
look at the implementation of SetExceptionMask().

Henry
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to