Commit 2a0ab9989938b8d633be12e2614a45806daac927

Authored by aurel32
1 parent b10fa3c9

target-mips: optimize gen_farith()

Optimize code generation in gen_farith():
- Temp variables are valid up to and *including* the brcond instruction.
  Use them instead of temp local variables.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5682 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 12 additions and 12 deletions
target-mips/translate.c
@@ -6314,32 +6314,32 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -6314,32 +6314,32 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
6314 case FOP(18, 16): 6314 case FOP(18, 16):
6315 { 6315 {
6316 int l1 = gen_new_label(); 6316 int l1 = gen_new_label();
6317 - TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); 6317 + TCGv t0 = tcg_temp_new(TCG_TYPE_TL);
6318 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32); 6318 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32);
6319 6319
6320 gen_load_gpr(t0, ft); 6320 gen_load_gpr(t0, ft);
6321 tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1); 6321 tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1);
6322 - tcg_temp_free(t0);  
6323 gen_load_fpr32(fp0, fs); 6322 gen_load_fpr32(fp0, fs);
6324 gen_store_fpr32(fp0, fd); 6323 gen_store_fpr32(fp0, fd);
6325 tcg_temp_free(fp0); 6324 tcg_temp_free(fp0);
6326 gen_set_label(l1); 6325 gen_set_label(l1);
  6326 + tcg_temp_free(t0);
6327 } 6327 }
6328 opn = "movz.s"; 6328 opn = "movz.s";
6329 break; 6329 break;
6330 case FOP(19, 16): 6330 case FOP(19, 16):
6331 { 6331 {
6332 int l1 = gen_new_label(); 6332 int l1 = gen_new_label();
6333 - TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); 6333 + TCGv t0 = tcg_temp_new(TCG_TYPE_TL);
6334 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32); 6334 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32);
6335 6335
6336 gen_load_gpr(t0, ft); 6336 gen_load_gpr(t0, ft);
6337 tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1); 6337 tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1);
6338 - tcg_temp_free(t0);  
6339 gen_load_fpr32(fp0, fs); 6338 gen_load_fpr32(fp0, fs);
6340 gen_store_fpr32(fp0, fd); 6339 gen_store_fpr32(fp0, fd);
6341 tcg_temp_free(fp0); 6340 tcg_temp_free(fp0);
6342 gen_set_label(l1); 6341 gen_set_label(l1);
  6342 + tcg_temp_free(t0);
6343 } 6343 }
6344 opn = "movn.s"; 6344 opn = "movn.s";
6345 break; 6345 break;
@@ -6733,32 +6733,32 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -6733,32 +6733,32 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
6733 case FOP(18, 17): 6733 case FOP(18, 17):
6734 { 6734 {
6735 int l1 = gen_new_label(); 6735 int l1 = gen_new_label();
6736 - TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); 6736 + TCGv t0 = tcg_temp_new(TCG_TYPE_TL);
6737 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I64); 6737 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I64);
6738 6738
6739 gen_load_gpr(t0, ft); 6739 gen_load_gpr(t0, ft);
6740 tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1); 6740 tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1);
6741 - tcg_temp_free(t0);  
6742 gen_load_fpr64(ctx, fp0, fs); 6741 gen_load_fpr64(ctx, fp0, fs);
6743 gen_store_fpr64(ctx, fp0, fd); 6742 gen_store_fpr64(ctx, fp0, fd);
6744 tcg_temp_free(fp0); 6743 tcg_temp_free(fp0);
6745 gen_set_label(l1); 6744 gen_set_label(l1);
  6745 + tcg_temp_free(t0);
6746 } 6746 }
6747 opn = "movz.d"; 6747 opn = "movz.d";
6748 break; 6748 break;
6749 case FOP(19, 17): 6749 case FOP(19, 17):
6750 { 6750 {
6751 int l1 = gen_new_label(); 6751 int l1 = gen_new_label();
6752 - TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); 6752 + TCGv t0 = tcg_temp_new(TCG_TYPE_TL);
6753 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I64); 6753 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I64);
6754 6754
6755 gen_load_gpr(t0, ft); 6755 gen_load_gpr(t0, ft);
6756 tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1); 6756 tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1);
6757 - tcg_temp_free(t0);  
6758 gen_load_fpr64(ctx, fp0, fs); 6757 gen_load_fpr64(ctx, fp0, fs);
6759 gen_store_fpr64(ctx, fp0, fd); 6758 gen_store_fpr64(ctx, fp0, fd);
6760 tcg_temp_free(fp0); 6759 tcg_temp_free(fp0);
6761 gen_set_label(l1); 6760 gen_set_label(l1);
  6761 + tcg_temp_free(t0);
6762 } 6762 }
6763 opn = "movn.d"; 6763 opn = "movn.d";
6764 break; 6764 break;
@@ -7068,13 +7068,12 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -7068,13 +7068,12 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
7068 check_cp1_64bitmode(ctx); 7068 check_cp1_64bitmode(ctx);
7069 { 7069 {
7070 int l1 = gen_new_label(); 7070 int l1 = gen_new_label();
7071 - TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); 7071 + TCGv t0 = tcg_temp_new(TCG_TYPE_TL);
7072 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32); 7072 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32);
7073 TCGv fph0 = tcg_temp_local_new(TCG_TYPE_I32); 7073 TCGv fph0 = tcg_temp_local_new(TCG_TYPE_I32);
7074 7074
7075 gen_load_gpr(t0, ft); 7075 gen_load_gpr(t0, ft);
7076 tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1); 7076 tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1);
7077 - tcg_temp_free(t0);  
7078 gen_load_fpr32(fp0, fs); 7077 gen_load_fpr32(fp0, fs);
7079 gen_load_fpr32h(fph0, fs); 7078 gen_load_fpr32h(fph0, fs);
7080 gen_store_fpr32(fp0, fd); 7079 gen_store_fpr32(fp0, fd);
@@ -7082,6 +7081,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -7082,6 +7081,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
7082 tcg_temp_free(fp0); 7081 tcg_temp_free(fp0);
7083 tcg_temp_free(fph0); 7082 tcg_temp_free(fph0);
7084 gen_set_label(l1); 7083 gen_set_label(l1);
  7084 + tcg_temp_free(t0);
7085 } 7085 }
7086 opn = "movz.ps"; 7086 opn = "movz.ps";
7087 break; 7087 break;
@@ -7089,13 +7089,12 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -7089,13 +7089,12 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
7089 check_cp1_64bitmode(ctx); 7089 check_cp1_64bitmode(ctx);
7090 { 7090 {
7091 int l1 = gen_new_label(); 7091 int l1 = gen_new_label();
7092 - TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); 7092 + TCGv t0 = tcg_temp_new(TCG_TYPE_TL);
7093 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32); 7093 TCGv fp0 = tcg_temp_local_new(TCG_TYPE_I32);
7094 TCGv fph0 = tcg_temp_local_new(TCG_TYPE_I32); 7094 TCGv fph0 = tcg_temp_local_new(TCG_TYPE_I32);
7095 7095
7096 gen_load_gpr(t0, ft); 7096 gen_load_gpr(t0, ft);
7097 tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1); 7097 tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0, l1);
7098 - tcg_temp_free(t0);  
7099 gen_load_fpr32(fp0, fs); 7098 gen_load_fpr32(fp0, fs);
7100 gen_load_fpr32h(fph0, fs); 7099 gen_load_fpr32h(fph0, fs);
7101 gen_store_fpr32(fp0, fd); 7100 gen_store_fpr32(fp0, fd);
@@ -7103,6 +7102,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -7103,6 +7102,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
7103 tcg_temp_free(fp0); 7102 tcg_temp_free(fp0);
7104 tcg_temp_free(fph0); 7103 tcg_temp_free(fph0);
7105 gen_set_label(l1); 7104 gen_set_label(l1);
  7105 + tcg_temp_free(t0);
7106 } 7106 }
7107 opn = "movn.ps"; 7107 opn = "movn.ps";
7108 break; 7108 break;