Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
reg_convert.c
Go to the documentation of this file.
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 [email protected] |
9  | |
10  | |
11  +---------------------------------------------------------------------------*/
12 
13 #include "exception.h"
14 #include "fpu_emu.h"
15 
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);
38  }
39  }
40 
41  if (!(x->sigh & 0x80000000)) {
42  EXCEPTION(EX_INTERNAL | 0x180);
43  }
44 
45  return sign;
46 }