@@ -1790,10 +1790,22 @@ static void gen_msa_3rf(DisasContext *ctx)
1790
1790
TCGv_i32 twd = tcg_const_i32 (wd );
1791
1791
TCGv_i32 tws = tcg_const_i32 (ws );
1792
1792
TCGv_i32 twt = tcg_const_i32 (wt );
1793
- TCGv_i32 tdf = tcg_temp_new_i32 () ;
1793
+ TCGv_i32 tdf ;
1794
1794
1795
1795
/* adjust df value for floating-point instruction */
1796
- tcg_gen_movi_i32 (tdf , df + 2 );
1796
+ switch (MASK_MSA_3RF (ctx -> opcode )) {
1797
+ case OPC_MUL_Q_df :
1798
+ case OPC_MADD_Q_df :
1799
+ case OPC_MSUB_Q_df :
1800
+ case OPC_MULR_Q_df :
1801
+ case OPC_MADDR_Q_df :
1802
+ case OPC_MSUBR_Q_df :
1803
+ tdf = tcg_constant_i32 (df + 1 );
1804
+ break ;
1805
+ default :
1806
+ tdf = tcg_constant_i32 (df + 2 );
1807
+ break ;
1808
+ }
1797
1809
1798
1810
switch (MASK_MSA_3RF (ctx -> opcode )) {
1799
1811
case OPC_FCAF_df :
@@ -1836,7 +1848,6 @@ static void gen_msa_3rf(DisasContext *ctx)
1836
1848
gen_helper_msa_fmadd_df (cpu_env , tdf , twd , tws , twt );
1837
1849
break ;
1838
1850
case OPC_MUL_Q_df :
1839
- tcg_gen_movi_i32 (tdf , df + 1 );
1840
1851
gen_helper_msa_mul_q_df (cpu_env , tdf , twd , tws , twt );
1841
1852
break ;
1842
1853
case OPC_FCULT_df :
@@ -1846,14 +1857,12 @@ static void gen_msa_3rf(DisasContext *ctx)
1846
1857
gen_helper_msa_fmsub_df (cpu_env , tdf , twd , tws , twt );
1847
1858
break ;
1848
1859
case OPC_MADD_Q_df :
1849
- tcg_gen_movi_i32 (tdf , df + 1 );
1850
1860
gen_helper_msa_madd_q_df (cpu_env , tdf , twd , tws , twt );
1851
1861
break ;
1852
1862
case OPC_FCLE_df :
1853
1863
gen_helper_msa_fcle_df (cpu_env , tdf , twd , tws , twt );
1854
1864
break ;
1855
1865
case OPC_MSUB_Q_df :
1856
- tcg_gen_movi_i32 (tdf , df + 1 );
1857
1866
gen_helper_msa_msub_q_df (cpu_env , tdf , twd , tws , twt );
1858
1867
break ;
1859
1868
case OPC_FCULE_df :
@@ -1896,7 +1905,6 @@ static void gen_msa_3rf(DisasContext *ctx)
1896
1905
gen_helper_msa_fmin_df (cpu_env , tdf , twd , tws , twt );
1897
1906
break ;
1898
1907
case OPC_MULR_Q_df :
1899
- tcg_gen_movi_i32 (tdf , df + 1 );
1900
1908
gen_helper_msa_mulr_q_df (cpu_env , tdf , twd , tws , twt );
1901
1909
break ;
1902
1910
case OPC_FSULT_df :
@@ -1906,7 +1914,6 @@ static void gen_msa_3rf(DisasContext *ctx)
1906
1914
gen_helper_msa_fmin_a_df (cpu_env , tdf , twd , tws , twt );
1907
1915
break ;
1908
1916
case OPC_MADDR_Q_df :
1909
- tcg_gen_movi_i32 (tdf , df + 1 );
1910
1917
gen_helper_msa_maddr_q_df (cpu_env , tdf , twd , tws , twt );
1911
1918
break ;
1912
1919
case OPC_FSLE_df :
@@ -1916,7 +1923,6 @@ static void gen_msa_3rf(DisasContext *ctx)
1916
1923
gen_helper_msa_fmax_df (cpu_env , tdf , twd , tws , twt );
1917
1924
break ;
1918
1925
case OPC_MSUBR_Q_df :
1919
- tcg_gen_movi_i32 (tdf , df + 1 );
1920
1926
gen_helper_msa_msubr_q_df (cpu_env , tdf , twd , tws , twt );
1921
1927
break ;
1922
1928
case OPC_FSULE_df :
@@ -1934,7 +1940,6 @@ static void gen_msa_3rf(DisasContext *ctx)
1934
1940
tcg_temp_free_i32 (twd );
1935
1941
tcg_temp_free_i32 (tws );
1936
1942
tcg_temp_free_i32 (twt );
1937
- tcg_temp_free_i32 (tdf );
1938
1943
}
1939
1944
1940
1945
static void gen_msa_2r (DisasContext * ctx )
0 commit comments