Commit bbf662ee31cbd2dcd4fa7f469ad7e16f78e1acfa

Authored by bellard
1 parent 7d03f82f

MONITOR insn address generation fix - converted XLAT to TCG

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4479 c046a42c-6fe2-441c-8c8c-71466251a162
target-i386/op.c
@@ -224,30 +224,6 @@ void OPPROTO op_imulq_T0_T1(void) @@ -224,30 +224,6 @@ void OPPROTO op_imulq_T0_T1(void)
224 /* constant load & misc op */ 224 /* constant load & misc op */
225 225
226 /* XXX: consistent names */ 226 /* XXX: consistent names */
227 -void OPPROTO op_addl_T1_im(void)  
228 -{  
229 - T1 += PARAM1;  
230 -}  
231 -  
232 -void OPPROTO op_movl_T1_A0(void)  
233 -{  
234 - T1 = A0;  
235 -}  
236 -  
237 -void OPPROTO op_addl_A0_AL(void)  
238 -{  
239 - A0 = (uint32_t)(A0 + (EAX & 0xff));  
240 -}  
241 -  
242 -#ifdef TARGET_X86_64  
243 -  
244 -void OPPROTO op_addq_A0_AL(void)  
245 -{  
246 - A0 = (A0 + (EAX & 0xff));  
247 -}  
248 -  
249 -#endif  
250 -  
251 void OPPROTO op_into(void) 227 void OPPROTO op_into(void)
252 { 228 {
253 int eflags; 229 int eflags;
target-i386/translate.c
@@ -2352,12 +2352,12 @@ static void gen_push_T0(DisasContext *s) @@ -2352,12 +2352,12 @@ static void gen_push_T0(DisasContext *s)
2352 gen_op_addl_A0_im(-4); 2352 gen_op_addl_A0_im(-4);
2353 if (s->ss32) { 2353 if (s->ss32) {
2354 if (s->addseg) { 2354 if (s->addseg) {
2355 - gen_op_movl_T1_A0(); 2355 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
2356 gen_op_addl_A0_seg(R_SS); 2356 gen_op_addl_A0_seg(R_SS);
2357 } 2357 }
2358 } else { 2358 } else {
2359 gen_op_andl_A0_ffff(); 2359 gen_op_andl_A0_ffff();
2360 - gen_op_movl_T1_A0(); 2360 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
2361 gen_op_addl_A0_seg(R_SS); 2361 gen_op_addl_A0_seg(R_SS);
2362 } 2362 }
2363 gen_op_st_T0_A0(s->dflag + 1 + s->mem_index); 2363 gen_op_st_T0_A0(s->dflag + 1 + s->mem_index);
@@ -2447,7 +2447,7 @@ static void gen_stack_A0(DisasContext *s) @@ -2447,7 +2447,7 @@ static void gen_stack_A0(DisasContext *s)
2447 gen_op_movl_A0_reg(R_ESP); 2447 gen_op_movl_A0_reg(R_ESP);
2448 if (!s->ss32) 2448 if (!s->ss32)
2449 gen_op_andl_A0_ffff(); 2449 gen_op_andl_A0_ffff();
2450 - gen_op_movl_T1_A0(); 2450 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
2451 if (s->addseg) 2451 if (s->addseg)
2452 gen_op_addl_A0_seg(R_SS); 2452 gen_op_addl_A0_seg(R_SS);
2453 } 2453 }
@@ -2460,7 +2460,7 @@ static void gen_pusha(DisasContext *s) @@ -2460,7 +2460,7 @@ static void gen_pusha(DisasContext *s)
2460 gen_op_addl_A0_im(-16 << s->dflag); 2460 gen_op_addl_A0_im(-16 << s->dflag);
2461 if (!s->ss32) 2461 if (!s->ss32)
2462 gen_op_andl_A0_ffff(); 2462 gen_op_andl_A0_ffff();
2463 - gen_op_movl_T1_A0(); 2463 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
2464 if (s->addseg) 2464 if (s->addseg)
2465 gen_op_addl_A0_seg(R_SS); 2465 gen_op_addl_A0_seg(R_SS);
2466 for(i = 0;i < 8; i++) { 2466 for(i = 0;i < 8; i++) {
@@ -2478,8 +2478,8 @@ static void gen_popa(DisasContext *s) @@ -2478,8 +2478,8 @@ static void gen_popa(DisasContext *s)
2478 gen_op_movl_A0_reg(R_ESP); 2478 gen_op_movl_A0_reg(R_ESP);
2479 if (!s->ss32) 2479 if (!s->ss32)
2480 gen_op_andl_A0_ffff(); 2480 gen_op_andl_A0_ffff();
2481 - gen_op_movl_T1_A0();  
2482 - gen_op_addl_T1_im(16 << s->dflag); 2481 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
  2482 + tcg_gen_addi_tl(cpu_T[1], cpu_T[1], 16 << s->dflag);
2483 if (s->addseg) 2483 if (s->addseg)
2484 gen_op_addl_A0_seg(R_SS); 2484 gen_op_addl_A0_seg(R_SS);
2485 for(i = 0;i < 8; i++) { 2485 for(i = 0;i < 8; i++) {
@@ -2505,7 +2505,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level) @@ -2505,7 +2505,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level)
2505 2505
2506 gen_op_movl_A0_reg(R_ESP); 2506 gen_op_movl_A0_reg(R_ESP);
2507 gen_op_addq_A0_im(-opsize); 2507 gen_op_addq_A0_im(-opsize);
2508 - gen_op_movl_T1_A0(); 2508 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
2509 2509
2510 /* push bp */ 2510 /* push bp */
2511 gen_op_mov_TN_reg(OT_LONG, 0, R_EBP); 2511 gen_op_mov_TN_reg(OT_LONG, 0, R_EBP);
@@ -2518,7 +2518,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level) @@ -2518,7 +2518,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level)
2518 cpu_T[1]); 2518 cpu_T[1]);
2519 } 2519 }
2520 gen_op_mov_reg_T1(ot, R_EBP); 2520 gen_op_mov_reg_T1(ot, R_EBP);
2521 - gen_op_addl_T1_im( -esp_addend + (-opsize * level) ); 2521 + tcg_gen_addi_tl(cpu_T[1], cpu_T[1], -esp_addend + (-opsize * level));
2522 gen_op_mov_reg_T1(OT_QUAD, R_ESP); 2522 gen_op_mov_reg_T1(OT_QUAD, R_ESP);
2523 } else 2523 } else
2524 #endif 2524 #endif
@@ -2530,7 +2530,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level) @@ -2530,7 +2530,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level)
2530 gen_op_addl_A0_im(-opsize); 2530 gen_op_addl_A0_im(-opsize);
2531 if (!s->ss32) 2531 if (!s->ss32)
2532 gen_op_andl_A0_ffff(); 2532 gen_op_andl_A0_ffff();
2533 - gen_op_movl_T1_A0(); 2533 + tcg_gen_mov_tl(cpu_T[1], cpu_A0);
2534 if (s->addseg) 2534 if (s->addseg)
2535 gen_op_addl_A0_seg(R_SS); 2535 gen_op_addl_A0_seg(R_SS);
2536 /* push bp */ 2536 /* push bp */
@@ -2544,7 +2544,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level) @@ -2544,7 +2544,7 @@ static void gen_enter(DisasContext *s, int esp_addend, int level)
2544 cpu_T[1]); 2544 cpu_T[1]);
2545 } 2545 }
2546 gen_op_mov_reg_T1(ot, R_EBP); 2546 gen_op_mov_reg_T1(ot, R_EBP);
2547 - gen_op_addl_T1_im( -esp_addend + (-opsize * level) ); 2547 + tcg_gen_addi_tl(cpu_T[1], cpu_T[1], -esp_addend + (-opsize * level));
2548 gen_op_mov_reg_T1(OT_WORD + s->ss32, R_ESP); 2548 gen_op_mov_reg_T1(OT_WORD + s->ss32, R_ESP);
2549 } 2549 }
2550 } 2550 }
@@ -4561,14 +4561,20 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) @@ -4561,14 +4561,20 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
4561 #ifdef TARGET_X86_64 4561 #ifdef TARGET_X86_64
4562 if (s->aflag == 2) { 4562 if (s->aflag == 2) {
4563 gen_op_movq_A0_reg(R_EBX); 4563 gen_op_movq_A0_reg(R_EBX);
4564 - gen_op_addq_A0_AL(); 4564 + gen_op_mov_TN_reg(OT_QUAD, 0, R_EAX);
  4565 + tcg_gen_andi_tl(cpu_T[0], cpu_T[0], 0xff);
  4566 + tcg_gen_add_tl(cpu_A0, cpu_A0, cpu_T[0]);
4565 } else 4567 } else
4566 #endif 4568 #endif
4567 { 4569 {
4568 gen_op_movl_A0_reg(R_EBX); 4570 gen_op_movl_A0_reg(R_EBX);
4569 - gen_op_addl_A0_AL(); 4571 + gen_op_mov_TN_reg(OT_LONG, 0, R_EAX);
  4572 + tcg_gen_andi_tl(cpu_T[0], cpu_T[0], 0xff);
  4573 + tcg_gen_add_tl(cpu_A0, cpu_A0, cpu_T[0]);
4570 if (s->aflag == 0) 4574 if (s->aflag == 0)
4571 gen_op_andl_A0_ffff(); 4575 gen_op_andl_A0_ffff();
  4576 + else
  4577 + tcg_gen_andi_tl(cpu_A0, cpu_A0, 0xffffffff);
4572 } 4578 }
4573 gen_add_A0_ds_seg(s); 4579 gen_add_A0_ds_seg(s);
4574 gen_op_ldu_T0_A0(OT_BYTE + s->mem_index); 4580 gen_op_ldu_T0_A0(OT_BYTE + s->mem_index);
@@ -6285,13 +6291,11 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) @@ -6285,13 +6291,11 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
6285 gen_jmp_im(pc_start - s->cs_base); 6291 gen_jmp_im(pc_start - s->cs_base);
6286 #ifdef TARGET_X86_64 6292 #ifdef TARGET_X86_64
6287 if (s->aflag == 2) { 6293 if (s->aflag == 2) {
6288 - gen_op_movq_A0_reg(R_EBX);  
6289 - gen_op_addq_A0_AL(); 6294 + gen_op_movq_A0_reg(R_EAX);
6290 } else 6295 } else
6291 #endif 6296 #endif
6292 { 6297 {
6293 - gen_op_movl_A0_reg(R_EBX);  
6294 - gen_op_addl_A0_AL(); 6298 + gen_op_movl_A0_reg(R_EAX);
6295 if (s->aflag == 0) 6299 if (s->aflag == 0)
6296 gen_op_andl_A0_ffff(); 6300 gen_op_andl_A0_ffff();
6297 } 6301 }