Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/math-emu/reg_convert.c
26451 views
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 [email protected] |
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
}
48
49