Revision b854608e target-sparc/op.c
b/target-sparc/op.c | ||
---|---|---|
415 | 415 |
void OPPROTO op_addx_T1_T0_cc(void) |
416 | 416 |
{ |
417 | 417 |
target_ulong src1; |
418 |
|
|
419 | 418 |
src1 = T0; |
420 |
T0 += T1 + FLAG_SET(PSR_CARRY); |
|
421 |
env->psr = 0; |
|
419 |
if (FLAG_SET(PSR_CARRY)) |
|
420 |
{ |
|
421 |
T0 += T1 + 1; |
|
422 |
env->psr = 0; |
|
423 |
#ifdef TARGET_SPARC64 |
|
424 |
if ((T0 & 0xffffffff) <= (src1 & 0xffffffff)) |
|
425 |
env->psr |= PSR_CARRY; |
|
426 |
env->xcc = 0; |
|
427 |
if (T0 <= src1) |
|
428 |
env->xcc |= PSR_CARRY; |
|
429 |
#else |
|
430 |
if (T0 <= src1) |
|
431 |
env->psr |= PSR_CARRY; |
|
432 |
#endif |
|
433 |
} |
|
434 |
else |
|
435 |
{ |
|
436 |
T0 += T1; |
|
437 |
env->psr = 0; |
|
438 |
#ifdef TARGET_SPARC64 |
|
439 |
if ((T0 & 0xffffffff) < (src1 & 0xffffffff)) |
|
440 |
env->psr |= PSR_CARRY; |
|
441 |
env->xcc = 0; |
|
442 |
if (T0 < src1) |
|
443 |
env->xcc |= PSR_CARRY; |
|
444 |
#else |
|
445 |
if (T0 < src1) |
|
446 |
env->psr |= PSR_CARRY; |
|
447 |
#endif |
|
448 |
} |
|
422 | 449 |
#ifdef TARGET_SPARC64 |
423 | 450 |
if (!(T0 & 0xffffffff)) |
424 | 451 |
env->psr |= PSR_ZERO; |
425 | 452 |
if ((int32_t) T0 < 0) |
426 | 453 |
env->psr |= PSR_NEG; |
427 |
if ((T0 & 0xffffffff) < (src1 & 0xffffffff)) |
|
428 |
env->psr |= PSR_CARRY; |
|
429 | 454 |
if ((((src1 & 0xffffffff) ^ (T1 & 0xffffffff) ^ -1) & |
430 | 455 |
((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31)) |
431 | 456 |
env->psr |= PSR_OVF; |
432 | 457 |
|
433 |
env->xcc = 0; |
|
434 | 458 |
if (!T0) |
435 | 459 |
env->xcc |= PSR_ZERO; |
436 | 460 |
if ((int64_t) T0 < 0) |
437 | 461 |
env->xcc |= PSR_NEG; |
438 |
if (T0 < src1) |
|
439 |
env->xcc |= PSR_CARRY; |
|
440 | 462 |
if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1ULL << 63)) |
441 | 463 |
env->xcc |= PSR_OVF; |
442 | 464 |
#else |
... | ... | |
444 | 466 |
env->psr |= PSR_ZERO; |
445 | 467 |
if ((int32_t) T0 < 0) |
446 | 468 |
env->psr |= PSR_NEG; |
447 |
if (T0 < src1) |
|
448 |
env->psr |= PSR_CARRY; |
|
449 | 469 |
if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31)) |
450 | 470 |
env->psr |= PSR_OVF; |
451 | 471 |
#endif |
... | ... | |
505 | 525 |
void OPPROTO op_subx_T1_T0_cc(void) |
506 | 526 |
{ |
507 | 527 |
target_ulong src1; |
508 |
|
|
509 | 528 |
src1 = T0; |
510 |
T0 -= T1 + FLAG_SET(PSR_CARRY); |
|
511 |
env->psr = 0; |
|
529 |
if (FLAG_SET(PSR_CARRY)) |
|
530 |
{ |
|
531 |
T0 -= T1 + 1; |
|
532 |
env->psr = 0; |
|
533 |
#ifdef TARGET_SPARC64 |
|
534 |
if ((src1 & 0xffffffff) <= (T1 & 0xffffffff)) |
|
535 |
env->psr |= PSR_CARRY; |
|
536 |
env->xcc = 0; |
|
537 |
if (src1 <= T1) |
|
538 |
env->xcc |= PSR_CARRY; |
|
539 |
#else |
|
540 |
if (src1 <= T1) |
|
541 |
env->psr |= PSR_CARRY; |
|
542 |
#endif |
|
543 |
} |
|
544 |
else |
|
545 |
{ |
|
546 |
T0 -= T1; |
|
547 |
env->psr = 0; |
|
548 |
#ifdef TARGET_SPARC64 |
|
549 |
if ((src1 & 0xffffffff) < (T1 & 0xffffffff)) |
|
550 |
env->psr |= PSR_CARRY; |
|
551 |
env->xcc = 0; |
|
552 |
if (src1 < T1) |
|
553 |
env->xcc |= PSR_CARRY; |
|
554 |
#else |
|
555 |
if (src1 < T1) |
|
556 |
env->psr |= PSR_CARRY; |
|
557 |
#endif |
|
558 |
} |
|
512 | 559 |
#ifdef TARGET_SPARC64 |
513 | 560 |
if (!(T0 & 0xffffffff)) |
514 | 561 |
env->psr |= PSR_ZERO; |
515 | 562 |
if ((int32_t) T0 < 0) |
516 | 563 |
env->psr |= PSR_NEG; |
517 |
if ((src1 & 0xffffffff) < (T1 & 0xffffffff)) |
|
518 |
env->psr |= PSR_CARRY; |
|
519 | 564 |
if ((((src1 & 0xffffffff) ^ (T1 & 0xffffffff)) & |
520 | 565 |
((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31)) |
521 | 566 |
env->psr |= PSR_OVF; |
522 | 567 |
|
523 |
env->xcc = 0; |
|
524 | 568 |
if (!T0) |
525 | 569 |
env->xcc |= PSR_ZERO; |
526 | 570 |
if ((int64_t) T0 < 0) |
527 | 571 |
env->xcc |= PSR_NEG; |
528 |
if (src1 < T1) |
|
529 |
env->xcc |= PSR_CARRY; |
|
530 | 572 |
if (((src1 ^ T1) & (src1 ^ T0)) & (1ULL << 63)) |
531 | 573 |
env->xcc |= PSR_OVF; |
532 | 574 |
#else |
... | ... | |
534 | 576 |
env->psr |= PSR_ZERO; |
535 | 577 |
if ((int32_t) T0 < 0) |
536 | 578 |
env->psr |= PSR_NEG; |
537 |
if (src1 < T1) |
|
538 |
env->psr |= PSR_CARRY; |
|
539 | 579 |
if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31)) |
540 | 580 |
env->psr |= PSR_OVF; |
541 | 581 |
#endif |
Also available in: Unified diff