Commit 34151a20ea237dd21dc1e39a0c25d715ed39d989

Authored by bellard
1 parent c1c37968

small shift opts

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4525 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 30 additions and 6 deletions
tcg/tcg-op.h
@@ -404,7 +404,11 @@ static inline void tcg_gen_shl_i32(TCGv ret, TCGv arg1, TCGv arg2) @@ -404,7 +404,11 @@ static inline void tcg_gen_shl_i32(TCGv ret, TCGv arg1, TCGv arg2)
404 404
405 static inline void tcg_gen_shli_i32(TCGv ret, TCGv arg1, int32_t arg2) 405 static inline void tcg_gen_shli_i32(TCGv ret, TCGv arg1, int32_t arg2)
406 { 406 {
407 - tcg_gen_shl_i32(ret, arg1, tcg_const_i32(arg2)); 407 + if (arg2 == 0) {
  408 + tcg_gen_mov_i32(ret, arg1);
  409 + } else {
  410 + tcg_gen_shl_i32(ret, arg1, tcg_const_i32(arg2));
  411 + }
408 } 412 }
409 413
410 static inline void tcg_gen_shr_i32(TCGv ret, TCGv arg1, TCGv arg2) 414 static inline void tcg_gen_shr_i32(TCGv ret, TCGv arg1, TCGv arg2)
@@ -414,7 +418,11 @@ static inline void tcg_gen_shr_i32(TCGv ret, TCGv arg1, TCGv arg2) @@ -414,7 +418,11 @@ static inline void tcg_gen_shr_i32(TCGv ret, TCGv arg1, TCGv arg2)
414 418
415 static inline void tcg_gen_shri_i32(TCGv ret, TCGv arg1, int32_t arg2) 419 static inline void tcg_gen_shri_i32(TCGv ret, TCGv arg1, int32_t arg2)
416 { 420 {
417 - tcg_gen_shr_i32(ret, arg1, tcg_const_i32(arg2)); 421 + if (arg2 == 0) {
  422 + tcg_gen_mov_i32(ret, arg1);
  423 + } else {
  424 + tcg_gen_shr_i32(ret, arg1, tcg_const_i32(arg2));
  425 + }
418 } 426 }
419 427
420 static inline void tcg_gen_sar_i32(TCGv ret, TCGv arg1, TCGv arg2) 428 static inline void tcg_gen_sar_i32(TCGv ret, TCGv arg1, TCGv arg2)
@@ -424,7 +432,11 @@ static inline void tcg_gen_sar_i32(TCGv ret, TCGv arg1, TCGv arg2) @@ -424,7 +432,11 @@ static inline void tcg_gen_sar_i32(TCGv ret, TCGv arg1, TCGv arg2)
424 432
425 static inline void tcg_gen_sari_i32(TCGv ret, TCGv arg1, int32_t arg2) 433 static inline void tcg_gen_sari_i32(TCGv ret, TCGv arg1, int32_t arg2)
426 { 434 {
427 - tcg_gen_sar_i32(ret, arg1, tcg_const_i32(arg2)); 435 + if (arg2 == 0) {
  436 + tcg_gen_mov_i32(ret, arg1);
  437 + } else {
  438 + tcg_gen_sar_i32(ret, arg1, tcg_const_i32(arg2));
  439 + }
428 } 440 }
429 441
430 static inline void tcg_gen_brcond_i32(int cond, TCGv arg1, TCGv arg2, 442 static inline void tcg_gen_brcond_i32(int cond, TCGv arg1, TCGv arg2,
@@ -862,7 +874,11 @@ static inline void tcg_gen_shl_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -862,7 +874,11 @@ static inline void tcg_gen_shl_i64(TCGv ret, TCGv arg1, TCGv arg2)
862 874
863 static inline void tcg_gen_shli_i64(TCGv ret, TCGv arg1, int64_t arg2) 875 static inline void tcg_gen_shli_i64(TCGv ret, TCGv arg1, int64_t arg2)
864 { 876 {
865 - tcg_gen_shl_i64(ret, arg1, tcg_const_i64(arg2)); 877 + if (arg2 == 0) {
  878 + tcg_gen_mov_i64(ret, arg1);
  879 + } else {
  880 + tcg_gen_shl_i64(ret, arg1, tcg_const_i64(arg2));
  881 + }
866 } 882 }
867 883
868 static inline void tcg_gen_shr_i64(TCGv ret, TCGv arg1, TCGv arg2) 884 static inline void tcg_gen_shr_i64(TCGv ret, TCGv arg1, TCGv arg2)
@@ -872,7 +888,11 @@ static inline void tcg_gen_shr_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -872,7 +888,11 @@ static inline void tcg_gen_shr_i64(TCGv ret, TCGv arg1, TCGv arg2)
872 888
873 static inline void tcg_gen_shri_i64(TCGv ret, TCGv arg1, int64_t arg2) 889 static inline void tcg_gen_shri_i64(TCGv ret, TCGv arg1, int64_t arg2)
874 { 890 {
875 - tcg_gen_shr_i64(ret, arg1, tcg_const_i64(arg2)); 891 + if (arg2 == 0) {
  892 + tcg_gen_mov_i64(ret, arg1);
  893 + } else {
  894 + tcg_gen_shr_i64(ret, arg1, tcg_const_i64(arg2));
  895 + }
876 } 896 }
877 897
878 static inline void tcg_gen_sar_i64(TCGv ret, TCGv arg1, TCGv arg2) 898 static inline void tcg_gen_sar_i64(TCGv ret, TCGv arg1, TCGv arg2)
@@ -882,7 +902,11 @@ static inline void tcg_gen_sar_i64(TCGv ret, TCGv arg1, TCGv arg2) @@ -882,7 +902,11 @@ static inline void tcg_gen_sar_i64(TCGv ret, TCGv arg1, TCGv arg2)
882 902
883 static inline void tcg_gen_sari_i64(TCGv ret, TCGv arg1, int64_t arg2) 903 static inline void tcg_gen_sari_i64(TCGv ret, TCGv arg1, int64_t arg2)
884 { 904 {
885 - tcg_gen_sar_i64(ret, arg1, tcg_const_i64(arg2)); 905 + if (arg2 == 0) {
  906 + tcg_gen_mov_i64(ret, arg1);
  907 + } else {
  908 + tcg_gen_sar_i64(ret, arg1, tcg_const_i64(arg2));
  909 + }
886 } 910 }
887 911
888 static inline void tcg_gen_brcond_i64(int cond, TCGv arg1, TCGv arg2, 912 static inline void tcg_gen_brcond_i64(int cond, TCGv arg1, TCGv arg2,