On 10/11/2011 16:28, Roman Leshchinskiy wrote:
> Simon Marlow wrote:
>> On 27/09/2011 10:02, Roman Leshchinskiy wrote:
>>> Colin Paul Adams wrote:
>>>>>>>> A quick google for signalling NaNs seems to suggest that on the x86
>>>> architecture, you have to set a flag to raise an exception when
>>>> encountering signalling NaNs. Otherwise they are just treated as quiet
>>>> NaNs.
>>>> But you have to create the signalling NaNs manually. They are not
>>>> created as a result of arithmetic operations.
>>>>>> IIRC, with the appropriate flags set, arithmetic operations throw
>>> exceptions instead of creating NaNs. You can't really create a
>>> signalling
>>> NaN in a register because as soon as you do, you get a signal.
>>>> But they don't throw a Haskell exception, they throw a processor
>> exception which kills your whole program. If we want a Haskell
>> exception to result from 0/0, we have to insert extra checking code,
>> which I'm sure you won't like :-)
>> I would, of course, expect the RTS to convert the processor exception to a
> Haskell exception!
You have high expectations :-) I don't think it's possible to do that
without some very low-level platform-specific and processor-specific
hacking, which is why for example we have the current software test for
divide-by-zero. You basically get a signal and have to grovel around in
the thread's registers and stack to recover the situation, and the
exception could be thrown from *anywhere*.
Cheers,
Simon