This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: fcmove on Alpha not qualified with /su when compiling -mieee - is that correct ?
- To: Toon Moene <toon at moene dot indiv dot nluug dot nl>
- Subject: Re: fcmove on Alpha not qualified with /su when compiling -mieee - is that correct ?
- From: Richard Henderson <rth at cygnus dot com>
- Date: Mon, 3 Jul 2000 11:51:02 -0700
- Cc: gcc at gcc dot gnu dot org
- References: <3960B38E.C87EFA8C@moene.indiv.nluug.nl>
On Mon, Jul 03, 2000 at 05:38:54PM +0200, Toon Moene wrote:
> Hope someone with some more experience on Alpha and -mieee compilation
> can enlighten me.
To start, there is no fcmov variant that includes qualifiers.
So yes, it is absolutely correct not to emit them. Moreover,
fcmov does not trap. The move happens iff the value in the register
is not 0x0000000000000000 (+0) or 0x8000000000000000 (-0).
What should be happening is that the compare insn preceeding
the fcmov should be qualified with /su. Like so:
> 0x1200bb764 <dlanv2_+436>: cmptle/su $f15,$f22,$f11
> So the obvious question is: Why do I get an exception on a denormal
> number while I compiled all the stuff with -mieee ?
You shouldn't have gotten one.
The non-obvious question is what operating system and kernel version
are you running? Even with the /su qualifier, the instruction does
still trap, but it's supposed to be fixed up in the kernel and the
program restarted. Clearly that's not happening.
There have been bugs in even moderately recent Linux kernels,
some of which only showed up on EV6, which you're clearly running.
If you're using a Linux kernel older than 2.2.16, I recommend
that you upgrade.
r~