EasyManua.ls Logo

Renesas SuperH SH-4A - Page 411

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 391 of 448
case NINF : switch (data_type_of(m)){
case PZERO:
case NZERO:invalid(n); break;
default: switch (data_type_of(n)){
case DENORM: set_E(); break;
case qNaN: qnan(n); break;
default: inf(n,sign_of(0)^sign_of(m)^sign_of(n));break
} break;
} break;
}
}
void normal_fmac(int m,n)
{
union {
int double x;
int l[4];
} dstx,tmpx;
float dstf,srcf;
if((data_type_of(n) == PZERO)|| (data_type_of(n) == NZERO))
srcf = 0.0; /* flush denormalized value */
else srcf = FR[n];
tmpx.x = FR[0]; /* convert single to int double */
tmpx.x *= FR[m]; /* exact product */
dstx.x = tmpx.x + srcf;
if(((dstx.x == srcf) && (tmpx.x != 0.0)) ||
((dstx.x == tmpx.x) && (srcf != 0.0))) {
set_I();
if(sign_of(0)^ sign_of(m)^ sign_of(n)) {
dstx.l[3] -= 1; /* correct result */
if(dstx.l[3] == 0xffffffff) dstx.l[2] -= 1;
if(dstx.l[2] == 0xffffffff) dstx.l[1] -= 1;
if(dstx.l[1] == 0xffffffff) dstx.l[0] -= 1;
}
else dstx.l[3] |= 1;
}
if((dstx.l[1] & 0x01ffffff) || dstx.l[2] || dstx.l[3]) set_I();
if(FPSCR_RM == 1) {

Table of Contents

Related product manuals