diff options
Diffstat (limited to 'arch/x86/math-emu/fpu_arith.c')
-rw-r--r-- | arch/x86/math-emu/fpu_arith.c | 150 |
1 files changed, 64 insertions, 86 deletions
diff --git a/arch/x86/math-emu/fpu_arith.c b/arch/x86/math-emu/fpu_arith.c index 6972dec01af6..aeab24e083c4 100644 --- a/arch/x86/math-emu/fpu_arith.c +++ b/arch/x86/math-emu/fpu_arith.c | |||
@@ -15,160 +15,138 @@ | |||
15 | #include "control_w.h" | 15 | #include "control_w.h" |
16 | #include "status_w.h" | 16 | #include "status_w.h" |
17 | 17 | ||
18 | |||
19 | void fadd__(void) | 18 | void fadd__(void) |
20 | { | 19 | { |
21 | /* fadd st,st(i) */ | 20 | /* fadd st,st(i) */ |
22 | int i = FPU_rm; | 21 | int i = FPU_rm; |
23 | clear_C1(); | 22 | clear_C1(); |
24 | FPU_add(&st(i), FPU_gettagi(i), 0, control_word); | 23 | FPU_add(&st(i), FPU_gettagi(i), 0, control_word); |
25 | } | 24 | } |
26 | 25 | ||
27 | |||
28 | void fmul__(void) | 26 | void fmul__(void) |
29 | { | 27 | { |
30 | /* fmul st,st(i) */ | 28 | /* fmul st,st(i) */ |
31 | int i = FPU_rm; | 29 | int i = FPU_rm; |
32 | clear_C1(); | 30 | clear_C1(); |
33 | FPU_mul(&st(i), FPU_gettagi(i), 0, control_word); | 31 | FPU_mul(&st(i), FPU_gettagi(i), 0, control_word); |
34 | } | 32 | } |
35 | 33 | ||
36 | |||
37 | |||
38 | void fsub__(void) | 34 | void fsub__(void) |
39 | { | 35 | { |
40 | /* fsub st,st(i) */ | 36 | /* fsub st,st(i) */ |
41 | clear_C1(); | 37 | clear_C1(); |
42 | FPU_sub(0, FPU_rm, control_word); | 38 | FPU_sub(0, FPU_rm, control_word); |
43 | } | 39 | } |
44 | 40 | ||
45 | |||
46 | void fsubr_(void) | 41 | void fsubr_(void) |
47 | { | 42 | { |
48 | /* fsubr st,st(i) */ | 43 | /* fsubr st,st(i) */ |
49 | clear_C1(); | 44 | clear_C1(); |
50 | FPU_sub(REV, FPU_rm, control_word); | 45 | FPU_sub(REV, FPU_rm, control_word); |
51 | } | 46 | } |
52 | 47 | ||
53 | |||
54 | void fdiv__(void) | 48 | void fdiv__(void) |
55 | { | 49 | { |
56 | /* fdiv st,st(i) */ | 50 | /* fdiv st,st(i) */ |
57 | clear_C1(); | 51 | clear_C1(); |
58 | FPU_div(0, FPU_rm, control_word); | 52 | FPU_div(0, FPU_rm, control_word); |
59 | } | 53 | } |
60 | 54 | ||
61 | |||
62 | void fdivr_(void) | 55 | void fdivr_(void) |
63 | { | 56 | { |
64 | /* fdivr st,st(i) */ | 57 | /* fdivr st,st(i) */ |
65 | clear_C1(); | 58 | clear_C1(); |
66 | FPU_div(REV, FPU_rm, control_word); | 59 | FPU_div(REV, FPU_rm, control_word); |
67 | } | 60 | } |
68 | 61 | ||
69 | |||
70 | |||
71 | void fadd_i(void) | 62 | void fadd_i(void) |
72 | { | 63 | { |
73 | /* fadd st(i),st */ | 64 | /* fadd st(i),st */ |
74 | int i = FPU_rm; | 65 | int i = FPU_rm; |
75 | clear_C1(); | 66 | clear_C1(); |
76 | FPU_add(&st(i), FPU_gettagi(i), i, control_word); | 67 | FPU_add(&st(i), FPU_gettagi(i), i, control_word); |
77 | } | 68 | } |
78 | 69 | ||
79 | |||
80 | void fmul_i(void) | 70 | void fmul_i(void) |
81 | { | 71 | { |
82 | /* fmul st(i),st */ | 72 | /* fmul st(i),st */ |
83 | clear_C1(); | 73 | clear_C1(); |
84 | FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word); | 74 | FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word); |
85 | } | 75 | } |
86 | 76 | ||
87 | |||
88 | void fsubri(void) | 77 | void fsubri(void) |
89 | { | 78 | { |
90 | /* fsubr st(i),st */ | 79 | /* fsubr st(i),st */ |
91 | clear_C1(); | 80 | clear_C1(); |
92 | FPU_sub(DEST_RM, FPU_rm, control_word); | 81 | FPU_sub(DEST_RM, FPU_rm, control_word); |
93 | } | 82 | } |
94 | 83 | ||
95 | |||
96 | void fsub_i(void) | 84 | void fsub_i(void) |
97 | { | 85 | { |
98 | /* fsub st(i),st */ | 86 | /* fsub st(i),st */ |
99 | clear_C1(); | 87 | clear_C1(); |
100 | FPU_sub(REV|DEST_RM, FPU_rm, control_word); | 88 | FPU_sub(REV | DEST_RM, FPU_rm, control_word); |
101 | } | 89 | } |
102 | 90 | ||
103 | |||
104 | void fdivri(void) | 91 | void fdivri(void) |
105 | { | 92 | { |
106 | /* fdivr st(i),st */ | 93 | /* fdivr st(i),st */ |
107 | clear_C1(); | 94 | clear_C1(); |
108 | FPU_div(DEST_RM, FPU_rm, control_word); | 95 | FPU_div(DEST_RM, FPU_rm, control_word); |
109 | } | 96 | } |
110 | 97 | ||
111 | |||
112 | void fdiv_i(void) | 98 | void fdiv_i(void) |
113 | { | 99 | { |
114 | /* fdiv st(i),st */ | 100 | /* fdiv st(i),st */ |
115 | clear_C1(); | 101 | clear_C1(); |
116 | FPU_div(REV|DEST_RM, FPU_rm, control_word); | 102 | FPU_div(REV | DEST_RM, FPU_rm, control_word); |
117 | } | 103 | } |
118 | 104 | ||
119 | |||
120 | |||
121 | void faddp_(void) | 105 | void faddp_(void) |
122 | { | 106 | { |
123 | /* faddp st(i),st */ | 107 | /* faddp st(i),st */ |
124 | int i = FPU_rm; | 108 | int i = FPU_rm; |
125 | clear_C1(); | 109 | clear_C1(); |
126 | if ( FPU_add(&st(i), FPU_gettagi(i), i, control_word) >= 0 ) | 110 | if (FPU_add(&st(i), FPU_gettagi(i), i, control_word) >= 0) |
127 | FPU_pop(); | 111 | FPU_pop(); |
128 | } | 112 | } |
129 | 113 | ||
130 | |||
131 | void fmulp_(void) | 114 | void fmulp_(void) |
132 | { | 115 | { |
133 | /* fmulp st(i),st */ | 116 | /* fmulp st(i),st */ |
134 | clear_C1(); | 117 | clear_C1(); |
135 | if ( FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word) >= 0 ) | 118 | if (FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word) >= 0) |
136 | FPU_pop(); | 119 | FPU_pop(); |
137 | } | 120 | } |
138 | 121 | ||
139 | |||
140 | |||
141 | void fsubrp(void) | 122 | void fsubrp(void) |
142 | { | 123 | { |
143 | /* fsubrp st(i),st */ | 124 | /* fsubrp st(i),st */ |
144 | clear_C1(); | 125 | clear_C1(); |
145 | if ( FPU_sub(DEST_RM, FPU_rm, control_word) >= 0 ) | 126 | if (FPU_sub(DEST_RM, FPU_rm, control_word) >= 0) |
146 | FPU_pop(); | 127 | FPU_pop(); |
147 | } | 128 | } |
148 | 129 | ||
149 | |||
150 | void fsubp_(void) | 130 | void fsubp_(void) |
151 | { | 131 | { |
152 | /* fsubp st(i),st */ | 132 | /* fsubp st(i),st */ |
153 | clear_C1(); | 133 | clear_C1(); |
154 | if ( FPU_sub(REV|DEST_RM, FPU_rm, control_word) >= 0 ) | 134 | if (FPU_sub(REV | DEST_RM, FPU_rm, control_word) >= 0) |
155 | FPU_pop(); | 135 | FPU_pop(); |
156 | } | 136 | } |
157 | 137 | ||
158 | |||
159 | void fdivrp(void) | 138 | void fdivrp(void) |
160 | { | 139 | { |
161 | /* fdivrp st(i),st */ | 140 | /* fdivrp st(i),st */ |
162 | clear_C1(); | 141 | clear_C1(); |
163 | if ( FPU_div(DEST_RM, FPU_rm, control_word) >= 0 ) | 142 | if (FPU_div(DEST_RM, FPU_rm, control_word) >= 0) |
164 | FPU_pop(); | 143 | FPU_pop(); |
165 | } | 144 | } |
166 | 145 | ||
167 | |||
168 | void fdivp_(void) | 146 | void fdivp_(void) |
169 | { | 147 | { |
170 | /* fdivp st(i),st */ | 148 | /* fdivp st(i),st */ |
171 | clear_C1(); | 149 | clear_C1(); |
172 | if ( FPU_div(REV|DEST_RM, FPU_rm, control_word) >= 0 ) | 150 | if (FPU_div(REV | DEST_RM, FPU_rm, control_word) >= 0) |
173 | FPU_pop(); | 151 | FPU_pop(); |
174 | } | 152 | } |