Commit 0b9dc5e4c3b96a1e41ab7d660ba2ee2a83380e09

Authored by bellard
1 parent 194884dd

loop insn fix for non x86 hosts


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1305 c046a42c-6fe2-441c-8c8c-71466251a162
target-i386/op.c
@@ -1366,6 +1366,11 @@ void OPPROTO op_set_cc_op(void) @@ -1366,6 +1366,11 @@ void OPPROTO op_set_cc_op(void)
1366 CC_OP = PARAM1; 1366 CC_OP = PARAM1;
1367 } 1367 }
1368 1368
  1369 +void OPPROTO op_mov_T0_cc(void)
  1370 +{
  1371 + T0 = cc_table[CC_OP].compute_all();
  1372 +}
  1373 +
1369 /* XXX: clear VIF/VIP in all ops ? */ 1374 /* XXX: clear VIF/VIP in all ops ? */
1370 1375
1371 void OPPROTO op_movl_eflags_T0(void) 1376 void OPPROTO op_movl_eflags_T0(void)
target-i386/ops_template.h
@@ -339,18 +339,14 @@ void OPPROTO glue(op_jle_sub, SUFFIX)(void) @@ -339,18 +339,14 @@ void OPPROTO glue(op_jle_sub, SUFFIX)(void)
339 339
340 void OPPROTO glue(op_loopnz, SUFFIX)(void) 340 void OPPROTO glue(op_loopnz, SUFFIX)(void)
341 { 341 {
342 - int eflags;  
343 - eflags = cc_table[CC_OP].compute_all();  
344 - if ((DATA_TYPE)ECX != 0 && !(eflags & CC_Z)) 342 + if ((DATA_TYPE)ECX != 0 && !(T0 & CC_Z))
345 GOTO_LABEL_PARAM(1); 343 GOTO_LABEL_PARAM(1);
346 FORCE_RET(); 344 FORCE_RET();
347 } 345 }
348 346
349 void OPPROTO glue(op_loopz, SUFFIX)(void) 347 void OPPROTO glue(op_loopz, SUFFIX)(void)
350 { 348 {
351 - int eflags;  
352 - eflags = cc_table[CC_OP].compute_all();  
353 - if ((DATA_TYPE)ECX != 0 && (eflags & CC_Z)) 349 + if ((DATA_TYPE)ECX != 0 && (T0 & CC_Z))
354 GOTO_LABEL_PARAM(1); 350 GOTO_LABEL_PARAM(1);
355 FORCE_RET(); 351 FORCE_RET();
356 } 352 }
target-i386/translate.c
@@ -5271,6 +5271,8 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) @@ -5271,6 +5271,8 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
5271 gen_op_jz_ecx[s->aflag](l1); 5271 gen_op_jz_ecx[s->aflag](l1);
5272 } else { 5272 } else {
5273 gen_op_dec_ECX[s->aflag](); 5273 gen_op_dec_ECX[s->aflag]();
  5274 + if (b <= 1)
  5275 + gen_op_mov_T0_cc();
5274 gen_op_loop[s->aflag][b](l1); 5276 gen_op_loop[s->aflag][b](l1);
5275 } 5277 }
5276 5278