Revision 966439a6
b/target-ppc/op.c | ||
---|---|---|
131 | 131 |
/* set_Rc0 */ |
132 | 132 |
void OPPROTO op_set_Rc0 (void) |
133 | 133 |
{ |
134 |
env->crf[0] = T0 | xer_ov;
|
|
134 |
env->crf[0] = T0 | xer_so;
|
|
135 | 135 |
RETURN(); |
136 | 136 |
} |
137 | 137 |
|
... | ... | |
731 | 731 |
((uint32_t)T2 ^ (uint32_t)T0) & (1UL << 31)))) { |
732 | 732 |
xer_ov = 0; |
733 | 733 |
} else { |
734 |
xer_so = 1; |
|
735 | 734 |
xer_ov = 1; |
735 |
xer_so = 1; |
|
736 | 736 |
} |
737 | 737 |
RETURN(); |
738 | 738 |
} |
... | ... | |
744 | 744 |
((uint64_t)T2 ^ (uint64_t)T0) & (1ULL << 63)))) { |
745 | 745 |
xer_ov = 0; |
746 | 746 |
} else { |
747 |
xer_so = 1; |
|
748 | 747 |
xer_ov = 1; |
748 |
xer_so = 1; |
|
749 | 749 |
} |
750 | 750 |
RETURN(); |
751 | 751 |
} |
... | ... | |
1028 | 1028 |
((uint32_t)(~T2) ^ (uint32_t)T0) & (1UL << 31)))) { |
1029 | 1029 |
xer_ov = 0; |
1030 | 1030 |
} else { |
1031 |
xer_so = 1; |
|
1032 | 1031 |
xer_ov = 1; |
1032 |
xer_so = 1; |
|
1033 | 1033 |
} |
1034 | 1034 |
RETURN(); |
1035 | 1035 |
} |
... | ... | |
1041 | 1041 |
((uint64_t)(~T2) ^ (uint64_t)T0) & (1ULL << 63)))) { |
1042 | 1042 |
xer_ov = 0; |
1043 | 1043 |
} else { |
1044 |
xer_so = 1; |
|
1045 | 1044 |
xer_ov = 1; |
1045 |
xer_so = 1; |
|
1046 | 1046 |
} |
1047 | 1047 |
RETURN(); |
1048 | 1048 |
} |
... | ... | |
1196 | 1196 |
} else { |
1197 | 1197 |
T0 = 0x02; |
1198 | 1198 |
} |
1199 |
T0 |= xer_so; |
|
1199 | 1200 |
RETURN(); |
1200 | 1201 |
} |
1201 | 1202 |
|
... | ... | |
1209 | 1210 |
} else { |
1210 | 1211 |
T0 = 0x02; |
1211 | 1212 |
} |
1213 |
T0 |= xer_so; |
|
1212 | 1214 |
RETURN(); |
1213 | 1215 |
} |
1214 | 1216 |
#endif |
... | ... | |
1223 | 1225 |
} else { |
1224 | 1226 |
T0 = 0x02; |
1225 | 1227 |
} |
1228 |
T0 |= xer_so; |
|
1226 | 1229 |
RETURN(); |
1227 | 1230 |
} |
1228 | 1231 |
|
... | ... | |
1236 | 1239 |
} else { |
1237 | 1240 |
T0 = 0x02; |
1238 | 1241 |
} |
1242 |
T0 |= xer_so; |
|
1239 | 1243 |
RETURN(); |
1240 | 1244 |
} |
1241 | 1245 |
#endif |
... | ... | |
1250 | 1254 |
} else { |
1251 | 1255 |
T0 = 0x02; |
1252 | 1256 |
} |
1257 |
T0 |= xer_so; |
|
1253 | 1258 |
RETURN(); |
1254 | 1259 |
} |
1255 | 1260 |
|
... | ... | |
1263 | 1268 |
} else { |
1264 | 1269 |
T0 = 0x02; |
1265 | 1270 |
} |
1271 |
T0 |= xer_so; |
|
1266 | 1272 |
RETURN(); |
1267 | 1273 |
} |
1268 | 1274 |
#endif |
... | ... | |
1277 | 1283 |
} else { |
1278 | 1284 |
T0 = 0x02; |
1279 | 1285 |
} |
1286 |
T0 |= xer_so; |
|
1280 | 1287 |
RETURN(); |
1281 | 1288 |
} |
1282 | 1289 |
|
... | ... | |
1290 | 1297 |
} else { |
1291 | 1298 |
T0 = 0x02; |
1292 | 1299 |
} |
1300 |
T0 |= xer_so; |
|
1293 | 1301 |
RETURN(); |
1294 | 1302 |
} |
1295 | 1303 |
#endif |
b/target-ppc/op_helper.c | ||
---|---|---|
311 | 311 |
((uint32_t)T1 ^ (uint32_t)T0) & (1UL << 31)))) { |
312 | 312 |
xer_ov = 0; |
313 | 313 |
} else { |
314 |
xer_so = 1; |
|
315 | 314 |
xer_ov = 1; |
315 |
xer_so = 1; |
|
316 | 316 |
} |
317 | 317 |
if (likely(T1 != 0)) |
318 | 318 |
xer_ca = 1; |
... | ... | |
327 | 327 |
((uint64_t)T1 ^ (uint64_t)T0) & (1ULL << 63)))) { |
328 | 328 |
xer_ov = 0; |
329 | 329 |
} else { |
330 |
xer_so = 1; |
|
331 | 330 |
xer_ov = 1; |
331 |
xer_so = 1; |
|
332 | 332 |
} |
333 | 333 |
if (likely(T1 != 0)) |
334 | 334 |
xer_ca = 1; |
... | ... | |
342 | 342 |
xer_ov = 0; |
343 | 343 |
T0 = (int32_t)T0 / (int32_t)T1; |
344 | 344 |
} else { |
345 |
xer_so = 1; |
|
346 | 345 |
xer_ov = 1; |
346 |
xer_so = 1; |
|
347 | 347 |
T0 = (-1) * ((uint32_t)T0 >> 31); |
348 | 348 |
} |
349 | 349 |
} |
... | ... | |
356 | 356 |
xer_ov = 0; |
357 | 357 |
T0 = (int64_t)T0 / (int64_t)T1; |
358 | 358 |
} else { |
359 |
xer_so = 1; |
|
360 | 359 |
xer_ov = 1; |
360 |
xer_so = 1; |
|
361 | 361 |
T0 = (-1ULL) * ((uint64_t)T0 >> 63); |
362 | 362 |
} |
363 | 363 |
} |
... | ... | |
369 | 369 |
xer_ov = 0; |
370 | 370 |
T0 = (uint32_t)T0 / (uint32_t)T1; |
371 | 371 |
} else { |
372 |
xer_so = 1; |
|
373 | 372 |
xer_ov = 1; |
373 |
xer_so = 1; |
|
374 | 374 |
T0 = 0; |
375 | 375 |
} |
376 | 376 |
} |
... | ... | |
382 | 382 |
xer_ov = 0; |
383 | 383 |
T0 = (uint64_t)T0 / (uint64_t)T1; |
384 | 384 |
} else { |
385 |
xer_so = 1; |
|
386 | 385 |
xer_ov = 1; |
386 |
xer_so = 1; |
|
387 | 387 |
T0 = 0; |
388 | 388 |
} |
389 | 389 |
} |
... | ... | |
475 | 475 |
(1UL << 31)))) { |
476 | 476 |
xer_ov = 0; |
477 | 477 |
} else { |
478 |
xer_so = 1; |
|
479 | 478 |
xer_ov = 1; |
479 |
xer_so = 1; |
|
480 | 480 |
} |
481 | 481 |
if (likely((uint32_t)T1 != UINT32_MAX)) |
482 | 482 |
xer_ca = 1; |
... | ... | |
491 | 491 |
(1ULL << 63)))) { |
492 | 492 |
xer_ov = 0; |
493 | 493 |
} else { |
494 |
xer_so = 1; |
|
495 | 494 |
xer_ov = 1; |
495 |
xer_so = 1; |
|
496 | 496 |
} |
497 | 497 |
if (likely((uint64_t)T1 != UINT64_MAX)) |
498 | 498 |
xer_ca = 1; |
... | ... | |
1073 | 1073 |
T0 = T1 - T0; |
1074 | 1074 |
if (((uint32_t)(~T2) ^ (uint32_t)T1 ^ UINT32_MAX) & |
1075 | 1075 |
((uint32_t)(~T2) ^ (uint32_t)T0) & (1UL << 31)) { |
1076 |
xer_so = 1; |
|
1077 | 1076 |
xer_ov = 1; |
1077 |
xer_so = 1; |
|
1078 | 1078 |
} else { |
1079 | 1079 |
xer_ov = 0; |
1080 | 1080 |
} |
... | ... | |
2499 | 2499 |
|
2500 | 2500 |
void do_4xx_tlbsx_ (void) |
2501 | 2501 |
{ |
2502 |
int tmp = xer_ov;
|
|
2502 |
int tmp = xer_so;
|
|
2503 | 2503 |
|
2504 | 2504 |
T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_40x_PID]); |
2505 | 2505 |
if (T0 != -1) |
b/target-ppc/op_mem.h | ||
---|---|---|
610 | 610 |
do_raise_exception(EXCP_ALIGN); |
611 | 611 |
} else { |
612 | 612 |
if (unlikely(env->reserve != (uint32_t)T0)) { |
613 |
env->crf[0] = xer_ov;
|
|
613 |
env->crf[0] = xer_so;
|
|
614 | 614 |
} else { |
615 | 615 |
glue(stl, MEMSUFFIX)((uint32_t)T0, T1); |
616 |
env->crf[0] = xer_ov | 0x02;
|
|
616 |
env->crf[0] = xer_so | 0x02;
|
|
617 | 617 |
} |
618 | 618 |
} |
619 | 619 |
env->reserve = -1; |
... | ... | |
627 | 627 |
do_raise_exception(EXCP_ALIGN); |
628 | 628 |
} else { |
629 | 629 |
if (unlikely(env->reserve != (uint64_t)T0)) { |
630 |
env->crf[0] = xer_ov;
|
|
630 |
env->crf[0] = xer_so;
|
|
631 | 631 |
} else { |
632 | 632 |
glue(stl, MEMSUFFIX)((uint64_t)T0, T1); |
633 |
env->crf[0] = xer_ov | 0x02;
|
|
633 |
env->crf[0] = xer_so | 0x02;
|
|
634 | 634 |
} |
635 | 635 |
} |
636 | 636 |
env->reserve = -1; |
... | ... | |
643 | 643 |
do_raise_exception(EXCP_ALIGN); |
644 | 644 |
} else { |
645 | 645 |
if (unlikely(env->reserve != (uint32_t)T0)) { |
646 |
env->crf[0] = xer_ov;
|
|
646 |
env->crf[0] = xer_so;
|
|
647 | 647 |
} else { |
648 | 648 |
glue(stq, MEMSUFFIX)((uint32_t)T0, T1); |
649 |
env->crf[0] = xer_ov | 0x02;
|
|
649 |
env->crf[0] = xer_so | 0x02;
|
|
650 | 650 |
} |
651 | 651 |
} |
652 | 652 |
env->reserve = -1; |
... | ... | |
659 | 659 |
do_raise_exception(EXCP_ALIGN); |
660 | 660 |
} else { |
661 | 661 |
if (unlikely(env->reserve != (uint64_t)T0)) { |
662 |
env->crf[0] = xer_ov;
|
|
662 |
env->crf[0] = xer_so;
|
|
663 | 663 |
} else { |
664 | 664 |
glue(stq, MEMSUFFIX)((uint64_t)T0, T1); |
665 |
env->crf[0] = xer_ov | 0x02;
|
|
665 |
env->crf[0] = xer_so | 0x02;
|
|
666 | 666 |
} |
667 | 667 |
} |
668 | 668 |
env->reserve = -1; |
... | ... | |
676 | 676 |
do_raise_exception(EXCP_ALIGN); |
677 | 677 |
} else { |
678 | 678 |
if (unlikely(env->reserve != (uint32_t)T0)) { |
679 |
env->crf[0] = xer_ov;
|
|
679 |
env->crf[0] = xer_so;
|
|
680 | 680 |
} else { |
681 | 681 |
glue(st32r, MEMSUFFIX)((uint32_t)T0, T1); |
682 |
env->crf[0] = xer_ov | 0x02;
|
|
682 |
env->crf[0] = xer_so | 0x02;
|
|
683 | 683 |
} |
684 | 684 |
} |
685 | 685 |
env->reserve = -1; |
... | ... | |
693 | 693 |
do_raise_exception(EXCP_ALIGN); |
694 | 694 |
} else { |
695 | 695 |
if (unlikely(env->reserve != (uint64_t)T0)) { |
696 |
env->crf[0] = xer_ov;
|
|
696 |
env->crf[0] = xer_so;
|
|
697 | 697 |
} else { |
698 | 698 |
glue(st32r, MEMSUFFIX)((uint64_t)T0, T1); |
699 |
env->crf[0] = xer_ov | 0x02;
|
|
699 |
env->crf[0] = xer_so | 0x02;
|
|
700 | 700 |
} |
701 | 701 |
} |
702 | 702 |
env->reserve = -1; |
... | ... | |
709 | 709 |
do_raise_exception(EXCP_ALIGN); |
710 | 710 |
} else { |
711 | 711 |
if (unlikely(env->reserve != (uint32_t)T0)) { |
712 |
env->crf[0] = xer_ov;
|
|
712 |
env->crf[0] = xer_so;
|
|
713 | 713 |
} else { |
714 | 714 |
glue(st64r, MEMSUFFIX)((uint32_t)T0, T1); |
715 |
env->crf[0] = xer_ov | 0x02;
|
|
715 |
env->crf[0] = xer_so | 0x02;
|
|
716 | 716 |
} |
717 | 717 |
} |
718 | 718 |
env->reserve = -1; |
... | ... | |
725 | 725 |
do_raise_exception(EXCP_ALIGN); |
726 | 726 |
} else { |
727 | 727 |
if (unlikely(env->reserve != (uint64_t)T0)) { |
728 |
env->crf[0] = xer_ov;
|
|
728 |
env->crf[0] = xer_so;
|
|
729 | 729 |
} else { |
730 | 730 |
glue(st64r, MEMSUFFIX)((uint64_t)T0, T1); |
731 |
env->crf[0] = xer_ov | 0x02;
|
|
731 |
env->crf[0] = xer_so | 0x02;
|
|
732 | 732 |
} |
733 | 733 |
} |
734 | 734 |
env->reserve = -1; |
b/target-ppc/translate.c | ||
---|---|---|
802 | 802 |
else |
803 | 803 |
#endif |
804 | 804 |
gen_op_check_addc(); |
805 |
} else { |
|
806 |
gen_op_clear_xer_ca(); |
|
805 | 807 |
} |
806 | 808 |
gen_op_store_T0_gpr(rD(ctx->opcode)); |
807 | 809 |
gen_set_Rc0(ctx); |
Also available in: Unified diff