root/arch/x86/math-emu/reg_convert.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. FPU_to_exp16

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

/* [<][>][^][v][top][bottom][index][help] */