pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/34571: TME sun3 emulator doesn't consider floating point infinities t...



The following reply was made to PR pkg/34571; it has been noted by GNATS.

From: SigmFSK%aol.com@localhost
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: pkg/34571: TME sun3 emulator doesn't consider floating point 
infinities t...
Date: Sun, 1 Oct 2006 20:12:13 EDT

 I follow with the patches in "diff -u" format and a description of where to  
 apply them.  This includes the one-line fix for the 34616 fneg  problem.
  
 go to ieee754 directory, make following patch:
  
 --- ieee754-ops-auto.sh.orig 2006-10-01 08:30:52.000000000  -0400
 +++ ieee754-ops-auto.sh 2006-10-01 08:31:01.000000000 -0400
 @@  -126,7 +126,7 @@
 
 # generate the  operations:
 #
 -     for  name in add sub mul div \
 +     for name in add cmp sub  mul div \
 rem sqrt abs neg move  \
 rint \
 cos acos cosh  \
 @@ -144,7 +144,7  @@
 #
 monadic=true
 case  "${name}" in
 -  add | sub | mul | div | rem | pow |  scale)
 +  add | cmp | sub | mul | div | rem | pow |  scale)
 monadic=false
 ;;
 esac
 @@ -243,13 +243,14  @@
 func_softfloat="${name}"
 ;;
 *-add) op_builtin='+' ;;
 +      *-cmp)  op_builtin='-' ;;
 *-sub) op_builtin='-'  ;;
 *-mul) op_builtin='*'  ;;
 *-div) op_builtin='/'  ;;
 *-sqrt) func_libm=sqrt  ;;
 partial-abs | unknown-abs)  func_libm=fabs ;;
 strict-neg) op0=0  ; func_softfloat=sub ; op1=src0 ;;
 -       partial-neg | unknown-neg) op0=0 ; op_builtin='-'; op1=src0  ;;
 +      partial-neg | unknown-neg) op0=-1.0 ;  op_builtin='*'; op1=src0 ;;
 strict-move)  func_softfloat=add ; op1=0 ;;
 *-move)  type="${level_stricter}-move" ; src0_buffer=false  ;;
 strict-rint)  func_softfloat=round_to_int ;;
  
  
  
 
 notice that above difference includes the one line fix for 34616 /  fneg
  
 running make produces the following difference 
  
 --- ieee754-ops-auto.h.orig 2006-10-01 08:30:45.000000000 -0400
 +++  ieee754-ops-auto.h 2006-10-01 08:31:20.000000000 -0400
 @@ -11,6 +11,9  @@
 /* this does a single-precision add: */
 void  (*tme_ieee754_ops_single_add) _TME_P((struct tme_ieee754_ctl *, 
 _tme_const  struct tme_float *, _tme_const struct tme_float *, struct 
tme_float  *));
 
 +  /* this does a single-precision cmp: */
 +   void (*tme_ieee754_ops_single_cmp) _TME_P((struct tme_ieee754_ctl *, 
 _tme_const  struct tme_float *, _tme_const struct tme_float *, struct 
tme_float  
 *));
 +
 /* this does a single-precision sub:  */
 void (*tme_ieee754_ops_single_sub) _TME_P((struct  tme_ieee754_ctl *, 
 _tme_const struct tme_float *, _tme_const struct tme_float *,  struct 
tme_float *));
 
 @@ -113,6 +116,9 @@
 /* this  does a double-precision add: */
 void  (*tme_ieee754_ops_double_add) _TME_P((struct tme_ieee754_ctl *, 
 _tme_const  struct tme_float *, _tme_const struct tme_float *, struct 
tme_float  *));
 
 +  /* this does a double-precision cmp: */
 +   void (*tme_ieee754_ops_double_cmp) _TME_P((struct tme_ieee754_ctl *, 
 _tme_const  struct tme_float *, _tme_const struct tme_float *, struct 
tme_float  
 *));
 +
 /* this does a double-precision sub:  */
 void (*tme_ieee754_ops_double_sub) _TME_P((struct  tme_ieee754_ctl *, 
 _tme_const struct tme_float *, _tme_const struct tme_float *,  struct 
tme_float *));
 
 @@ -215,6 +221,9 @@
 /* this  does a extended80-precision add: */
 void  (*tme_ieee754_ops_extended80_add) _TME_P((struct tme_ieee754_ctl *, 
 _tme_const  struct tme_float *, _tme_const struct tme_float *, struct 
tme_float  
 *));
 
 +  /* this does a extended80-precision cmp: */
 +   void (*tme_ieee754_ops_extended80_cmp) _TME_P((struct tme_ieee754_ctl *,  
 _tme_const struct tme_float *, _tme_const struct tme_float *, struct 
 tme_float  *));
 +
 /* this does a extended80-precision sub:  */
 void (*tme_ieee754_ops_extended80_sub) _TME_P((struct  tme_ieee754_ctl *, 
 _tme_const struct tme_float *, _tme_const struct tme_float *,  struct 
tme_float 
 *));
 
 @@ -317,6 +326,9 @@
 /* this  does a quad-precision add: */
 void (*tme_ieee754_ops_quad_add)  _TME_P((struct tme_ieee754_ctl *, 
 _tme_const struct tme_float *, _tme_const  struct tme_float *, struct 
tme_float *));
 
 +  /* this does a  quad-precision cmp: */
 +  void (*tme_ieee754_ops_quad_cmp)  _TME_P((struct tme_ieee754_ctl *, 
 _tme_const struct tme_float *, _tme_const  struct tme_float *, struct 
tme_float *));
 +
 /* this does a  quad-precision sub: */
 void (*tme_ieee754_ops_quad_sub)  _TME_P((struct tme_ieee754_ctl *, 
 _tme_const struct tme_float *, _tme_const  struct tme_float *, struct 
tme_float *));
 
 
 
 and make produces the following difference
 
 ---  ieee754-ops-auto.c.orig 2006-10-01 08:30:39.000000000 -0400
 +++  ieee754-ops-auto.c.orig2 2006-10-01 08:32:20.000000000 -0400
 @@ -39,6  +39,25 @@
 }
 }
 
 +/* this does a strict  compliance single-precision cmp: */
 +static  void
 +_tme_ieee754_strict_single_cmp(struct tme_ieee754_ctl *ieee754_ctl,  const 
 struct tme_float *src0, const struct tme_float *src1, struct tme_float  *dst)
 +{
 +  int exceptions;
 +
 +  /* assume that this  operation raises no exceptions: */
 +  exceptions = 0;
 +
 +  /*  the operation: */
 +  tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN,  
tme_ieee754_single_value_builtin_get(src0) -  
 tme_ieee754_single_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 /* this does a strict compliance  single-precision sub: */
 static  void
 _tme_ieee754_strict_single_sub(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 @@ -553,6 +572,25 @@
 }
 }
 
 +/* this does a strict compliance double-precision  cmp: */
 +static void
 +_tme_ieee754_strict_double_cmp(struct  tme_ieee754_ctl *ieee754_ctl, const 
 struct tme_float *src0, const struct  tme_float *src1, struct tme_float *dst)
 +{
 +  int  exceptions;
 +
 +  /* assume that this operation raises no exceptions:  */
 +  exceptions = 0;
 +
 +  /* the operation: */
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN,  
tme_ieee754_double_value_builtin_get(src0) -  
 tme_ieee754_double_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 /* this does a strict compliance  double-precision sub: */
 static  void
 _tme_ieee754_strict_double_sub(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 @@ -1071,6 +1109,25 @@
 
 #endif /*  defined(TME_HAVE_INT64_T) */
 
 +/* this does a strict compliance  extended80-precision cmp: */
 +static  void
 +_tme_ieee754_strict_extended80_cmp(struct tme_ieee754_ctl *ieee754_ctl,  
 const struct tme_float *src0, const struct tme_float *src1, struct tme_float  
 *dst)
 +{
 +  int exceptions;
 +
 +  /* assume that this  operation raises no exceptions: */
 +  exceptions = 0;
 +
 +  /*  the operation: */
 +  tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN,  
tme_ieee754_extended80_value_builtin_get(src0) -  
 tme_ieee754_extended80_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 #if  defined(TME_HAVE_INT64_T)
 
 /* this does a strict compliance  extended80-precision sub: */
 @@ -1633,6 +1690,25 @@
 
 #endif  /* defined(TME_HAVE_INT64_T) */
 
 +/* this does a strict compliance  quad-precision cmp: */
 +static void
 +_tme_ieee754_strict_quad_cmp(struct  tme_ieee754_ctl *ieee754_ctl, const 
 struct tme_float *src0, const struct  tme_float *src1, struct tme_float *dst)
 +{
 +  int  exceptions;
 +
 +  /* assume that this operation raises no exceptions:  */
 +  exceptions = 0;
 +
 +  /* the operation: */
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  
tme_ieee754_quad_value_builtin_get(src0) -  
 tme_ieee754_quad_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 #if  defined(TME_HAVE_INT64_T)
 
 /* this does a strict compliance  quad-precision sub: */
 @@ -2166,6 +2242,9 @@
 /* this does a  strict compliance single-precision add: */
 _tme_ieee754_strict_single_add,
 
 +  /* this does a strict  compliance single-precision cmp: */
 +   _tme_ieee754_strict_single_cmp,
 +
 /* this does a strict  compliance single-precision sub: */
 _tme_ieee754_strict_single_sub,
 
 @@ -2268,6 +2347,9  @@
 /* this does a strict compliance double-precision add:  */
 _tme_ieee754_strict_double_add,
 
 +  /* this  does a strict compliance double-precision cmp: */
 +   _tme_ieee754_strict_double_cmp,
 +
 /* this does a strict  compliance double-precision sub: */
 _tme_ieee754_strict_double_sub,
 
 @@ -2374,6 +2456,9  @@
 NULL,
 #endif /* !(defined(TME_HAVE_INT64_T))  */
 
 +  /* this does a strict compliance extended80-precision  cmp: */
 +  _tme_ieee754_strict_extended80_cmp,
 +
 /*  this does a strict compliance extended80-precision sub: */
 #if  (defined(TME_HAVE_INT64_T))
 _tme_ieee754_strict_extended80_sub,
 @@ -2524,6 +2609,9 @@
 NULL,
 #endif /* !(defined(TME_HAVE_INT64_T)) */
 
 +  /*  this does a strict compliance quad-precision cmp: */
 +   _tme_ieee754_strict_quad_cmp,
 +
 /* this does a strict  compliance quad-precision sub: */
 #if  (defined(TME_HAVE_INT64_T))
 _tme_ieee754_strict_quad_sub,
 @@  -2705,6 +2793,41 @@
 
 #if  (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_SINGLE)
 
 +/* this does a partial compliance  single-precision cmp: */
 +static  void
 +_tme_ieee754_partial_single_cmp(struct tme_ieee754_ctl *ieee754_ctl,  const 
 struct tme_float *src0, const struct tme_float *src1, struct tme_float  *dst)
 +{
 +  int exceptions;
 +
 +  /* check for a NaN  operand: */
 +  if  (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, 
 src0,  src1, dst))) {
 +    return;
 +  }
 +
 +  /*  enter native floating-point operation: */
 +   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode,  
 tme_ieee754_exception_float, ieee754_ctl);
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
 +
 +   /* assume that this operation raises no exceptions: */
 +  exceptions =  0;
 +
 +  /* the operation: */
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN,  
tme_ieee754_single_value_builtin_get(src0) -  
 tme_ieee754_single_value_builtin_get(src1));
 +
 +  /* leave native  floating-point operation: */
 +  exceptions |=  tme_float_leave();
 +  ieee754_ctl->tme_ieee754_ctl_lock_unlock =  NULL;
 +
 +  /* signal any exceptions: */
 +  if (exceptions !=  0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 +#endif /*  (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_SINGLE)  */
 +
 +#if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_SINGLE)
 +
 /* this does a partial compliance  single-precision sub: */
 static  void
 _tme_ieee754_partial_single_sub(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 @@ -2907,7 +3030,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0 -  
tme_ieee754_single_value_builtin_get(src0));
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, -1.0 *  
tme_ieee754_single_value_builtin_get(src0));
 
 /* leave  native floating-point operation: */
 exceptions |=  tme_float_leave();
 @@ -3188,6 +3311,41 @@
 
 #if  (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE)
 
 +/* this does a partial compliance  double-precision cmp: */
 +static  void
 +_tme_ieee754_partial_double_cmp(struct tme_ieee754_ctl *ieee754_ctl,  const 
 struct tme_float *src0, const struct tme_float *src1, struct tme_float  *dst)
 +{
 +  int exceptions;
 +
 +  /* check for a NaN  operand: */
 +  if  (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, 
 src0,  src1, dst))) {
 +    return;
 +  }
 +
 +  /*  enter native floating-point operation: */
 +   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode,  
 tme_ieee754_exception_float, ieee754_ctl);
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
 +
 +   /* assume that this operation raises no exceptions: */
 +  exceptions =  0;
 +
 +  /* the operation: */
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN,  
tme_ieee754_double_value_builtin_get(src0) -  
 tme_ieee754_double_value_builtin_get(src1));
 +
 +  /* leave native  floating-point operation: */
 +  exceptions |=  tme_float_leave();
 +  ieee754_ctl->tme_ieee754_ctl_lock_unlock =  NULL;
 +
 +  /* signal any exceptions: */
 +  if (exceptions !=  0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 +#endif /*  (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_DOUBLE)  */
 +
 +#if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE)
 +
 /* this does a partial compliance  double-precision sub: */
 static  void
 _tme_ieee754_partial_double_sub(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 @@ -3390,7 +3548,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0 -  
tme_ieee754_double_value_builtin_get(src0));
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, -1.0 *  
tme_ieee754_double_value_builtin_get(src0));
 
 /* leave  native floating-point operation: */
 exceptions |=  tme_float_leave();
 @@ -3671,6 +3829,41 @@
 
 #if  (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
 
 +/* this does a partial  compliance extended80-precision cmp: */
 +static  void
 +_tme_ieee754_partial_extended80_cmp(struct tme_ieee754_ctl  *ieee754_ctl, 
 const struct tme_float *src0, const struct tme_float *src1, struct  tme_float 
 *dst)
 +{
 +  int exceptions;
 +
 +  /* check for a  NaN operand: */
 +  if  
 (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, 
src0,  src1, dst))) {
 +    return;
 +  }
 +
 +  /*  enter native floating-point operation: */
 +   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode,  
 tme_ieee754_exception_float, ieee754_ctl);
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
 +
 +   /* assume that this operation raises no exceptions: */
 +  exceptions =  0;
 +
 +  /* the operation: */
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN,  
tme_ieee754_extended80_value_builtin_get(src0) -  
 tme_ieee754_extended80_value_builtin_get(src1));
 +
 +  /* leave native  floating-point operation: */
 +  exceptions |=  tme_float_leave();
 +  ieee754_ctl->tme_ieee754_ctl_lock_unlock =  NULL;
 +
 +  /* signal any exceptions: */
 +  if (exceptions !=  0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 +#endif /*  (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
 +
 +#if  (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
 +
 /* this does a partial  compliance extended80-precision sub: */
 static  void
 _tme_ieee754_partial_extended80_sub(struct tme_ieee754_ctl  *ieee754_ctl, 
 const struct tme_float *src0, const struct tme_float *src1, struct  tme_float 
 *dst)
 @@ -3873,7 +4066,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0 -  
tme_ieee754_extended80_value_builtin_get(src0));
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, -1.0 *  
tme_ieee754_extended80_value_builtin_get(src0));
 
 /*  leave native floating-point operation: */
 exceptions |=  tme_float_leave();
 @@ -4154,6 +4347,41 @@
 
 #if  (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN ==  TME_FLOAT_FORMAT_IEEE754_QUAD)
 
 +/* this does a partial compliance  quad-precision cmp: */
 +static void
 +_tme_ieee754_partial_quad_cmp(struct  tme_ieee754_ctl *ieee754_ctl, const 
 struct tme_float *src0, const struct  tme_float *src1, struct tme_float *dst)
 +{
 +  int  exceptions;
 +
 +  /* check for a NaN operand: */
 +  if  (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, 
 src0, src1,  dst))) {
 +    return;
 +  }
 +
 +  /* enter  native floating-point operation: */
 +   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode,  
 tme_ieee754_exception_float, ieee754_ctl);
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
 +
 +   /* assume that this operation raises no exceptions: */
 +  exceptions =  0;
 +
 +  /* the operation: */
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  
tme_ieee754_quad_value_builtin_get(src0) -  
 tme_ieee754_quad_value_builtin_get(src1));
 +
 +  /* leave native  floating-point operation: */
 +  exceptions |=  tme_float_leave();
 +  ieee754_ctl->tme_ieee754_ctl_lock_unlock =  NULL;
 +
 +  /* signal any exceptions: */
 +  if (exceptions !=  0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 +#endif /*  (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_QUAD)  */
 +
 +#if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN ==  TME_FLOAT_FORMAT_IEEE754_QUAD)
 +
 /* this does a partial compliance  quad-precision sub: */
 static  void
 _tme_ieee754_partial_quad_sub(struct tme_ieee754_ctl *ieee754_ctl,  const 
 struct tme_float *src0, const struct tme_float *src1, struct tme_float  *dst)
 @@ -4356,7 +4584,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, 0  - 
tme_ieee754_quad_value_builtin_get(src0));
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  -1.0 * 
tme_ieee754_quad_value_builtin_get(src0));
 
 /*  leave native floating-point operation: */
 exceptions |=  tme_float_leave();
 @@ -4613,6 +4841,13 @@
 _tme_ieee754_strict_single_add,
 #endif /*  !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_SINGLE))  */
 
 +  /* this does a partial compliance single-precision cmp:  */
 +#if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_SINGLE))
 +   _tme_ieee754_partial_single_cmp,
 +#else  /*  !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_SINGLE))  */
 +  _tme_ieee754_strict_single_cmp,
 +#endif /*  !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_SINGLE))  */
 +
 /* this does a partial compliance single-precision sub:  */
 #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_SINGLE))
 _tme_ieee754_partial_single_sub,
 @@ -4767,6 +5002,13 @@
 _tme_ieee754_strict_double_add,
 #endif /*  !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_DOUBLE))  */
 
 +  /* this does a partial compliance double-precision cmp:  */
 +#if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE))
 +   _tme_ieee754_partial_double_cmp,
 +#else  /*  !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_DOUBLE))  */
 +  _tme_ieee754_strict_double_cmp,
 +#endif /*  !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_DOUBLE))  */
 +
 /* this does a partial compliance double-precision sub:  */
 #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE))
 _tme_ieee754_partial_double_sub,
 @@ -4925,6 +5167,13 @@
 #endif /*  !(defined(TME_HAVE_INT64_T)) */
 #endif /*  !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
 
 +  /* this does a  partial compliance extended80-precision cmp: */
 +#if  ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
 +   _tme_ieee754_partial_extended80_cmp,
 +#else  /*  !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
 +   _tme_ieee754_strict_extended80_cmp,
 +#endif /*  !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
 +
 /* this does a  partial compliance extended80-precision sub: */
 #if  ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
 _tme_ieee754_partial_extended80_sub,
 @@ -5127,6 +5376,13 @@
 #endif  /* !(defined(TME_HAVE_INT64_T)) */
 #endif /*  !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_QUAD))  */
 
 +  /* this does a partial compliance quad-precision cmp:  */
 +#if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_QUAD))
 +   _tme_ieee754_partial_quad_cmp,
 +#else  /*  !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_QUAD))  */
 +  _tme_ieee754_strict_quad_cmp,
 +#endif /*  !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == 
 TME_FLOAT_FORMAT_IEEE754_QUAD))  */
 +
 /* this does a partial compliance quad-precision sub:  */
 #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN ==  
 TME_FLOAT_FORMAT_IEEE754_QUAD))
 _tme_ieee754_partial_quad_sub,
 @@ -5338,6 +5594,25 @@
 }
 }
 
 +/* this does a unknown compliance single-precision  cmp: */
 +static void
 +_tme_ieee754_unknown_single_cmp(struct  tme_ieee754_ctl *ieee754_ctl, const 
 struct tme_float *src0, const struct  tme_float *src1, struct tme_float *dst)
 +{
 +  int  exceptions;
 +
 +  /* assume that this operation raises no exceptions:  */
 +  exceptions = 0;
 +
 +  /* the operation: */
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN,  
tme_ieee754_single_value_builtin_get(src0) -  
 tme_ieee754_single_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 /* this does a unknown compliance  single-precision sub: */
 static  void
 _tme_ieee754_unknown_single_sub(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 @@ -5451,7 +5726,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0 -  
tme_ieee754_single_value_builtin_get(src0));
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, -1.0 *  
tme_ieee754_single_value_builtin_get(src0));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 
 /*  signal any exceptions: */
 @@ -5613,6 +5888,25 @@
 }
 }
 
 +/* this does a unknown compliance double-precision  cmp: */
 +static void
 +_tme_ieee754_unknown_double_cmp(struct  tme_ieee754_ctl *ieee754_ctl, const 
 struct tme_float *src0, const struct  tme_float *src1, struct tme_float *dst)
 +{
 +  int  exceptions;
 +
 +  /* assume that this operation raises no exceptions:  */
 +  exceptions = 0;
 +
 +  /* the operation: */
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN,  
tme_ieee754_double_value_builtin_get(src0) -  
 tme_ieee754_double_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 /* this does a unknown compliance  double-precision sub: */
 static  void
 _tme_ieee754_unknown_double_sub(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 @@ -5726,7 +6020,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0 -  
tme_ieee754_double_value_builtin_get(src0));
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, -1.0 *  
tme_ieee754_double_value_builtin_get(src0));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 
 /*  signal any exceptions: */
 @@ -5888,6 +6182,25 @@
 }
 }
 
 +/* this does a unknown compliance  extended80-precision cmp: */
 +static  void
 +_tme_ieee754_unknown_extended80_cmp(struct tme_ieee754_ctl  *ieee754_ctl, 
 const struct tme_float *src0, const struct tme_float *src1, struct  tme_float 
 *dst)
 +{
 +  int exceptions;
 +
 +  /* assume that  this operation raises no exceptions: */
 +  exceptions =  0;
 +
 +  /* the operation: */
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN,  
tme_ieee754_extended80_value_builtin_get(src0) -  
 tme_ieee754_extended80_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 /* this does a unknown compliance  extended80-precision sub: */
 static  void
 _tme_ieee754_unknown_extended80_sub(struct tme_ieee754_ctl  *ieee754_ctl, 
 const struct tme_float *src0, const struct tme_float *src1, struct  tme_float 
 *dst)
 @@ -6001,7 +6314,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0 -  
tme_ieee754_extended80_value_builtin_get(src0));
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, -1.0 *  
tme_ieee754_extended80_value_builtin_get(src0));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 
 /*  signal any exceptions: */
 @@ -6163,6 +6476,25 @@
 }
 }
 
 +/* this does a unknown compliance quad-precision cmp:  */
 +static void
 +_tme_ieee754_unknown_quad_cmp(struct tme_ieee754_ctl  *ieee754_ctl, const 
 struct tme_float *src0, const struct tme_float *src1, struct  tme_float *dst)
 +{
 +  int exceptions;
 +
 +  /* assume that  this operation raises no exceptions: */
 +  exceptions =  0;
 +
 +  /* the operation: */
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  
tme_ieee754_quad_value_builtin_get(src0) -  
 tme_ieee754_quad_value_builtin_get(src1));
 +   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 +
 +  /* signal  any exceptions: */
 +  if (exceptions != 0) {
 +     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl,  exceptions);
 +  }
 +}
 +
 /* this does a unknown compliance  quad-precision sub: */
 static  void
 _tme_ieee754_unknown_quad_sub(struct tme_ieee754_ctl *ieee754_ctl,  const 
 struct tme_float *src0, const struct tme_float *src1, struct tme_float  *dst)
 @@ -6276,7 +6608,7 @@
 exceptions =  0;
 
 /* the operation: */
 -   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, 0  - 
tme_ieee754_quad_value_builtin_get(src0));
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  -1.0 * 
tme_ieee754_quad_value_builtin_get(src0));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 
 /*  signal any exceptions: */
 @@ -6428,6 +6760,9 @@
 /* this does  a unknown compliance single-precision add: */
 _tme_ieee754_unknown_single_add,
 
 +  /* this does a unknown  compliance single-precision cmp: */
 +   _tme_ieee754_unknown_single_cmp,
 +
 /* this does a unknown  compliance single-precision sub: */
 _tme_ieee754_unknown_single_sub,
 
 @@ -6530,6 +6865,9  @@
 /* this does a unknown compliance double-precision add:  */
 _tme_ieee754_unknown_double_add,
 
 +  /* this  does a unknown compliance double-precision cmp: */
 +   _tme_ieee754_unknown_double_cmp,
 +
 /* this does a unknown  compliance double-precision sub: */
 _tme_ieee754_unknown_double_sub,
 
 @@ -6632,6 +6970,9  @@
 /* this does a unknown compliance extended80-precision add:  */
 _tme_ieee754_unknown_extended80_add,
 
 +  /*  this does a unknown compliance extended80-precision cmp: */
 +   _tme_ieee754_unknown_extended80_cmp,
 +
 /* this does a unknown  compliance extended80-precision sub: */
 _tme_ieee754_unknown_extended80_sub,
 
 @@ -6754,6 +7095,9  @@
 /* this does a unknown compliance quad-precision add:  */
 _tme_ieee754_unknown_quad_add,
 
 +  /* this  does a unknown compliance quad-precision cmp: */
 +   _tme_ieee754_unknown_quad_cmp,
 +
 /* this does a unknown  compliance quad-precision sub: */
 _tme_ieee754_unknown_quad_sub,
 
 
 
 
 then I modified the auto-generated file as follows:
 
 ---  ieee754-ops-auto.c.orig2 2006-10-01 08:32:20.000000000 -0400
 +++  ieee754-ops-auto.c 2006-10-01 08:32:29.000000000 -0400
 @@ -48,6 +48,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_SINGLE )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_SINGLE) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_SINGLE)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_SINGLE)))
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0.0);
 +else
 +
 /*  the operation: */
 tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN,  
tme_ieee754_single_value_builtin_get(src0) -  
 tme_ieee754_single_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -581,6 +588,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_DOUBLE )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_DOUBLE) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_DOUBLE)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_DOUBLE)))
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0.0);
 +else
 +
 /*  the operation: */
 tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN,  
tme_ieee754_double_value_builtin_get(src0) -  
 tme_ieee754_double_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -1118,6 +1132,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_EXTENDED80 )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_EXTENDED80) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_EXTENDED80)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_EXTENDED80)))
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0.0);
 +else
 +
 /* the operation: */
 tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN,  
tme_ieee754_extended80_value_builtin_get(src0) -  
 tme_ieee754_extended80_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -1699,6 +1720,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_QUAD )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_QUAD) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_QUAD)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_QUAD)))
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  0.0);
 +else
 +
 /* the operation: */
 tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  
tme_ieee754_quad_value_builtin_get(src0) -  
 tme_ieee754_quad_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -2811,6 +2839,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_SINGLE )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_SINGLE) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_SINGLE)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_SINGLE)))
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0.0);
 +
 +else
 /*  the operation: */
 tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN,  
tme_ieee754_single_value_builtin_get(src0) -  
 tme_ieee754_single_value_builtin_get(src1));
 
 @@ -3329,6 +3364,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_DOUBLE )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_DOUBLE) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_DOUBLE)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_DOUBLE)))
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0.0);
 +else
 +
 /*  the operation: */
 tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN,  
tme_ieee754_double_value_builtin_get(src0) -  
 tme_ieee754_double_value_builtin_get(src1));
 
 @@ -3847,6 +3889,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_EXTENDED80 )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_EXTENDED80) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_EXTENDED80)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_EXTENDED80)))
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0.0);
 +else
 +
 /* the operation: */
 tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN,  
tme_ieee754_extended80_value_builtin_get(src0) -  
 tme_ieee754_extended80_value_builtin_get(src1));
 
 @@ -4365,6  +4414,13 @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_QUAD )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_QUAD) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_QUAD)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_QUAD)))
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  0.0);
 +else
 +
 /* the operation: */
 tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  
tme_ieee754_quad_value_builtin_get(src0) -  
 tme_ieee754_quad_value_builtin_get(src1));
 
 @@ -5603,6 +5659,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_SINGLE )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_SINGLE) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_SINGLE)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_SINGLE)))
 +   tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0.0);
 +else
 +
 /*  the operation: */
 tme_ieee754_single_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN,  
tme_ieee754_single_value_builtin_get(src0) -  
 tme_ieee754_single_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -5897,6 +5960,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_DOUBLE )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_DOUBLE) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_DOUBLE)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_DOUBLE)))
 +   tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0.0);
 +else
 +
 /*  the operation: */
 tme_ieee754_double_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN,  
tme_ieee754_double_value_builtin_get(src0) -  
 tme_ieee754_double_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -6191,6 +6261,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_EXTENDED80 )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_EXTENDED80) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_EXTENDED80)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_EXTENDED80)))
 +   tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0.0);
 +else
 +
 /* the operation: */
 tme_ieee754_extended80_value_builtin_set(dst,  
 TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN,  
tme_ieee754_extended80_value_builtin_get(src0) -  
 tme_ieee754_extended80_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 @@ -6485,6 +6562,13  @@
 /* assume that this operation raises no exceptions:  */
 exceptions = 0;
 
 +  if  (tme_float_is_inf(src0, TME_FLOAT_FORMAT_IEEE754_QUAD )  &
 +      tme_float_is_inf(src1,  TME_FLOAT_FORMAT_IEEE754_QUAD) &
 +       (tme_float_is_negative(src0, TME_FLOAT_FORMAT_IEEE754_QUAD)  ==
 +      tme_float_is_negative(src1,  TME_FLOAT_FORMAT_IEEE754_QUAD)))
 +   tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  0.0);
 +else
 +
 /* the operation: */
 tme_ieee754_quad_value_builtin_set(dst, 
 TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN,  
tme_ieee754_quad_value_builtin_get(src0) -  
 tme_ieee754_quad_value_builtin_get(src1));
 ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
 
 
 
 
 
 
 then to the m68k directory and change the script:
  
 --- m6888x-auto.sh.orig 2006-10-01 08:22:49.000000000 -0400
 +++  m6888x-auto.sh 2006-10-01 08:22:56.000000000 -0400
 @@ -136,7 +136,7  @@
 12) name=asin ;  fpu_types=TME_M68K_FPU_M6888X ;; # fasin pp  315
 10) name=atan ;  fpu_types=TME_M68K_FPU_M6888X ;; # fatan pp  318
 13) name=atanh ;  fpu_types=TME_M68K_FPU_M6888X ;; # fatanh pp  321
 -     56) name=cmp ; name_ieee754=sub ;  optype=DST_SRC ;; # fcmp pp 326
 +     56) name=cmp ;  optype=DST_SRC ;; # fcmp pp 326
 29)  name=cos ; fpu_types=TME_M68K_FPU_M6888X ;; # fcos pp  329
 25) name=cosh ;  fpu_types=TME_M68K_FPU_M6888X ;; # fcosh pp 332
 
 
 
 did a make to produce the following diff:
 
 
 ---  m6888x-auto.c.orig 2006-10-01 08:23:13.000000000 -0400
 +++  m6888x-auto.c 2006-10-01 08:23:17.000000000 -0400
 @@ -179,7 +179,7  @@
 { _tme_m6888x_fsincos, 0, TME_M68K_FPU_M6888X,  TME_M6888X_OPTYPE_MONADIC, 
 TME_FLOAT_ROUND_NULL,  TME_M6888X_ROUNDING_PRECISION_CTL },
 
 /* opmode 56:  */
 -  { NULL, TME_M6888X_IEEE754_OP(tme_ieee754_ops_extended80_sub),  
 TME_M68K_FPU_ANY, TME_M6888X_OPTYPE_DYADIC_DST_SRC, TME_FLOAT_ROUND_NULL,  
 TME_M6888X_ROUNDING_PRECISION_CTL },
 +  { NULL,  TME_M6888X_IEEE754_OP(tme_ieee754_ops_extended80_cmp), 
 TME_M68K_FPU_ANY,  TME_M6888X_OPTYPE_DYADIC_DST_SRC, TME_FLOAT_ROUND_NULL,  
 TME_M6888X_ROUNDING_PRECISION_CTL },
 
 /* opmode 57:  */
 { NULL, 0, TME_M68K_FPU_NONE, TME_M6888X_OPTYPE_MONADIC,  
 TME_FLOAT_ROUND_NULL, TME_M6888X_ROUNDING_PRECISION_CTL  },
 



Home | Main Index | Thread Index | Old Index