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