Commit 90251fb96e9feba205ee4867cbfe21e0142ad341

Authored by blueswir1
1 parent cb33da57

Fix taddcctv and tsubcctv (David Matthews)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3379 c046a42c-6fe2-441c-8c8c-71466251a162
target-sparc/op.c
@@ -534,7 +534,7 @@ void OPPROTO op_tadd_T1_T0_ccTV(void) @@ -534,7 +534,7 @@ void OPPROTO op_tadd_T1_T0_ccTV(void)
534 ((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31)) 534 ((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31))
535 raise_exception(TT_TOVF); 535 raise_exception(TT_TOVF);
536 #else 536 #else
537 - if ((src1 & 0x03) || (T1 & 0x03)) 537 + if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
538 raise_exception(TT_TOVF); 538 raise_exception(TT_TOVF);
539 #endif 539 #endif
540 540
target-sparc/translate.c
@@ -2027,10 +2027,12 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2027,10 +2027,12 @@ static void disas_sparc_insn(DisasContext * dc)
2027 gen_movl_T0_reg(rd); 2027 gen_movl_T0_reg(rd);
2028 break; 2028 break;
2029 case 0x22: /* taddcctv */ 2029 case 0x22: /* taddcctv */
  2030 + save_state(dc);
2030 gen_op_tadd_T1_T0_ccTV(); 2031 gen_op_tadd_T1_T0_ccTV();
2031 gen_movl_T0_reg(rd); 2032 gen_movl_T0_reg(rd);
2032 break; 2033 break;
2033 case 0x23: /* tsubcctv */ 2034 case 0x23: /* tsubcctv */
  2035 + save_state(dc);
2034 gen_op_tsub_T1_T0_ccTV(); 2036 gen_op_tsub_T1_T0_ccTV();
2035 gen_movl_T0_reg(rd); 2037 gen_movl_T0_reg(rd);
2036 break; 2038 break;