This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: SSE min/max take2 - documentation
- To: Fergus Henderson <fjh at cs dot mu dot oz dot au>
- Subject: Re: SSE min/max take2 - documentation
- From: Geert Bosch <bosch at gnat dot com>
- Date: Sun, 25 Feb 2001 11:56:17 -0500 (EST)
- Cc: Jan Hubicka <jh at suse dot cz>, gcc-patches at gcc dot gnu dot org,patches at x86-64 dot org
On 25-Feb-2001, Jan Hubicka <jh@suse.cz> wrote:
| @itemx (smax:@var{m} @var{x} @var{y})
| Represents the smaller (for @code{smin}) or larger (for @code{smax}) of
| @var{x} and @var{y}, interpreted as signed integers in mode @var{m}.
| + The code can be also used to for floating point values. In that case
| + result on two zeros or operands where one is NaN is undefined.
On Sun, 25 Feb 2001, Fergus Henderson replied:
|The wording there is somewhat misleading;
|saying that the result for two zeros is undefined
|implies that returning any random number, e.g. 1.23, is OK.
|But I'm pretty sure that you only want it to be unspecified which of
|the two zeros is returned (in case their sign differs).
I'm still not clear on the intended use of the min/max codes
for floating point values.
It would seem that we'd like these to be usable to translate the
following to min/max if the target has such an instruction:
float x = -0.0;
float y = +0.0;
float p, q, r, s;
p = (x > y) ? x : y; /* +0.0 */
q = (x >= y) ? x : y; /* -0.0 */
r = (x < y) ? x : y; /* +0.0 */
s = (x <= y) ? x : y; /* -0.0 */
In case either x or y is a NaN, the value of y should be returned.
Since the SSE instructions have been defined in a way that allow
them to be used for the above expressions, would think GCC should
use this definition. For targets that have min/max instructions that
do not preserve these properties, these sequence should only be
enabled if strict IEEE compliance is not required.
-Geert