EasyManua.ls Logo

Renesas SuperH SH-4A - Page 432

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 412 of 448
void normal_fsqrt(int n)
{
union {
float f;
int l;
} dstf,tmpf;
union {
double d;
int l[2];
} dstd,tmpd;
union {
int double x;
int l[4];
} tmpx;
if(FPSCR_PR == 0) {
tmpf.f = FR[n]; /* save destination value */
dstf.f = sqrt(FR[n]); /* round toward nearest or even */
tmpd.d = dstf.f; /* convert single to double */
tmpd.d *= dstf.f;
if(tmpf.f != tmpd.d) set_I();
if((tmpf.f < tmpd.d) && (FPSCR_RM == 1))
dstf.l -= 1; /* round toward zero */
if(FPSCR & ENABLE_I) fpu_exception_trap();
else FR[n] = dstf.f;
} else {
tmpd.d = DR[n>>1]; /* save destination value */
dstd.d = sqrt(DR[n>>1]); /* round toward nearest or even */
tmpx.x = dstd.d; /* convert double to int double */
tmpx.x *= dstd.d;
if(tmpd.d != tmpx.x) set_I();
if((tmpd.d < tmpx.x) && (FPSCR_RM == 1)) {
dstd.l[1] -= 1; /* round toward zero */
if(dstd.l[1] == 0xffffffff) dstd.l[0] -= 1;
}
if(FPSCR & ENABLE_I) fpu_exception_trap();
else DR[n>>1] = dstd.d;
}
}

Table of Contents

Related product manuals