On 29 Sep 2008, at 09:27, EarMaster - Bent Olsen wrote:

Is there any precautions one should make when sharing FPC codes between i386
and PowerPC?

I've few calls to AudioToolbox API's which works fine under i386, but
crashes in PPC - the exact API call is AudioConverterNew, and the records passed to the API looks good, and is also returned by AudioToolbox itself.

It doesn't return an error code - just crashes with EXC_ARITHMETIC error in
a procedure called SincKernel::CalculateFilterCoefficients.

First of all: when starting a new thread, please write a new message to the mailing list rather than replying to an existing one and changing the subject. Such replies mess up automatic threading both in the web archive and in various mail clients.

That said, the crash you get is caused by a floating point arithmetic error (one of many) in Apple's system frameworks (which also exist in several OpenGL implementations for Windows, in GTK2 etc). These do not cause any problems in most C programs, because in C programs by default all floating point exceptions are masked (and hence no one ever notices such errors).

You can mask them in FPC as well by adding the "math" unit to your uses clause and performing the following call at the start of your program:

SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision])

Note that this will mask all floating point exceptions everywhere, i.e., also in your Pascal code. The only alternative is to save, change and restore the floating point exception mask around every call to a system routine directly or indirectly related to audio or graphics.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to