From: Wolfgang Grandegger <wg@grandegger.com>
To: Gabriel Paubert <paubert@iram.es>
Cc: linuxppc-dev <Linuxppc-dev@ozlabs.org>
Subject: Re: Floating point exceptions with MPC5200
Date: Mon, 19 Jan 2009 13:10:00 +0100 [thread overview]
Message-ID: <49746D98.9080300@grandegger.com> (raw)
In-Reply-To: <20090119100347.GA27655@iram.es>
Gabriel Paubert wrote:
> On Mon, Jan 19, 2009 at 10:33:40AM +0100, Wolfgang Grandegger wrote:
>> Hello,
>>
>> I want to provoke a "floating point exception" by doing a division by 0.
>> The expection does come as expected on my x86 PC:
>>
>> $ ./divby0
>> Floating point exception
>>
>> but not on my MPC5200 board. Any idea why? I think the processor can
>> handle all floating-point exceptions. I'm using Linux 2.6.28 and the
>> ELDK v4.2.
>
> No, the PPC continue happily after performing an _integer_ division by zero.
> It is in the architecture specification AFAIR and allowed by C and other
> language definitions.
>
> This is not exactly a floating point exception per se: it has a different
> vector on x86, that the Linux kernel remaps to a floating point exception,
> although numeric exception would be more correct. PPC implements all
> standard IEEE754 floating point exceptions (you have to enable them
> with fesetenv() or something equivalent, but it's the same on all
> architectures).
>
> Even the C++ headers acknowledge this, see for example:
> /usr/include/c++/4.3/powerpc-linux-gnu/bits/cpu_defines.h
> (or a similar file on your system, note that older versions
> of GCC got it wrong, but I can't remember when it was fixed).
I get the "Floating point exception" signal when I explicitly enable
them with fesetenv() as you suggested:
$ cat divby0.c
#include <stdio.h>
#define __USE_GNU
#include <fenv.h>
int main(int argc, char* argv[])
{
double fa = 10., fb = 0., fc;
int ia = 10, ib = 0, ic;
printf("excepts=%#x\n", fegetexcept());
fesetenv(FE_NOMASK_ENV);
printf("excepts=%#x\n", fegetexcept());
ic = ia / ib;
printf("ic=%d\n", ic);
fc = fa / fb;
printf("c=%f\n", fc);
return 0;
}
$ ./divby0
excepts=0
excepts=0x3e000000
ic=0
Floating point exception
See "man fesetenv" for further information. On the x86 PC, I even get a
SIGFPE signal for the integer division by 0.
Thanks for the quick help.
Wolfgang.
prev parent reply other threads:[~2009-01-19 12:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-19 9:33 Floating point exceptions with MPC5200 Wolfgang Grandegger
2009-01-19 9:50 ` Andreas Schwab
2009-01-19 9:58 ` Wolfgang Grandegger
2009-01-19 10:03 ` Gabriel Paubert
2009-01-19 12:10 ` Wolfgang Grandegger [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49746D98.9080300@grandegger.com \
--to=wg@grandegger.com \
--cc=Linuxppc-dev@ozlabs.org \
--cc=paubert@iram.es \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.