Rev. 1.50, 10/04, page 377 of 448
abs = *FPUL & 0x7fffffff;
if(abs < 0x00800000){
if((FPSCR_DN == 1) || (abs == 0x00000000)){
if(sign_of(src) == 0) return(PZERO);
else return(NZERO);
}
else return(DENORM);
}
else if(abs < 0x7f800000) return(NORM);
else if(abs == 0x7f800000) {
if(sign_of(src) == 0) return(PINF);
else return(NINF);
}
else if(abs < 0x7fc00000) return(qNaN);
else return(sNaN);
}
FCNVSD Special Cases
FRn +NORM –NORM +0 –0 +INF –INF qNaN sNaN
FCNVSD(FPUL FRn) +NORM –NORM +0 –0 +INF –INF qNaN Invalid
Note: When DN = 1, the value of a denormalized number is treated as 0.
Possible Exceptions:
• FPU error
• Invalid operation