X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=sysdeps%2Fia64%2Ffpu%2Ffraiseexcpt.c;h=57111a94cfc219bf0d3eff5ae56c12e934589cff;hb=9b767d19e6f76c10bb0486c113f28145fdd850e5;hp=78a881117e0a1c8854d6f06b3a45342b86cd8bd4;hpb=19e89d15a12b23d3737991e9b2f094445b2123fa;p=platform%2Fupstream%2Fglibc.git diff --git a/sysdeps/ia64/fpu/fraiseexcpt.c b/sysdeps/ia64/fpu/fraiseexcpt.c index 78a8811..57111a9 100644 --- a/sysdeps/ia64/fpu/fraiseexcpt.c +++ b/sysdeps/ia64/fpu/fraiseexcpt.c @@ -51,35 +51,20 @@ feraiseexcept (int excepts) if (FE_DIVBYZERO & excepts) __asm__ __volatile__ ("frcpa.s0 %0,p1=f1,f0" : "=f" (tmp) : : "p1" ); - /* XXX There seem to be no reliable way to generate - overflow/underflow exceptions without causing inexact exceptions - as well. */ /* Next: overflow. */ if (FE_OVERFLOW & excepts) { - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - fpsr |= (FE_OVERFLOW << 13); - __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r" (fpsr)); + dummy = DBL_MAX; - if (!((unsigned long int) fpsr & FE_OVERFLOW)) - { - pid_t pid = getpid (); - kill (pid, SIGFPE); - } + __asm__ __volatile__ ("fadd.d.s0 %0=%1,%1" : "=f" (dummy) : "0" (dummy)); } /* Next: underflow. */ if (FE_UNDERFLOW & excepts) { - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - fpsr |= (FE_UNDERFLOW << 13); - __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r" (fpsr)); + dummy = DBL_MIN; - if (!((unsigned long int) fpsr & FE_UNDERFLOW)) - { - pid_t pid = getpid(); - kill (pid, SIGFPE); - } + __asm__ __volatile__ ("fnma.d.s0 %0=%1,%1,f0" : "=f" (tmp) : "f" (dummy)); } /* Last: inexact. */