Hi,

Fortran 2018 introduced intrinsic functions for all the IEEE-754 comparison 
operations, compareQuiet* and compareSignaling*  I want to introduce those into 
the Fortran front-end, and make them emit the right code. But cannot find the 
correspondance between IEEE-754 nomenclature and GCC internal representation.

I understand that the middle-end representation was mostly created with C in 
mind, so I assume that the correspondance is that used by the C standard. That 
helps me to some extent, as I can find draft documents that seem to list the 
following table (page 8 of 
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1615.pdf):

compareQuietEqual ==
compareQuietNotEqual !=
compareSignalingEqual iseqsig
compareSignalingGreater >
compareSignalingGreaterEqual >=
compareSignalingLess <
compareSignalingLessEqual <=
compareSignalingNotEqual !iseqsig
compareSignalingNotGreater !(x>y)
compareSignalingLessUnordered !(x=>y)
compareSignalingNotLess !(x<y)
compareSignalingGreaterUnorder !(x<=y)
compareQuietGreater isgreater
compareQuietGreaterEqual isgreaterequal
compareQuietLess isless
compareQuietLessEqual islessequal
compareQuietUnordered isunordered
compareQuietNotGreater !isgreater
compareQuietLessUnordered !isgreaterequal
compareQuietNotLess !isless
compareQuietGreaterUnordered !islessequal
compareQuietOrdered !isunordered


I have two questions:

1. Is this list normative, and was it modified later (I have only found a 2012 
draft)?

2. All the functions are available as GCC type-generic built-ins (yeah!), 
except there is no __builtin_ iseqsig 
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77928). Is there a fundamental 
problem with creating one, and could someone help there?


Thanks,
FX

Reply via email to