Revision d9bdab86 target-sparc/op.c
b/target-sparc/op.c | ||
---|---|---|
195 | 195 |
env->y = res >> 32; |
196 | 196 |
} |
197 | 197 |
|
198 |
void OPPROTO op_mulscc_T1_T0(void) |
|
199 |
{ |
|
200 |
unsigned int b1, N, V, b2; |
|
201 |
target_ulong src1; |
|
202 |
|
|
203 |
N = FLAG_SET(PSR_NEG); |
|
204 |
V = FLAG_SET(PSR_OVF); |
|
205 |
b1 = N ^ V; |
|
206 |
b2 = T0 & 1; |
|
207 |
T0 = (b1 << 31) | (T0 >> 1); |
|
208 |
if (!(env->y & 1)) |
|
209 |
T1 = 0; |
|
210 |
/* do addition and update flags */ |
|
211 |
src1 = T0; |
|
212 |
T0 += T1; |
|
213 |
env->psr = 0; |
|
214 |
if (!T0) |
|
215 |
env->psr |= PSR_ZERO; |
|
216 |
if ((int32_t) T0 < 0) |
|
217 |
env->psr |= PSR_NEG; |
|
218 |
if (T0 < src1) |
|
219 |
env->psr |= PSR_CARRY; |
|
220 |
if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31)) |
|
221 |
env->psr |= PSR_OVF; |
|
222 |
env->y = (b2 << 31) | (env->y >> 1); |
|
223 |
FORCE_RET(); |
|
224 |
} |
|
225 |
|
|
226 | 198 |
void OPPROTO op_udiv_T1_T0(void) |
227 | 199 |
{ |
228 | 200 |
uint64_t x0; |
Also available in: Unified diff