Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 
 13 #include "exception.h"
 14 #include "fpu_emu.h"
 15 
 16 int FPU_to_exp16(FPU_REG const *a, FPU_REG *x)
 17 {
 18         int sign = getsign(a);
 19 
 20         *(long long *)&(x->sigl) = *(const long long *)&(a->sigl);
 21 
 22         /* Set up the exponent as a 16 bit quantity. */
 23         setexponent16(x, exponent(a));
 24 
 25         if (exponent16(x) == EXP_UNDER) {
 26                 /* The number is a de-normal or pseudodenormal. */
 27                 /* We only deal with the significand and exponent. */
 28 
 29                 if (x->sigh & 0x80000000) {
 30                         /* Is a pseudodenormal. */
 31                         /* This is non-80486 behaviour because the number
 32                            loses its 'denormal' identity. */
 33                         addexponent(x, 1);
 34                 } else {
 35                         /* Is a denormal. */
 36                         addexponent(x, 1);
 37                         FPU_normalize_nuo(x);
 38                 }
 39         }
 40 
 41         if (!(x->sigh & 0x80000000)) {
 42                 EXCEPTION(EX_INTERNAL | 0x180);
 43         }
 44 
 45         return sign;
 46 }
 47 
  This page was automatically generated by the LXR engine.