[funini.com] -> [kei@sodan] -> Kernel Reading

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

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

DEFINITIONS

This source file includes following definitions.
  1. FPU_to_exp16

/*---------------------------------------------------------------------------+
 |  reg_convert.c                                                            |
 |                                                                           |
 |  Convert register representation.                                         |
 |                                                                           |
 | Copyright (C) 1992,1993,1994,1996,1997                                    |
 |                  W. Metzenthen, 22 Parker St, Ormond, Vic 3163, Australia |
 |                  E-mail   billm@suburbia.net                              |
 |                                                                           |
 |                                                                           |
 +---------------------------------------------------------------------------*/

#include "exception.h"
#include "fpu_emu.h"

int FPU_to_exp16(FPU_REG const *a, FPU_REG *x)
{
        int sign = getsign(a);

        *(long long *)&(x->sigl) = *(const long long *)&(a->sigl);

        /* Set up the exponent as a 16 bit quantity. */
        setexponent16(x, exponent(a));

        if (exponent16(x) == EXP_UNDER) {
                /* The number is a de-normal or pseudodenormal. */
                /* We only deal with the significand and exponent. */

                if (x->sigh & 0x80000000) {
                        /* Is a pseudodenormal. */
                        /* This is non-80486 behaviour because the number
                           loses its 'denormal' identity. */
                        addexponent(x, 1);
                } else {
                        /* Is a denormal. */
                        addexponent(x, 1);
                        FPU_normalize_nuo(x);
                }
        }

        if (!(x->sigh & 0x80000000)) {
                EXCEPTION(EX_INTERNAL | 0x180);
        }

        return sign;
}

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

[funini.com] -> [kei@sodan] -> Kernel Reading