Commit 1ba74fb8f14389282e1b86579a46a38b5710e193
1 parent
92e90443
target-mips: optimize gen_compute_branch()
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6936 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
48 additions
and
51 deletions
target-mips/cpu.h
| @@ -443,7 +443,7 @@ struct CPUMIPSState { | @@ -443,7 +443,7 @@ struct CPUMIPSState { | ||
| 443 | #define MIPS_HFLAG_BL 0x0C00 /* Likely branch */ | 443 | #define MIPS_HFLAG_BL 0x0C00 /* Likely branch */ |
| 444 | #define MIPS_HFLAG_BR 0x1000 /* branch to register (can't link TB) */ | 444 | #define MIPS_HFLAG_BR 0x1000 /* branch to register (can't link TB) */ |
| 445 | target_ulong btarget; /* Jump / branch target */ | 445 | target_ulong btarget; /* Jump / branch target */ |
| 446 | - int bcond; /* Branch condition (if needed) */ | 446 | + target_ulong bcond; /* Branch condition (if needed) */ |
| 447 | 447 | ||
| 448 | int SYNCI_Step; /* Address step size for SYNCI */ | 448 | int SYNCI_Step; /* Address step size for SYNCI */ |
| 449 | int CCRes; /* Cycle count resolution/divisor */ | 449 | int CCRes; /* Cycle count resolution/divisor */ |
target-mips/machine.c
| @@ -91,7 +91,8 @@ void cpu_save(QEMUFile *f, void *opaque) | @@ -91,7 +91,8 @@ void cpu_save(QEMUFile *f, void *opaque) | ||
| 91 | qemu_put_sbe32s(f, &env->error_code); | 91 | qemu_put_sbe32s(f, &env->error_code); |
| 92 | qemu_put_be32s(f, &env->hflags); | 92 | qemu_put_be32s(f, &env->hflags); |
| 93 | qemu_put_betls(f, &env->btarget); | 93 | qemu_put_betls(f, &env->btarget); |
| 94 | - qemu_put_sbe32s(f, &env->bcond); | 94 | + i = env->bcond; |
| 95 | + qemu_put_sbe32s(f, &i); | ||
| 95 | 96 | ||
| 96 | /* Save remaining CP1 registers */ | 97 | /* Save remaining CP1 registers */ |
| 97 | qemu_put_sbe32s(f, &env->CP0_Index); | 98 | qemu_put_sbe32s(f, &env->CP0_Index); |
| @@ -240,7 +241,8 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) | @@ -240,7 +241,8 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) | ||
| 240 | qemu_get_sbe32s(f, &env->error_code); | 241 | qemu_get_sbe32s(f, &env->error_code); |
| 241 | qemu_get_be32s(f, &env->hflags); | 242 | qemu_get_be32s(f, &env->hflags); |
| 242 | qemu_get_betls(f, &env->btarget); | 243 | qemu_get_betls(f, &env->btarget); |
| 243 | - qemu_get_sbe32s(f, &env->bcond); | 244 | + qemu_get_sbe32s(f, &i); |
| 245 | + env->bcond = i; | ||
| 244 | 246 | ||
| 245 | /* Load remaining CP1 registers */ | 247 | /* Load remaining CP1 registers */ |
| 246 | qemu_get_sbe32s(f, &env->CP0_Index); | 248 | qemu_get_sbe32s(f, &env->CP0_Index); |
target-mips/translate.c
| @@ -430,7 +430,7 @@ static TCGv_ptr cpu_env; | @@ -430,7 +430,7 @@ static TCGv_ptr cpu_env; | ||
| 430 | static TCGv cpu_gpr[32], cpu_PC; | 430 | static TCGv cpu_gpr[32], cpu_PC; |
| 431 | static TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC], cpu_ACX[MIPS_DSP_ACC]; | 431 | static TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC], cpu_ACX[MIPS_DSP_ACC]; |
| 432 | static TCGv cpu_dspctrl, btarget; | 432 | static TCGv cpu_dspctrl, btarget; |
| 433 | -static TCGv_i32 bcond; | 433 | +static TCGv bcond; |
| 434 | static TCGv_i32 fpu_fpr32[32], fpu_fpr32h[32]; | 434 | static TCGv_i32 fpu_fpr32[32], fpu_fpr32h[32]; |
| 435 | static TCGv_i32 fpu_fcr0, fpu_fcr31; | 435 | static TCGv_i32 fpu_fcr0, fpu_fcr31; |
| 436 | 436 | ||
| @@ -2167,7 +2167,7 @@ static void gen_trap (DisasContext *ctx, uint32_t opc, | @@ -2167,7 +2167,7 @@ static void gen_trap (DisasContext *ctx, uint32_t opc, | ||
| 2167 | { | 2167 | { |
| 2168 | int cond; | 2168 | int cond; |
| 2169 | TCGv t0 = tcg_temp_local_new(); | 2169 | TCGv t0 = tcg_temp_local_new(); |
| 2170 | - TCGv t1 = tcg_temp_local_new(); | 2170 | + TCGv t1 = tcg_temp_new(); |
| 2171 | 2171 | ||
| 2172 | cond = 0; | 2172 | cond = 0; |
| 2173 | /* Load needed operands */ | 2173 | /* Load needed operands */ |
| @@ -2290,8 +2290,8 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2290,8 +2290,8 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2290 | target_ulong btgt = -1; | 2290 | target_ulong btgt = -1; |
| 2291 | int blink = 0; | 2291 | int blink = 0; |
| 2292 | int bcond_compute = 0; | 2292 | int bcond_compute = 0; |
| 2293 | - TCGv t0 = tcg_temp_local_new(); | ||
| 2294 | - TCGv t1 = tcg_temp_local_new(); | 2293 | + TCGv t0 = tcg_temp_new(); |
| 2294 | + TCGv t1 = tcg_temp_new(); | ||
| 2295 | 2295 | ||
| 2296 | if (ctx->hflags & MIPS_HFLAG_BMASK) { | 2296 | if (ctx->hflags & MIPS_HFLAG_BMASK) { |
| 2297 | #ifdef MIPS_DEBUG_DISAS | 2297 | #ifdef MIPS_DEBUG_DISAS |
| @@ -2383,13 +2383,11 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2383,13 +2383,11 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2383 | MIPS_DEBUG("bnever (NOP)"); | 2383 | MIPS_DEBUG("bnever (NOP)"); |
| 2384 | goto out; | 2384 | goto out; |
| 2385 | case OPC_BLTZAL: /* 0 < 0 */ | 2385 | case OPC_BLTZAL: /* 0 < 0 */ |
| 2386 | - tcg_gen_movi_tl(t0, ctx->pc + 8); | ||
| 2387 | - gen_store_gpr(t0, 31); | 2386 | + tcg_gen_movi_tl(cpu_gpr[31], ctx->pc + 8); |
| 2388 | MIPS_DEBUG("bnever and link"); | 2387 | MIPS_DEBUG("bnever and link"); |
| 2389 | goto out; | 2388 | goto out; |
| 2390 | case OPC_BLTZALL: /* 0 < 0 likely */ | 2389 | case OPC_BLTZALL: /* 0 < 0 likely */ |
| 2391 | - tcg_gen_movi_tl(t0, ctx->pc + 8); | ||
| 2392 | - gen_store_gpr(t0, 31); | 2390 | + tcg_gen_movi_tl(cpu_gpr[31], ctx->pc + 8); |
| 2393 | /* Skip the instruction in the delay slot */ | 2391 | /* Skip the instruction in the delay slot */ |
| 2394 | MIPS_DEBUG("bnever, link and skip"); | 2392 | MIPS_DEBUG("bnever, link and skip"); |
| 2395 | ctx->pc += 4; | 2393 | ctx->pc += 4; |
| @@ -2427,82 +2425,80 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2427,82 +2425,80 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2427 | } else { | 2425 | } else { |
| 2428 | switch (opc) { | 2426 | switch (opc) { |
| 2429 | case OPC_BEQ: | 2427 | case OPC_BEQ: |
| 2430 | - gen_op_eq(t0, t0, t1); | 2428 | + gen_op_eq(bcond, t0, t1); |
| 2431 | MIPS_DEBUG("beq %s, %s, " TARGET_FMT_lx, | 2429 | MIPS_DEBUG("beq %s, %s, " TARGET_FMT_lx, |
| 2432 | regnames[rs], regnames[rt], btgt); | 2430 | regnames[rs], regnames[rt], btgt); |
| 2433 | goto not_likely; | 2431 | goto not_likely; |
| 2434 | case OPC_BEQL: | 2432 | case OPC_BEQL: |
| 2435 | - gen_op_eq(t0, t0, t1); | 2433 | + gen_op_eq(bcond, t0, t1); |
| 2436 | MIPS_DEBUG("beql %s, %s, " TARGET_FMT_lx, | 2434 | MIPS_DEBUG("beql %s, %s, " TARGET_FMT_lx, |
| 2437 | regnames[rs], regnames[rt], btgt); | 2435 | regnames[rs], regnames[rt], btgt); |
| 2438 | goto likely; | 2436 | goto likely; |
| 2439 | case OPC_BNE: | 2437 | case OPC_BNE: |
| 2440 | - gen_op_ne(t0, t0, t1); | 2438 | + gen_op_ne(bcond, t0, t1); |
| 2441 | MIPS_DEBUG("bne %s, %s, " TARGET_FMT_lx, | 2439 | MIPS_DEBUG("bne %s, %s, " TARGET_FMT_lx, |
| 2442 | regnames[rs], regnames[rt], btgt); | 2440 | regnames[rs], regnames[rt], btgt); |
| 2443 | goto not_likely; | 2441 | goto not_likely; |
| 2444 | case OPC_BNEL: | 2442 | case OPC_BNEL: |
| 2445 | - gen_op_ne(t0, t0, t1); | 2443 | + gen_op_ne(bcond, t0, t1); |
| 2446 | MIPS_DEBUG("bnel %s, %s, " TARGET_FMT_lx, | 2444 | MIPS_DEBUG("bnel %s, %s, " TARGET_FMT_lx, |
| 2447 | regnames[rs], regnames[rt], btgt); | 2445 | regnames[rs], regnames[rt], btgt); |
| 2448 | goto likely; | 2446 | goto likely; |
| 2449 | case OPC_BGEZ: | 2447 | case OPC_BGEZ: |
| 2450 | - gen_op_gez(t0, t0); | 2448 | + gen_op_gez(bcond, t0); |
| 2451 | MIPS_DEBUG("bgez %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2449 | MIPS_DEBUG("bgez %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2452 | goto not_likely; | 2450 | goto not_likely; |
| 2453 | case OPC_BGEZL: | 2451 | case OPC_BGEZL: |
| 2454 | - gen_op_gez(t0, t0); | 2452 | + gen_op_gez(bcond, t0); |
| 2455 | MIPS_DEBUG("bgezl %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2453 | MIPS_DEBUG("bgezl %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2456 | goto likely; | 2454 | goto likely; |
| 2457 | case OPC_BGEZAL: | 2455 | case OPC_BGEZAL: |
| 2458 | - gen_op_gez(t0, t0); | 2456 | + gen_op_gez(bcond, t0); |
| 2459 | MIPS_DEBUG("bgezal %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2457 | MIPS_DEBUG("bgezal %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2460 | blink = 31; | 2458 | blink = 31; |
| 2461 | goto not_likely; | 2459 | goto not_likely; |
| 2462 | case OPC_BGEZALL: | 2460 | case OPC_BGEZALL: |
| 2463 | - gen_op_gez(t0, t0); | 2461 | + gen_op_gez(bcond, t0); |
| 2464 | blink = 31; | 2462 | blink = 31; |
| 2465 | MIPS_DEBUG("bgezall %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2463 | MIPS_DEBUG("bgezall %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2466 | goto likely; | 2464 | goto likely; |
| 2467 | case OPC_BGTZ: | 2465 | case OPC_BGTZ: |
| 2468 | - gen_op_gtz(t0, t0); | 2466 | + gen_op_gtz(bcond, t0); |
| 2469 | MIPS_DEBUG("bgtz %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2467 | MIPS_DEBUG("bgtz %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2470 | goto not_likely; | 2468 | goto not_likely; |
| 2471 | case OPC_BGTZL: | 2469 | case OPC_BGTZL: |
| 2472 | - gen_op_gtz(t0, t0); | 2470 | + gen_op_gtz(bcond, t0); |
| 2473 | MIPS_DEBUG("bgtzl %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2471 | MIPS_DEBUG("bgtzl %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2474 | goto likely; | 2472 | goto likely; |
| 2475 | case OPC_BLEZ: | 2473 | case OPC_BLEZ: |
| 2476 | - gen_op_lez(t0, t0); | 2474 | + gen_op_lez(bcond, t0); |
| 2477 | MIPS_DEBUG("blez %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2475 | MIPS_DEBUG("blez %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2478 | goto not_likely; | 2476 | goto not_likely; |
| 2479 | case OPC_BLEZL: | 2477 | case OPC_BLEZL: |
| 2480 | - gen_op_lez(t0, t0); | 2478 | + gen_op_lez(bcond, t0); |
| 2481 | MIPS_DEBUG("blezl %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2479 | MIPS_DEBUG("blezl %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2482 | goto likely; | 2480 | goto likely; |
| 2483 | case OPC_BLTZ: | 2481 | case OPC_BLTZ: |
| 2484 | - gen_op_ltz(t0, t0); | 2482 | + gen_op_ltz(bcond, t0); |
| 2485 | MIPS_DEBUG("bltz %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2483 | MIPS_DEBUG("bltz %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2486 | goto not_likely; | 2484 | goto not_likely; |
| 2487 | case OPC_BLTZL: | 2485 | case OPC_BLTZL: |
| 2488 | - gen_op_ltz(t0, t0); | 2486 | + gen_op_ltz(bcond, t0); |
| 2489 | MIPS_DEBUG("bltzl %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2487 | MIPS_DEBUG("bltzl %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2490 | goto likely; | 2488 | goto likely; |
| 2491 | case OPC_BLTZAL: | 2489 | case OPC_BLTZAL: |
| 2492 | - gen_op_ltz(t0, t0); | 2490 | + gen_op_ltz(bcond, t0); |
| 2493 | blink = 31; | 2491 | blink = 31; |
| 2494 | MIPS_DEBUG("bltzal %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2492 | MIPS_DEBUG("bltzal %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2495 | not_likely: | 2493 | not_likely: |
| 2496 | ctx->hflags |= MIPS_HFLAG_BC; | 2494 | ctx->hflags |= MIPS_HFLAG_BC; |
| 2497 | - tcg_gen_trunc_tl_i32(bcond, t0); | ||
| 2498 | break; | 2495 | break; |
| 2499 | case OPC_BLTZALL: | 2496 | case OPC_BLTZALL: |
| 2500 | - gen_op_ltz(t0, t0); | 2497 | + gen_op_ltz(bcond, t0); |
| 2501 | blink = 31; | 2498 | blink = 31; |
| 2502 | MIPS_DEBUG("bltzall %s, " TARGET_FMT_lx, regnames[rs], btgt); | 2499 | MIPS_DEBUG("bltzall %s, " TARGET_FMT_lx, regnames[rs], btgt); |
| 2503 | likely: | 2500 | likely: |
| 2504 | ctx->hflags |= MIPS_HFLAG_BL; | 2501 | ctx->hflags |= MIPS_HFLAG_BL; |
| 2505 | - tcg_gen_trunc_tl_i32(bcond, t0); | ||
| 2506 | break; | 2502 | break; |
| 2507 | default: | 2503 | default: |
| 2508 | MIPS_INVAL("conditional branch/jump"); | 2504 | MIPS_INVAL("conditional branch/jump"); |
| @@ -2515,8 +2511,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2515,8 +2511,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2515 | 2511 | ||
| 2516 | ctx->btarget = btgt; | 2512 | ctx->btarget = btgt; |
| 2517 | if (blink > 0) { | 2513 | if (blink > 0) { |
| 2518 | - tcg_gen_movi_tl(t0, ctx->pc + 8); | ||
| 2519 | - gen_store_gpr(t0, blink); | 2514 | + tcg_gen_movi_tl(cpu_gpr[blink], ctx->pc + 8); |
| 2520 | } | 2515 | } |
| 2521 | 2516 | ||
| 2522 | out: | 2517 | out: |
| @@ -5537,10 +5532,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5537,10 +5532,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5537 | get_fp_cond(t0); | 5532 | get_fp_cond(t0); |
| 5538 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); | 5533 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); |
| 5539 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); | 5534 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); |
| 5540 | - tcg_gen_movi_i32(bcond, 0); | 5535 | + tcg_gen_movi_tl(bcond, 0); |
| 5541 | tcg_gen_br(l2); | 5536 | tcg_gen_br(l2); |
| 5542 | gen_set_label(l1); | 5537 | gen_set_label(l1); |
| 5543 | - tcg_gen_movi_i32(bcond, 1); | 5538 | + tcg_gen_movi_tl(bcond, 1); |
| 5544 | gen_set_label(l2); | 5539 | gen_set_label(l2); |
| 5545 | } | 5540 | } |
| 5546 | opn = "bc1f"; | 5541 | opn = "bc1f"; |
| @@ -5553,10 +5548,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5553,10 +5548,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5553 | get_fp_cond(t0); | 5548 | get_fp_cond(t0); |
| 5554 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); | 5549 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); |
| 5555 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); | 5550 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); |
| 5556 | - tcg_gen_movi_i32(bcond, 0); | 5551 | + tcg_gen_movi_tl(bcond, 0); |
| 5557 | tcg_gen_br(l2); | 5552 | tcg_gen_br(l2); |
| 5558 | gen_set_label(l1); | 5553 | gen_set_label(l1); |
| 5559 | - tcg_gen_movi_i32(bcond, 1); | 5554 | + tcg_gen_movi_tl(bcond, 1); |
| 5560 | gen_set_label(l2); | 5555 | gen_set_label(l2); |
| 5561 | } | 5556 | } |
| 5562 | opn = "bc1fl"; | 5557 | opn = "bc1fl"; |
| @@ -5569,10 +5564,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5569,10 +5564,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5569 | get_fp_cond(t0); | 5564 | get_fp_cond(t0); |
| 5570 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); | 5565 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); |
| 5571 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); | 5566 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); |
| 5572 | - tcg_gen_movi_i32(bcond, 0); | 5567 | + tcg_gen_movi_tl(bcond, 0); |
| 5573 | tcg_gen_br(l2); | 5568 | tcg_gen_br(l2); |
| 5574 | gen_set_label(l1); | 5569 | gen_set_label(l1); |
| 5575 | - tcg_gen_movi_i32(bcond, 1); | 5570 | + tcg_gen_movi_tl(bcond, 1); |
| 5576 | gen_set_label(l2); | 5571 | gen_set_label(l2); |
| 5577 | } | 5572 | } |
| 5578 | opn = "bc1t"; | 5573 | opn = "bc1t"; |
| @@ -5585,10 +5580,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5585,10 +5580,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5585 | get_fp_cond(t0); | 5580 | get_fp_cond(t0); |
| 5586 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); | 5581 | tcg_gen_andi_i32(t0, t0, 0x1 << cc); |
| 5587 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); | 5582 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); |
| 5588 | - tcg_gen_movi_i32(bcond, 0); | 5583 | + tcg_gen_movi_tl(bcond, 0); |
| 5589 | tcg_gen_br(l2); | 5584 | tcg_gen_br(l2); |
| 5590 | gen_set_label(l1); | 5585 | gen_set_label(l1); |
| 5591 | - tcg_gen_movi_i32(bcond, 1); | 5586 | + tcg_gen_movi_tl(bcond, 1); |
| 5592 | gen_set_label(l2); | 5587 | gen_set_label(l2); |
| 5593 | } | 5588 | } |
| 5594 | opn = "bc1tl"; | 5589 | opn = "bc1tl"; |
| @@ -5603,10 +5598,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5603,10 +5598,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5603 | get_fp_cond(t0); | 5598 | get_fp_cond(t0); |
| 5604 | tcg_gen_andi_i32(t0, t0, 0x3 << cc); | 5599 | tcg_gen_andi_i32(t0, t0, 0x3 << cc); |
| 5605 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); | 5600 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); |
| 5606 | - tcg_gen_movi_i32(bcond, 0); | 5601 | + tcg_gen_movi_tl(bcond, 0); |
| 5607 | tcg_gen_br(l2); | 5602 | tcg_gen_br(l2); |
| 5608 | gen_set_label(l1); | 5603 | gen_set_label(l1); |
| 5609 | - tcg_gen_movi_i32(bcond, 1); | 5604 | + tcg_gen_movi_tl(bcond, 1); |
| 5610 | gen_set_label(l2); | 5605 | gen_set_label(l2); |
| 5611 | } | 5606 | } |
| 5612 | opn = "bc1any2f"; | 5607 | opn = "bc1any2f"; |
| @@ -5619,10 +5614,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5619,10 +5614,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5619 | get_fp_cond(t0); | 5614 | get_fp_cond(t0); |
| 5620 | tcg_gen_andi_i32(t0, t0, 0x3 << cc); | 5615 | tcg_gen_andi_i32(t0, t0, 0x3 << cc); |
| 5621 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); | 5616 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); |
| 5622 | - tcg_gen_movi_i32(bcond, 0); | 5617 | + tcg_gen_movi_tl(bcond, 0); |
| 5623 | tcg_gen_br(l2); | 5618 | tcg_gen_br(l2); |
| 5624 | gen_set_label(l1); | 5619 | gen_set_label(l1); |
| 5625 | - tcg_gen_movi_i32(bcond, 1); | 5620 | + tcg_gen_movi_tl(bcond, 1); |
| 5626 | gen_set_label(l2); | 5621 | gen_set_label(l2); |
| 5627 | } | 5622 | } |
| 5628 | opn = "bc1any2t"; | 5623 | opn = "bc1any2t"; |
| @@ -5635,10 +5630,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5635,10 +5630,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5635 | get_fp_cond(t0); | 5630 | get_fp_cond(t0); |
| 5636 | tcg_gen_andi_i32(t0, t0, 0xf << cc); | 5631 | tcg_gen_andi_i32(t0, t0, 0xf << cc); |
| 5637 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); | 5632 | tcg_gen_brcondi_i32(TCG_COND_EQ, t0, 0, l1); |
| 5638 | - tcg_gen_movi_i32(bcond, 0); | 5633 | + tcg_gen_movi_tl(bcond, 0); |
| 5639 | tcg_gen_br(l2); | 5634 | tcg_gen_br(l2); |
| 5640 | gen_set_label(l1); | 5635 | gen_set_label(l1); |
| 5641 | - tcg_gen_movi_i32(bcond, 1); | 5636 | + tcg_gen_movi_tl(bcond, 1); |
| 5642 | gen_set_label(l2); | 5637 | gen_set_label(l2); |
| 5643 | } | 5638 | } |
| 5644 | opn = "bc1any4f"; | 5639 | opn = "bc1any4f"; |
| @@ -5651,10 +5646,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | @@ -5651,10 +5646,10 @@ static void gen_compute_branch1 (CPUState *env, DisasContext *ctx, uint32_t op, | ||
| 5651 | get_fp_cond(t0); | 5646 | get_fp_cond(t0); |
| 5652 | tcg_gen_andi_i32(t0, t0, 0xf << cc); | 5647 | tcg_gen_andi_i32(t0, t0, 0xf << cc); |
| 5653 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); | 5648 | tcg_gen_brcondi_i32(TCG_COND_NE, t0, 0, l1); |
| 5654 | - tcg_gen_movi_i32(bcond, 0); | 5649 | + tcg_gen_movi_tl(bcond, 0); |
| 5655 | tcg_gen_br(l2); | 5650 | tcg_gen_br(l2); |
| 5656 | gen_set_label(l1); | 5651 | gen_set_label(l1); |
| 5657 | - tcg_gen_movi_i32(bcond, 1); | 5652 | + tcg_gen_movi_tl(bcond, 1); |
| 5658 | gen_set_label(l2); | 5653 | gen_set_label(l2); |
| 5659 | } | 5654 | } |
| 5660 | opn = "bc1any4t"; | 5655 | opn = "bc1any4t"; |
| @@ -7585,7 +7580,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) | @@ -7585,7 +7580,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) | ||
| 7585 | int l1 = gen_new_label(); | 7580 | int l1 = gen_new_label(); |
| 7586 | 7581 | ||
| 7587 | MIPS_DEBUG("blikely condition (" TARGET_FMT_lx ")", ctx->pc + 4); | 7582 | MIPS_DEBUG("blikely condition (" TARGET_FMT_lx ")", ctx->pc + 4); |
| 7588 | - tcg_gen_brcondi_i32(TCG_COND_NE, bcond, 0, l1); | 7583 | + tcg_gen_brcondi_tl(TCG_COND_NE, bcond, 0, l1); |
| 7589 | { | 7584 | { |
| 7590 | TCGv_i32 r_tmp = tcg_temp_new_i32(); | 7585 | TCGv_i32 r_tmp = tcg_temp_new_i32(); |
| 7591 | 7586 | ||
| @@ -8147,7 +8142,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) | @@ -8147,7 +8142,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) | ||
| 8147 | { | 8142 | { |
| 8148 | int l1 = gen_new_label(); | 8143 | int l1 = gen_new_label(); |
| 8149 | 8144 | ||
| 8150 | - tcg_gen_brcondi_i32(TCG_COND_NE, bcond, 0, l1); | 8145 | + tcg_gen_brcondi_tl(TCG_COND_NE, bcond, 0, l1); |
| 8151 | gen_goto_tb(ctx, 1, ctx->pc + 4); | 8146 | gen_goto_tb(ctx, 1, ctx->pc + 4); |
| 8152 | gen_set_label(l1); | 8147 | gen_set_label(l1); |
| 8153 | gen_goto_tb(ctx, 0, ctx->btarget); | 8148 | gen_goto_tb(ctx, 0, ctx->btarget); |
| @@ -8440,8 +8435,8 @@ static void mips_tcg_init(void) | @@ -8440,8 +8435,8 @@ static void mips_tcg_init(void) | ||
| 8440 | cpu_dspctrl = tcg_global_mem_new(TCG_AREG0, | 8435 | cpu_dspctrl = tcg_global_mem_new(TCG_AREG0, |
| 8441 | offsetof(CPUState, active_tc.DSPControl), | 8436 | offsetof(CPUState, active_tc.DSPControl), |
| 8442 | "DSPControl"); | 8437 | "DSPControl"); |
| 8443 | - bcond = tcg_global_mem_new_i32(TCG_AREG0, | ||
| 8444 | - offsetof(CPUState, bcond), "bcond"); | 8438 | + bcond = tcg_global_mem_new(TCG_AREG0, |
| 8439 | + offsetof(CPUState, bcond), "bcond"); | ||
| 8445 | btarget = tcg_global_mem_new(TCG_AREG0, | 8440 | btarget = tcg_global_mem_new(TCG_AREG0, |
| 8446 | offsetof(CPUState, btarget), "btarget"); | 8441 | offsetof(CPUState, btarget), "btarget"); |
| 8447 | for (i = 0; i < 32; i++) | 8442 | for (i = 0; i < 32; i++) |