------- Comment #5 from soete dot joel at tiscali dot be 2006-05-17 08:56 ------- Created an attachment (id=11481) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=11481&action=view) just another similar test case regarding double equivalent pb
compile with -O2 the Nan3.s is: .LEVEL 1.1 .section .rodata.str1.4,"aMS",@progbits,1 .align 4 .LC1: .stringz"__builtin_nan(): 0x%llx.\n" .section .rodata.cst8,"aM",@progbits,8 .align 8 .LC0: .word 2146959360 .word 0 .text .align 4 .globl main .type main, @function main: .PROC .CALLINFO FRAME=0,CALLS,SAVE_RP .ENTRY stw %r2,-20(%r30) ldil LR'.LC0,%r28 ldil LR'.LC1,%r26 ldw RR'.LC0(%r28),%r23 ldw RR'.LC0+4(%r28),%r24 ldo RR'.LC1(%r26),%r26 ldw -20(%r30),%r2 bl printf,%r0 nop nop .EXIT .PROCEND .size main, .-main .ident "GCC: (GNU) 4.1.1 20060511 (prerelease) (Debian 4.1.0-4)" and print out: __builtin_nan(): 0x7ff8000000000000. or bin form of 1 32bit word: 01111111111110000000000000000000 i.e. - the first bit being the sign == 0 - next 11 being the exponenent all == 1 - next 52 one being fraction have the first bit == 1, making this NAN a signaling NAN. And according to this thread (I don't have access to C99 std ;-( ): <http://gcc.gnu.org/ml/libstdc++/2002-09/msg00030.html> as well as gcc info /quote -- Built-in Function: double __builtin_nan (const char *str) This is an implementation of the ISO C99 function `nan'. Since ISO C99 defines this function in terms of `strtod', which we do not implement, a description of the parsing is in order. The string is parsed as by `strtol'; that is, the base is recognized by leading `0' or `0x' prefixes. The number parsed is placed in the significand such that the least significant bit of the number is at the least significant bit of the significand. The number is truncated to fit the significand field provided. The significand is forced to be a quiet NaN. This function, if given a string literal, is evaluated early enough that it is considered a compile-time constant. /quote __builtin_nan[f](""); should return a quiet NAN. To do so, the parisc2.0 doc, says that the fraction part have to be <> 0 but with first bit == 0. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27627