EasyManua.ls Logo

Renesas SuperH SH-4A - Page 382

Renesas SuperH SH-4A
472 pages
Print Icon
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Loading...
Rev. 1.50, 10/04, page 362 of 448
void check_double_exception(double *dst,result)
{
union {
double d;
int l[2];
} tmp;
double abs;
if(result < 0.0) tmp.l[0] = 0xfff00000; /* – infinity */
else tmp.l[0] = 0x7ff00000; /* + infinity */
tmp.l[1] = 0x00000000;
if(result == tmp.d)
set_O(); set_I();
if(FPSCR_RM == 1) {
tmp.l[0] -= 1;
tmp.l[1] = 0xffffffff;
result = tmp.d; /* Maximum value of normalized number */
}
}
if(result < 0.0) abs = -result;
else abs = result;
tmp.l[0] = 0x00100000; /* Minimum value of normalized number */
tmp.l[1] = 0x00000000;
if(abs < tmp.d) {
if((FPSCR_DN == 1) && (abs != 0.0)) {
set_I();
if(result < 0.0) result = -0.0;
/* Zeroize denormalized number */
else result = 0.0;
}
if(FPSCR_I == 1) set_U();
}
if(FPSCR & ENABLE_OUI) fpu_exception_trap();
else *dst = result;
}

Table of Contents

Related product manuals