Commit 7089442cb6214a46b1476d18d068f8b2972d1b22

Authored by blueswir1
1 parent f6503059

Fix andi, optimize addi and subi zero cases


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3985 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 13 additions and 3 deletions
tcg/tcg-op.h
... ... @@ -252,7 +252,12 @@ static inline void tcg_gen_add_i32(TCGv ret, TCGv arg1, TCGv arg2)
252 252  
253 253 static inline void tcg_gen_addi_i32(TCGv ret, TCGv arg1, int32_t arg2)
254 254 {
255   - tcg_gen_add_i32(ret, arg1, tcg_const_i32(arg2));
  255 + /* some cases can be optimized here */
  256 + if (arg2 == 0) {
  257 + tcg_gen_mov_i32(ret, arg1);
  258 + } else {
  259 + tcg_gen_add_i32(ret, arg1, tcg_const_i32(arg2));
  260 + }
256 261 }
257 262  
258 263 static inline void tcg_gen_sub_i32(TCGv ret, TCGv arg1, TCGv arg2)
... ... @@ -262,7 +267,12 @@ static inline void tcg_gen_sub_i32(TCGv ret, TCGv arg1, TCGv arg2)
262 267  
263 268 static inline void tcg_gen_subi_i32(TCGv ret, TCGv arg1, int32_t arg2)
264 269 {
265   - tcg_gen_sub_i32(ret, arg1, tcg_const_i32(arg2));
  270 + /* some cases can be optimized here */
  271 + if (arg2 == 0) {
  272 + tcg_gen_mov_i32(ret, arg1);
  273 + } else {
  274 + tcg_gen_sub_i32(ret, arg1, tcg_const_i32(arg2));
  275 + }
266 276 }
267 277  
268 278 static inline void tcg_gen_and_i32(TCGv ret, TCGv arg1, TCGv arg2)
... ... @@ -291,7 +301,7 @@ static inline void tcg_gen_ori_i32(TCGv ret, TCGv arg1, int32_t arg2)
291 301 {
292 302 /* some cases can be optimized here */
293 303 if (arg2 == 0xffffffff) {
294   - tcg_gen_movi_i32(ret, 0);
  304 + tcg_gen_movi_i32(ret, 0xffffffff);
295 305 } else if (arg2 == 0) {
296 306 tcg_gen_mov_i32(ret, arg1);
297 307 } else {
... ...