Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
math-emu
fpu_arith.c
Go to the documentation of this file.
1
/*---------------------------------------------------------------------------+
2
| fpu_arith.c |
3
| |
4
| Code to implement the FPU register/register arithmetic instructions |
5
| |
6
| Copyright (C) 1992,1993,1997 |
7
| W. Metzenthen, 22 Parker St, Ormond, Vic 3163, Australia |
8
| E-mail
[email protected]
|
9
| |
10
| |
11
+---------------------------------------------------------------------------*/
12
13
#include "
fpu_system.h
"
14
#include "
fpu_emu.h
"
15
#include "
control_w.h
"
16
#include "
status_w.h
"
17
18
void
fadd__
(
void
)
19
{
20
/* fadd st,st(i) */
21
int
i
=
FPU_rm
;
22
clear_C1
();
23
FPU_add
(&
st
(i),
FPU_gettagi
(i), 0,
control_word
);
24
}
25
26
void
fmul__
(
void
)
27
{
28
/* fmul st,st(i) */
29
int
i
=
FPU_rm
;
30
clear_C1
();
31
FPU_mul
(&
st
(i),
FPU_gettagi
(i), 0,
control_word
);
32
}
33
34
void
fsub__
(
void
)
35
{
36
/* fsub st,st(i) */
37
clear_C1
();
38
FPU_sub
(0,
FPU_rm
,
control_word
);
39
}
40
41
void
fsubr_
(
void
)
42
{
43
/* fsubr st,st(i) */
44
clear_C1
();
45
FPU_sub
(
REV
,
FPU_rm
,
control_word
);
46
}
47
48
void
fdiv__
(
void
)
49
{
50
/* fdiv st,st(i) */
51
clear_C1
();
52
FPU_div
(0,
FPU_rm
,
control_word
);
53
}
54
55
void
fdivr_
(
void
)
56
{
57
/* fdivr st,st(i) */
58
clear_C1
();
59
FPU_div
(
REV
,
FPU_rm
,
control_word
);
60
}
61
62
void
fadd_i
(
void
)
63
{
64
/* fadd st(i),st */
65
int
i
=
FPU_rm
;
66
clear_C1
();
67
FPU_add
(&
st
(i),
FPU_gettagi
(i), i,
control_word
);
68
}
69
70
void
fmul_i
(
void
)
71
{
72
/* fmul st(i),st */
73
clear_C1
();
74
FPU_mul
(&
st
(0),
FPU_gettag0
(),
FPU_rm
,
control_word
);
75
}
76
77
void
fsubri
(
void
)
78
{
79
/* fsubr st(i),st */
80
clear_C1
();
81
FPU_sub
(
DEST_RM
,
FPU_rm
,
control_word
);
82
}
83
84
void
fsub_i
(
void
)
85
{
86
/* fsub st(i),st */
87
clear_C1
();
88
FPU_sub
(
REV
|
DEST_RM
,
FPU_rm
,
control_word
);
89
}
90
91
void
fdivri
(
void
)
92
{
93
/* fdivr st(i),st */
94
clear_C1
();
95
FPU_div
(
DEST_RM
,
FPU_rm
,
control_word
);
96
}
97
98
void
fdiv_i
(
void
)
99
{
100
/* fdiv st(i),st */
101
clear_C1
();
102
FPU_div
(
REV
|
DEST_RM
,
FPU_rm
,
control_word
);
103
}
104
105
void
faddp_
(
void
)
106
{
107
/* faddp st(i),st */
108
int
i
=
FPU_rm
;
109
clear_C1
();
110
if
(
FPU_add
(&
st
(i),
FPU_gettagi
(i), i,
control_word
) >= 0)
111
FPU_pop
();
112
}
113
114
void
fmulp_
(
void
)
115
{
116
/* fmulp st(i),st */
117
clear_C1
();
118
if
(
FPU_mul
(&
st
(0),
FPU_gettag0
(),
FPU_rm
,
control_word
) >= 0)
119
FPU_pop
();
120
}
121
122
void
fsubrp
(
void
)
123
{
124
/* fsubrp st(i),st */
125
clear_C1
();
126
if
(
FPU_sub
(
DEST_RM
,
FPU_rm
,
control_word
) >= 0)
127
FPU_pop
();
128
}
129
130
void
fsubp_
(
void
)
131
{
132
/* fsubp st(i),st */
133
clear_C1
();
134
if
(
FPU_sub
(
REV
|
DEST_RM
,
FPU_rm
,
control_word
) >= 0)
135
FPU_pop
();
136
}
137
138
void
fdivrp
(
void
)
139
{
140
/* fdivrp st(i),st */
141
clear_C1
();
142
if
(
FPU_div
(
DEST_RM
,
FPU_rm
,
control_word
) >= 0)
143
FPU_pop
();
144
}
145
146
void
fdivp_
(
void
)
147
{
148
/* fdivp st(i),st */
149
clear_C1
();
150
if
(
FPU_div
(
REV
|
DEST_RM
,
FPU_rm
,
control_word
) >= 0)
151
FPU_pop
();
152
}
Generated on Thu Jan 10 2013 13:21:24 for Linux Kernel by
1.8.2