/* $NetBSD: ulp.c,v 1.2 2006/01/25 15:27:42 kleink Exp $ */

/****************************************************************

The author of this software is David M. Gay.

Copyright (C) 1998, 1999 by Lucent Technologies
All Rights Reserved

Permission to use, copy, modify, and distribute this software and
its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of Lucent or any of its entities
not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.

****************************************************************/

/* Please send bug reports to David M. Gay (dmg at acm dot org,
 * with " at " changed at "@" and " dot " changed to ".").  */
#include  <LibConfig.h>

#include "gdtoaimp.h"

 double
ulp
#ifdef KR_headers
  (x) double x;
#else
  (double x)
#endif
{
  Long L;
  double a;

  L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
#ifndef Sudden_Underflow
  if (L > 0) {
#endif
#ifdef IBM
    L |= Exp_msk1 >> 4;
#endif
    word0(a) = (UINT32)L;
    word1(a) = 0;
#ifndef Sudden_Underflow
    }
  else {
    L = (unsigned int)-L >> Exp_shift;
    if (L < Exp_shift) {
      word0(a) = 0x80000 >> L;
      word1(a) = 0;
      }
    else {
      word0(a) = 0;
      L -= Exp_shift;
      word1(a) = L >= 31 ? 1 : 1 << (31 - L);
      }
    }
#endif
  return a;
  }
