Revision 9bf3eb2c target-mips/translate.c

b/target-mips/translate.c
5930 5930
    uint32_t ccbit;
5931 5931
    TCGCond cond;
5932 5932
    TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL);
5933
    TCGv t1 = tcg_temp_local_new(TCG_TYPE_TL);
5934
    TCGv r_tmp = tcg_temp_local_new(TCG_TYPE_I32);
5933
    TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32);
5935 5934

  
5936 5935
    if (cc)
5937 5936
        ccbit = 1 << (24 + cc);
......
5943 5942
        cond = TCG_COND_NE;
5944 5943

  
5945 5944
    gen_load_gpr(t0, rd);
5946
    gen_load_gpr(t1, rs);
5947 5945
    tcg_gen_andi_i32(r_tmp, fpu_fcr31, ccbit);
5948 5946
    tcg_gen_brcondi_i32(cond, r_tmp, 0, l1);
5949
    tcg_temp_free(r_tmp);
5950

  
5951
    tcg_gen_mov_tl(t0, t1);
5952
    tcg_temp_free(t1);
5953

  
5947
    gen_load_gpr(t0, rs);
5954 5948
    gen_set_label(l1);
5955 5949
    gen_store_gpr(t0, rd);
5956 5950
    tcg_temp_free(t0);
......
5960 5954
{
5961 5955
    uint32_t ccbit;
5962 5956
    int cond;
5963
    TCGv r_tmp1 = tcg_temp_local_new(TCG_TYPE_I32);
5957
    TCGv r_tmp1 = tcg_temp_new(TCG_TYPE_I32);
5964 5958
    TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32);
5965
    TCGv fp1 = tcg_temp_local_new(TCG_TYPE_I32);
5966 5959
    int l1 = gen_new_label();
5967 5960

  
5968 5961
    if (cc)
......
5975 5968
    else
5976 5969
        cond = TCG_COND_NE;
5977 5970

  
5978
    gen_load_fpr32(fp0, fs);
5979
    gen_load_fpr32(fp1, fd);
5971
    gen_load_fpr32(fp0, fd);
5980 5972
    tcg_gen_andi_i32(r_tmp1, fpu_fcr31, ccbit);
5981 5973
    tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1);
5982
    tcg_gen_mov_i32(fp1, fp0);
5983
    tcg_temp_free(fp0);
5974
    gen_load_fpr32(fp0, fs);
5984 5975
    gen_set_label(l1);
5985
    tcg_temp_free(r_tmp1);
5986
    gen_store_fpr32(fp1, fd);
5987
    tcg_temp_free(fp1);
5976
    gen_store_fpr32(fp0, fd);
5977
    tcg_temp_free(fp0);
5988 5978
}
5989 5979

  
5990 5980
static inline void gen_movcf_d (DisasContext *ctx, int fs, int fd, int cc, int tf)
5991 5981
{
5992 5982
    uint32_t ccbit;
5993 5983
    int cond;
5994
    TCGv r_tmp1 = tcg_temp_local_new(TCG_TYPE_I32);
5984
    TCGv r_tmp1 = tcg_temp_new(TCG_TYPE_I32);
5995 5985
    TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I64);
5996
    TCGv fp1 = tcg_temp_local_new(TCG_TYPE_I64);
5997 5986
    int l1 = gen_new_label();
5998 5987

  
5999 5988
    if (cc)
......
6006 5995
    else
6007 5996
        cond = TCG_COND_NE;
6008 5997

  
6009
    gen_load_fpr64(ctx, fp0, fs);
6010
    gen_load_fpr64(ctx, fp1, fd);
5998
    gen_load_fpr64(ctx, fp0, fd);
6011 5999
    tcg_gen_andi_i32(r_tmp1, fpu_fcr31, ccbit);
6012 6000
    tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1);
6013
    tcg_gen_mov_i64(fp1, fp0);
6014
    tcg_temp_free(fp0);
6001
    gen_load_fpr64(ctx, fp0, fs);
6015 6002
    gen_set_label(l1);
6016
    tcg_temp_free(r_tmp1);
6017
    gen_store_fpr64(ctx, fp1, fd);
6018
    tcg_temp_free(fp1);
6003
    gen_store_fpr64(ctx, fp0, fd);
6004
    tcg_temp_free(fp0);
6019 6005
}
6020 6006

  
6021 6007
static inline void gen_movcf_ps (int fs, int fd, int cc, int tf)
6022 6008
{
6009
    uint32_t ccbit1, ccbit2;
6023 6010
    int cond;
6024 6011
    TCGv r_tmp1 = tcg_temp_local_new(TCG_TYPE_I32);
6025
    TCGv r_tmp2 = tcg_temp_local_new(TCG_TYPE_I32);
6026 6012
    TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32);
6027
    TCGv fph0 = tcg_temp_local_new(TCG_TYPE_I32);
6028
    TCGv fp1 = tcg_temp_local_new(TCG_TYPE_I32);
6029
    TCGv fph1 = tcg_temp_local_new(TCG_TYPE_I32);
6030 6013
    int l1 = gen_new_label();
6031 6014
    int l2 = gen_new_label();
6032 6015

  
6016
    if (cc) {
6017
        ccbit1 = 1 << (24 + cc);
6018
        ccbit2 = 1 << (25 + cc);
6019
    } else {
6020
        ccbit1 = 1 << 23;
6021
        ccbit2 = 1 << 25;
6022
    }
6023

  
6033 6024
    if (tf)
6034 6025
        cond = TCG_COND_EQ;
6035 6026
    else
6036 6027
        cond = TCG_COND_NE;
6037 6028

  
6029
    gen_load_fpr32(fp0, fd);
6030
    tcg_gen_andi_i32(r_tmp1, fpu_fcr31, ccbit1);
6031
    tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1);
6038 6032
    gen_load_fpr32(fp0, fs);
6039
    gen_load_fpr32h(fph0, fs);
6040
    gen_load_fpr32(fp1, fd);
6041
    gen_load_fpr32h(fph1, fd);
6042
    get_fp_cond(r_tmp1);
6043
    tcg_gen_shri_i32(r_tmp1, r_tmp1, cc);
6044
    tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x1);
6045
    tcg_gen_brcondi_i32(cond, r_tmp2, 0, l1);
6046
    tcg_gen_mov_i32(fp1, fp0);
6047
    tcg_temp_free(fp0);
6048 6033
    gen_set_label(l1);
6049
    tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x2);
6050
    tcg_gen_brcondi_i32(cond, r_tmp2, 0, l2);
6051
    tcg_gen_mov_i32(fph1, fph0);
6052
    tcg_temp_free(fph0);
6034
    gen_store_fpr32(fp0, fd);
6035

  
6036
    gen_load_fpr32h(fp0, fd);
6037
    tcg_gen_andi_i32(r_tmp1, fpu_fcr31, ccbit2);
6038
    tcg_gen_brcondi_i32(cond, r_tmp1, 0, l2);
6039
    gen_load_fpr32h(fp0, fs);
6053 6040
    gen_set_label(l2);
6041
    gen_store_fpr32h(fp0, fd);
6042

  
6054 6043
    tcg_temp_free(r_tmp1);
6055
    tcg_temp_free(r_tmp2);
6056
    gen_store_fpr32(fp1, fd);
6057
    gen_store_fpr32h(fph1, fd);
6058
    tcg_temp_free(fp1);
6059
    tcg_temp_free(fph1);
6044
    tcg_temp_free(fp0);
6060 6045
}
6061 6046

  
6062 6047

  

Also available in: Unified diff