converted INTO/CMPXCHG8B to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4510 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									9d0763c4c0
								
							
						
					
					
						commit
						07be379fb1
					
				@ -1849,6 +1849,15 @@ void helper_das(void)
 | 
				
			|||||||
    FORCE_RET();
 | 
					    FORCE_RET();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void helper_into(int next_eip_addend)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int eflags;
 | 
				
			||||||
 | 
					    eflags = cc_table[CC_OP].compute_all();
 | 
				
			||||||
 | 
					    if (eflags & CC_O) {
 | 
				
			||||||
 | 
					        raise_interrupt(EXCP04_INTO, 1, 0, next_eip_addend);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void helper_cmpxchg8b(target_ulong a0)
 | 
					void helper_cmpxchg8b(target_ulong a0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint64_t d;
 | 
					    uint64_t d;
 | 
				
			||||||
 | 
				
			|||||||
@ -71,6 +71,7 @@ void helper_reset_inhibit_irq(void);
 | 
				
			|||||||
void helper_boundw(target_ulong a0, int v);
 | 
					void helper_boundw(target_ulong a0, int v);
 | 
				
			||||||
void helper_boundl(target_ulong a0, int v);
 | 
					void helper_boundl(target_ulong a0, int v);
 | 
				
			||||||
void helper_rsm(void);
 | 
					void helper_rsm(void);
 | 
				
			||||||
 | 
					void helper_into(int next_eip_addend);
 | 
				
			||||||
void helper_cmpxchg8b(target_ulong a0);
 | 
					void helper_cmpxchg8b(target_ulong a0);
 | 
				
			||||||
void helper_single_step(void);
 | 
					void helper_single_step(void);
 | 
				
			||||||
void helper_cpuid(void);
 | 
					void helper_cpuid(void);
 | 
				
			||||||
 | 
				
			|||||||
@ -123,24 +123,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* constant load & misc op */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* XXX: consistent names */
 | 
					 | 
				
			||||||
void OPPROTO op_into(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    int eflags;
 | 
					 | 
				
			||||||
    eflags = cc_table[CC_OP].compute_all();
 | 
					 | 
				
			||||||
    if (eflags & CC_O) {
 | 
					 | 
				
			||||||
        raise_interrupt(EXCP04_INTO, 1, 0, PARAM1);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    FORCE_RET();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void OPPROTO op_cmpxchg8b(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    helper_cmpxchg8b(A0);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* multiple size ops */
 | 
					/* multiple size ops */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ldul ldl
 | 
					#define ldul ldl
 | 
				
			||||||
 | 
				
			|||||||
@ -4308,7 +4308,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
 | 
				
			|||||||
        if (s->cc_op != CC_OP_DYNAMIC)
 | 
					        if (s->cc_op != CC_OP_DYNAMIC)
 | 
				
			||||||
            gen_op_set_cc_op(s->cc_op);
 | 
					            gen_op_set_cc_op(s->cc_op);
 | 
				
			||||||
        gen_lea_modrm(s, modrm, ®_addr, &offset_addr);
 | 
					        gen_lea_modrm(s, modrm, ®_addr, &offset_addr);
 | 
				
			||||||
        gen_op_cmpxchg8b();
 | 
					        tcg_gen_helper_0_1(helper_cmpxchg8b, cpu_A0);
 | 
				
			||||||
        s->cc_op = CC_OP_EFLAGS;
 | 
					        s->cc_op = CC_OP_EFLAGS;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -6016,7 +6016,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
 | 
				
			|||||||
        if (s->cc_op != CC_OP_DYNAMIC)
 | 
					        if (s->cc_op != CC_OP_DYNAMIC)
 | 
				
			||||||
            gen_op_set_cc_op(s->cc_op);
 | 
					            gen_op_set_cc_op(s->cc_op);
 | 
				
			||||||
        gen_jmp_im(pc_start - s->cs_base);
 | 
					        gen_jmp_im(pc_start - s->cs_base);
 | 
				
			||||||
        gen_op_into(s->pc - pc_start);
 | 
					        tcg_gen_helper_0_1(helper_into, tcg_const_i32(s->pc - pc_start));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case 0xf1: /* icebp (undocumented, exits to external debugger) */
 | 
					    case 0xf1: /* icebp (undocumented, exits to external debugger) */
 | 
				
			||||||
        if (gen_svm_check_intercept(s, pc_start, SVM_EXIT_ICEBP))
 | 
					        if (gen_svm_check_intercept(s, pc_start, SVM_EXIT_ICEBP))
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user