reg_convert.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*---------------------------------------------------------------------------+
  2.  |  reg_convert.c                                                            |
  3.  |                                                                           |
  4.  |  Convert register representation.                                         |
  5.  |                                                                           |
  6.  | Copyright (C) 1992,1993,1994,1996,1997                                    |
  7.  |                  W. Metzenthen, 22 Parker St, Ormond, Vic 3163, Australia |
  8.  |                  E-mail   billm@suburbia.net                              |
  9.  |                                                                           |
  10.  |                                                                           |
  11.  +---------------------------------------------------------------------------*/
  12. #include "exception.h"
  13. #include "fpu_emu.h"
  14. int FPU_to_exp16(FPU_REG const *a, FPU_REG *x)
  15. {
  16.   int sign = getsign(a);
  17.   *(long long *)&(x->sigl) = *(const long long *)&(a->sigl);
  18.   /* Set up the exponent as a 16 bit quantity. */
  19.   setexponent16(x, exponent(a));
  20.   if ( exponent16(x) == EXP_UNDER )
  21.     {
  22.       /* The number is a de-normal or pseudodenormal. */
  23.       /* We only deal with the significand and exponent. */
  24.       if (x->sigh & 0x80000000)
  25. {
  26.   /* Is a pseudodenormal. */
  27.   /* This is non-80486 behaviour because the number
  28.      loses its 'denormal' identity. */
  29.   addexponent(x, 1);
  30. }
  31.       else
  32. {
  33.   /* Is a denormal. */
  34.   addexponent(x, 1);
  35.   FPU_normalize_nuo(x);
  36. }
  37.     }
  38.   if ( !(x->sigh & 0x80000000) )
  39.     {
  40.       EXCEPTION(EX_INTERNAL | 0x180);
  41.     }
  42.   return sign;
  43. }