Revision 2fdbad25

b/target-mips/translate.c
427 427

  
428 428
#include "gen-icount.h"
429 429

  
430
static inline void tcg_gen_helper_0_i(void *func, TCGv arg)
430
static inline void tcg_gen_helper_0_i(void *func, uint32_t arg)
431

  
431 432
{
432 433
    TCGv tmp = tcg_const_i32(arg);
433 434

  
......
435 436
    tcg_temp_free(tmp);
436 437
}
437 438

  
438
static inline void tcg_gen_helper_0_ii(void *func, TCGv arg1, TCGv arg2)
439
static inline void tcg_gen_helper_0_ii(void *func, uint32_t arg1, uint32_t arg2)
439 440
{
440 441
    TCGv tmp1 = tcg_const_i32(arg1);
441 442
    TCGv tmp2 = tcg_const_i32(arg2);
......
445 446
    tcg_temp_free(tmp2);
446 447
}
447 448

  
448
static inline void tcg_gen_helper_0_1i(void *func, TCGv arg1, TCGv arg2)
449
static inline void tcg_gen_helper_0_1i(void *func, TCGv arg1, uint32_t arg2)
449 450
{
450 451
    TCGv tmp = tcg_const_i32(arg2);
451 452

  
......
453 454
    tcg_temp_free(tmp);
454 455
}
455 456

  
456
static inline void tcg_gen_helper_0_2i(void *func, TCGv arg1, TCGv arg2, TCGv arg3)
457
static inline void tcg_gen_helper_0_2i(void *func, TCGv arg1, TCGv arg2, uint32_t arg3)
457 458
{
458 459
    TCGv tmp = tcg_const_i32(arg3);
459 460

  
......
461 462
    tcg_temp_free(tmp);
462 463
}
463 464

  
464
static inline void tcg_gen_helper_0_1ii(void *func, TCGv arg1, TCGv arg2, TCGv arg3)
465
static inline void tcg_gen_helper_0_1ii(void *func, TCGv arg1, uint32_t arg2, uint32_t arg3)
465 466
{
466 467
    TCGv tmp1 = tcg_const_i32(arg2);
467 468
    TCGv tmp2 = tcg_const_i32(arg3);
......
471 472
    tcg_temp_free(tmp2);
472 473
}
473 474

  
474
static inline void tcg_gen_helper_1_i(void *func, TCGv ret, TCGv arg)
475
static inline void tcg_gen_helper_1_i(void *func, TCGv ret, uint32_t arg)
475 476
{
476 477
    TCGv tmp = tcg_const_i32(arg);
477 478

  
......
479 480
    tcg_temp_free(tmp);
480 481
}
481 482

  
482
static inline void tcg_gen_helper_1_1i(void *func, TCGv ret, TCGv arg1, TCGv arg2)
483
static inline void tcg_gen_helper_1_1i(void *func, TCGv ret, TCGv arg1, uint32_t arg2)
483 484
{
484 485
    TCGv tmp = tcg_const_i32(arg2);
485 486

  
......
487 488
    tcg_temp_free(tmp);
488 489
}
489 490

  
490
static inline void tcg_gen_helper_1_1ii(void *func, TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3)
491
static inline void tcg_gen_helper_1_1ii(void *func, TCGv ret, TCGv arg1, uint32_t arg2, uint32_t arg3)
491 492
{
492 493
    TCGv tmp1 = tcg_const_i32(arg2);
493 494
    TCGv tmp2 = tcg_const_i32(arg3);
......
497 498
    tcg_temp_free(tmp2);
498 499
}
499 500

  
500
static inline void tcg_gen_helper_1_2i(void *func, TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3)
501
static inline void tcg_gen_helper_1_2i(void *func, TCGv ret, TCGv arg1, TCGv arg2, uint32_t arg3)
501 502
{
502 503
    TCGv tmp = tcg_const_i32(arg3);
503 504

  
......
505 506
    tcg_temp_free(tmp);
506 507
}
507 508

  
508
static inline void tcg_gen_helper_1_2ii(void *func, TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, TCGv arg4)
509
static inline void tcg_gen_helper_1_2ii(void *func, TCGv ret, TCGv arg1, TCGv arg2, uint32_t arg3, uint32_t arg4)
509 510
{
510 511
    TCGv tmp1 = tcg_const_i32(arg3);
511 512
    TCGv tmp2 = tcg_const_i32(arg4);
......
722 723
typedef void (fcmp_fun32)(uint32_t, uint32_t, int);
723 724
typedef void (fcmp_fun64)(uint64_t, uint64_t, int);
724 725

  
725
#define FOP_CONDS(fcmp_fun, type, arg0, arg1, fmt)                            \
726
#define FOP_CONDS(fcmp_fun, type, fmt)                                        \
726 727
static fcmp_fun * fcmp ## type ## _ ## fmt ## _table[16] = {                  \
727 728
    do_cmp ## type ## _ ## fmt ## _f,                                         \
728 729
    do_cmp ## type ## _ ## fmt ## _un,                                        \
......
741 742
    do_cmp ## type ## _ ## fmt ## _le,                                        \
742 743
    do_cmp ## type ## _ ## fmt ## _ngt,                                       \
743 744
};                                                                            \
744
static inline void gen_cmp ## type ## _ ## fmt(int n, arg0 a, arg1 b, int cc) \
745
static inline void gen_cmp ## type ## _ ## fmt(int n, TCGv a, TCGv b, int cc) \
745 746
{                                                                             \
746 747
    tcg_gen_helper_0_2i(fcmp ## type ## _ ## fmt ## _table[n], a, b, cc);     \
747 748
}
748 749

  
749
FOP_CONDS(fcmp_fun64, , uint64_t, uint64_t, d)
750
FOP_CONDS(fcmp_fun64, abs, uint64_t, uint64_t, d)
751
FOP_CONDS(fcmp_fun32, , uint32_t, uint32_t, s)
752
FOP_CONDS(fcmp_fun32, abs, uint32_t, uint32_t, s)
753
FOP_CONDS(fcmp_fun64, , uint64_t, uint64_t, ps)
754
FOP_CONDS(fcmp_fun64, abs, uint64_t, uint64_t, ps)
750
FOP_CONDS(fcmp_fun64, , d)
751
FOP_CONDS(fcmp_fun64, abs, d)
752
FOP_CONDS(fcmp_fun32, , s)
753
FOP_CONDS(fcmp_fun32, abs, s)
754
FOP_CONDS(fcmp_fun64, , ps)
755
FOP_CONDS(fcmp_fun64, abs, ps)
755 756
#undef FOP_CONDS
756 757

  
757 758
/* Tests */
......
2498 2499
{
2499 2500
    target_ulong btgt = -1;
2500 2501
    int blink = 0;
2501
    int bcond = 0;
2502
    int bcond_compute = 0;
2502 2503
    TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL);
2503 2504
    TCGv t1 = tcg_temp_local_new(TCG_TYPE_TL);
2504 2505

  
......
2524 2525
        if (rs != rt) {
2525 2526
            gen_load_gpr(t0, rs);
2526 2527
            gen_load_gpr(t1, rt);
2527
            bcond = 1;
2528
            bcond_compute = 1;
2528 2529
        }
2529 2530
        btgt = ctx->pc + 4 + offset;
2530 2531
        break;
......
2543 2544
        /* Compare to zero */
2544 2545
        if (rs != 0) {
2545 2546
            gen_load_gpr(t0, rs);
2546
            bcond = 1;
2547
            bcond_compute = 1;
2547 2548
        }
2548 2549
        btgt = ctx->pc + 4 + offset;
2549 2550
        break;
......
2569 2570
        generate_exception(ctx, EXCP_RI);
2570 2571
        goto out;
2571 2572
    }
2572
    if (bcond == 0) {
2573
    if (bcond_compute == 0) {
2573 2574
        /* No condition to be computed */
2574 2575
        switch (opc) {
2575 2576
        case OPC_BEQ:     /* rx == rx        */
......
6045 6046
    tcg_gen_ld_i32(r_tmp1, current_fpu, offsetof(CPUMIPSFPUContext, fcr31));
6046 6047
    tcg_gen_andi_i32(r_tmp1, r_tmp1, ccbit);
6047 6048
    tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1);
6048
    tcg_gen_movi_i32(fp1, fp0);
6049
    tcg_gen_mov_i32(fp1, fp0);
6049 6050
    tcg_temp_free(fp0);
6050 6051
    gen_set_label(l1);
6051 6052
    tcg_temp_free(r_tmp1);
......
6077 6078
    tcg_gen_ld_i32(r_tmp1, current_fpu, offsetof(CPUMIPSFPUContext, fcr31));
6078 6079
    tcg_gen_andi_i32(r_tmp1, r_tmp1, ccbit);
6079 6080
    tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1);
6080
    tcg_gen_movi_i64(fp1, fp0);
6081
    tcg_gen_mov_i64(fp1, fp0);
6081 6082
    tcg_temp_free(fp0);
6082 6083
    gen_set_label(l1);
6083 6084
    tcg_temp_free(r_tmp1);
......
6110 6111
    tcg_gen_shri_i32(r_tmp1, r_tmp1, cc);
6111 6112
    tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x1);
6112 6113
    tcg_gen_brcondi_i32(cond, r_tmp2, 0, l1);
6113
    tcg_gen_movi_i32(fp1, fp0);
6114
    tcg_gen_mov_i32(fp1, fp0);
6114 6115
    tcg_temp_free(fp0);
6115 6116
    gen_set_label(l1);
6116 6117
    tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x2);
6117 6118
    tcg_gen_brcondi_i32(cond, r_tmp2, 0, l2);
6118
    tcg_gen_movi_i32(fph1, fph0);
6119
    tcg_gen_mov_i32(fph1, fph0);
6119 6120
    tcg_temp_free(fph0);
6120 6121
    gen_set_label(l2);
6121 6122
    tcg_temp_free(r_tmp1);

Also available in: Unified diff