< prev index next >

src/cpu/ppc/vm/c1_FrameMap_ppc.cpp

Print this page
rev 12310 : Reserve R30 to a cleared content register on C1 and C2 code

Several times a 0 is loaded to a register as a temporary value. This can be
improved by caching a 0 into a register.

I didn't notice a performance drop since only applying this patch showed no
drop of performance, hence there are more registers available than normally
needed and this caching technique can be applied.

Despite setting R30_zero as a dedicated register and initialized with 0 for the
C1 and C2 code, new rules for storing 0 related to stb,sth,stw,std were added.


 120 LIR_Opr FrameMap::R10_oop_opr;
 121 LIR_Opr FrameMap::R11_oop_opr;
 122 LIR_Opr FrameMap::R12_oop_opr;
 123 //LIR_Opr FrameMap::R13_oop_opr;
 124 LIR_Opr FrameMap::R14_oop_opr;
 125 LIR_Opr FrameMap::R15_oop_opr;
 126 //LIR_Opr FrameMap::R16_oop_opr;
 127 LIR_Opr FrameMap::R17_oop_opr;
 128 LIR_Opr FrameMap::R18_oop_opr;
 129 LIR_Opr FrameMap::R19_oop_opr;
 130 LIR_Opr FrameMap::R20_oop_opr;
 131 LIR_Opr FrameMap::R21_oop_opr;
 132 LIR_Opr FrameMap::R22_oop_opr;
 133 LIR_Opr FrameMap::R23_oop_opr;
 134 LIR_Opr FrameMap::R24_oop_opr;
 135 LIR_Opr FrameMap::R25_oop_opr;
 136 LIR_Opr FrameMap::R26_oop_opr;
 137 LIR_Opr FrameMap::R27_oop_opr;
 138 LIR_Opr FrameMap::R28_oop_opr;
 139 //LIR_Opr FrameMap::R29_oop_opr;
 140 LIR_Opr FrameMap::R30_oop_opr;
 141 LIR_Opr FrameMap::R31_oop_opr;
 142 
 143 LIR_Opr  FrameMap::R0_metadata_opr;
 144 //LIR_Opr  FrameMap::R1_metadata_opr;
 145 LIR_Opr  FrameMap::R2_metadata_opr;
 146 LIR_Opr  FrameMap::R3_metadata_opr;
 147 LIR_Opr  FrameMap::R4_metadata_opr;
 148 LIR_Opr  FrameMap::R5_metadata_opr;
 149 LIR_Opr  FrameMap::R6_metadata_opr;
 150 LIR_Opr  FrameMap::R7_metadata_opr;
 151 LIR_Opr  FrameMap::R8_metadata_opr;
 152 LIR_Opr  FrameMap::R9_metadata_opr;
 153 LIR_Opr FrameMap::R10_metadata_opr;
 154 LIR_Opr FrameMap::R11_metadata_opr;
 155 LIR_Opr FrameMap::R12_metadata_opr;
 156 //LIR_Opr FrameMap::R13_metadata_opr;
 157 LIR_Opr FrameMap::R14_metadata_opr;
 158 LIR_Opr FrameMap::R15_metadata_opr;
 159 //LIR_Opr FrameMap::R16_metadata_opr;
 160 LIR_Opr FrameMap::R17_metadata_opr;
 161 LIR_Opr FrameMap::R18_metadata_opr;
 162 LIR_Opr FrameMap::R19_metadata_opr;
 163 LIR_Opr FrameMap::R20_metadata_opr;
 164 LIR_Opr FrameMap::R21_metadata_opr;
 165 LIR_Opr FrameMap::R22_metadata_opr;
 166 LIR_Opr FrameMap::R23_metadata_opr;
 167 LIR_Opr FrameMap::R24_metadata_opr;
 168 LIR_Opr FrameMap::R25_metadata_opr;
 169 LIR_Opr FrameMap::R26_metadata_opr;
 170 LIR_Opr FrameMap::R27_metadata_opr;
 171 LIR_Opr FrameMap::R28_metadata_opr;
 172 //LIR_Opr FrameMap::R29_metadata_opr;
 173 LIR_Opr FrameMap::R30_metadata_opr;
 174 LIR_Opr FrameMap::R31_metadata_opr;
 175 
 176 LIR_Opr FrameMap::SP_opr;
 177 
 178 LIR_Opr FrameMap::R0_long_opr;
 179 LIR_Opr FrameMap::R3_long_opr;
 180 
 181 LIR_Opr FrameMap::F1_opr;
 182 LIR_Opr FrameMap::F1_double_opr;
 183 
 184 LIR_Opr FrameMap::_caller_save_cpu_regs[] = { 0, };
 185 LIR_Opr FrameMap::_caller_save_fpu_regs[] = { 0, };
 186 
 187 FloatRegister FrameMap::nr2floatreg (int rnr) {
 188   assert(_init_done, "tables not initialized");
 189   debug_only(fpu_range_check(rnr);)
 190   return _fpu_regs[rnr];
 191 }
 192 
 193 


 284   R10_oop_opr = as_oop_opr(R10);
 285   R11_oop_opr = as_oop_opr(R11);
 286   R12_oop_opr = as_oop_opr(R12);
 287   //R13_oop_opr = as_oop_opr(R13);
 288   R14_oop_opr = as_oop_opr(R14);
 289   R15_oop_opr = as_oop_opr(R15);
 290   //R16_oop_opr = as_oop_opr(R16);
 291   R17_oop_opr = as_oop_opr(R17);
 292   R18_oop_opr = as_oop_opr(R18);
 293   R19_oop_opr = as_oop_opr(R19);
 294   R20_oop_opr = as_oop_opr(R20);
 295   R21_oop_opr = as_oop_opr(R21);
 296   R22_oop_opr = as_oop_opr(R22);
 297   R23_oop_opr = as_oop_opr(R23);
 298   R24_oop_opr = as_oop_opr(R24);
 299   R25_oop_opr = as_oop_opr(R25);
 300   R26_oop_opr = as_oop_opr(R26);
 301   R27_oop_opr = as_oop_opr(R27);
 302   R28_oop_opr = as_oop_opr(R28);
 303   //R29_oop_opr = as_oop_opr(R29);
 304   R30_oop_opr = as_oop_opr(R30);
 305   R31_oop_opr = as_oop_opr(R31);
 306 
 307   R0_metadata_opr  = as_metadata_opr(R0);
 308   //R1_metadata_opr  = as_metadata_opr(R1);
 309   R2_metadata_opr  = as_metadata_opr(R2);
 310   R3_metadata_opr  = as_metadata_opr(R3);
 311   R4_metadata_opr  = as_metadata_opr(R4);
 312   R5_metadata_opr  = as_metadata_opr(R5);
 313   R6_metadata_opr  = as_metadata_opr(R6);
 314   R7_metadata_opr  = as_metadata_opr(R7);
 315   R8_metadata_opr  = as_metadata_opr(R8);
 316   R9_metadata_opr  = as_metadata_opr(R9);
 317   R10_metadata_opr = as_metadata_opr(R10);
 318   R11_metadata_opr = as_metadata_opr(R11);
 319   R12_metadata_opr = as_metadata_opr(R12);
 320   //R13_metadata_opr = as_metadata_opr(R13);
 321   R14_metadata_opr = as_metadata_opr(R14);
 322   R15_metadata_opr = as_metadata_opr(R15);
 323   //R16_metadata_opr = as_metadata_opr(R16);
 324   R17_metadata_opr = as_metadata_opr(R17);
 325   R18_metadata_opr = as_metadata_opr(R18);
 326   R19_metadata_opr = as_metadata_opr(R19);
 327   R20_metadata_opr = as_metadata_opr(R20);
 328   R21_metadata_opr = as_metadata_opr(R21);
 329   R22_metadata_opr = as_metadata_opr(R22);
 330   R23_metadata_opr = as_metadata_opr(R23);
 331   R24_metadata_opr = as_metadata_opr(R24);
 332   R25_metadata_opr = as_metadata_opr(R25);
 333   R26_metadata_opr = as_metadata_opr(R26);
 334   R27_metadata_opr = as_metadata_opr(R27);
 335   R28_metadata_opr = as_metadata_opr(R28);
 336   //R29_metadata_opr = as_metadata_opr(R29);
 337   R30_metadata_opr = as_metadata_opr(R30);
 338   R31_metadata_opr = as_metadata_opr(R31);
 339 
 340   SP_opr = as_pointer_opr(R1_SP);
 341 
 342   R0_long_opr = LIR_OprFact::double_cpu(cpu_reg2rnr(R0), cpu_reg2rnr(R0));
 343   R3_long_opr = LIR_OprFact::double_cpu(cpu_reg2rnr(R3), cpu_reg2rnr(R3));
 344 
 345   F1_opr = as_float_opr(F1);
 346   F1_double_opr = as_double_opr(F1);
 347 
 348   // All the allocated cpu regs are caller saved.
 349   for (int i = 0; i < max_nof_caller_save_cpu_regs; i++) {
 350     _caller_save_cpu_regs[i] = LIR_OprFact::single_cpu(i);
 351   }
 352 
 353   // All the fpu regs are caller saved.
 354   for (int i = 0; i < nof_caller_save_fpu_regs; i++) {
 355     _caller_save_fpu_regs[i] = LIR_OprFact::single_fpu(i);
 356   }
 357 }




 120 LIR_Opr FrameMap::R10_oop_opr;
 121 LIR_Opr FrameMap::R11_oop_opr;
 122 LIR_Opr FrameMap::R12_oop_opr;
 123 //LIR_Opr FrameMap::R13_oop_opr;
 124 LIR_Opr FrameMap::R14_oop_opr;
 125 LIR_Opr FrameMap::R15_oop_opr;
 126 //LIR_Opr FrameMap::R16_oop_opr;
 127 LIR_Opr FrameMap::R17_oop_opr;
 128 LIR_Opr FrameMap::R18_oop_opr;
 129 LIR_Opr FrameMap::R19_oop_opr;
 130 LIR_Opr FrameMap::R20_oop_opr;
 131 LIR_Opr FrameMap::R21_oop_opr;
 132 LIR_Opr FrameMap::R22_oop_opr;
 133 LIR_Opr FrameMap::R23_oop_opr;
 134 LIR_Opr FrameMap::R24_oop_opr;
 135 LIR_Opr FrameMap::R25_oop_opr;
 136 LIR_Opr FrameMap::R26_oop_opr;
 137 LIR_Opr FrameMap::R27_oop_opr;
 138 LIR_Opr FrameMap::R28_oop_opr;
 139 //LIR_Opr FrameMap::R29_oop_opr;
 140 //LIR_Opr FrameMap::R30_oop_opr;
 141 LIR_Opr FrameMap::R31_oop_opr;
 142 
 143 LIR_Opr  FrameMap::R0_metadata_opr;
 144 //LIR_Opr  FrameMap::R1_metadata_opr;
 145 LIR_Opr  FrameMap::R2_metadata_opr;
 146 LIR_Opr  FrameMap::R3_metadata_opr;
 147 LIR_Opr  FrameMap::R4_metadata_opr;
 148 LIR_Opr  FrameMap::R5_metadata_opr;
 149 LIR_Opr  FrameMap::R6_metadata_opr;
 150 LIR_Opr  FrameMap::R7_metadata_opr;
 151 LIR_Opr  FrameMap::R8_metadata_opr;
 152 LIR_Opr  FrameMap::R9_metadata_opr;
 153 LIR_Opr FrameMap::R10_metadata_opr;
 154 LIR_Opr FrameMap::R11_metadata_opr;
 155 LIR_Opr FrameMap::R12_metadata_opr;
 156 //LIR_Opr FrameMap::R13_metadata_opr;
 157 LIR_Opr FrameMap::R14_metadata_opr;
 158 LIR_Opr FrameMap::R15_metadata_opr;
 159 //LIR_Opr FrameMap::R16_metadata_opr;
 160 LIR_Opr FrameMap::R17_metadata_opr;
 161 LIR_Opr FrameMap::R18_metadata_opr;
 162 LIR_Opr FrameMap::R19_metadata_opr;
 163 LIR_Opr FrameMap::R20_metadata_opr;
 164 LIR_Opr FrameMap::R21_metadata_opr;
 165 LIR_Opr FrameMap::R22_metadata_opr;
 166 LIR_Opr FrameMap::R23_metadata_opr;
 167 LIR_Opr FrameMap::R24_metadata_opr;
 168 LIR_Opr FrameMap::R25_metadata_opr;
 169 LIR_Opr FrameMap::R26_metadata_opr;
 170 LIR_Opr FrameMap::R27_metadata_opr;
 171 LIR_Opr FrameMap::R28_metadata_opr;
 172 //LIR_Opr FrameMap::R29_metadata_opr;
 173 //LIR_Opr FrameMap::R30_metadata_opr;
 174 LIR_Opr FrameMap::R31_metadata_opr;
 175 
 176 LIR_Opr FrameMap::SP_opr;
 177 
 178 LIR_Opr FrameMap::R0_long_opr;
 179 LIR_Opr FrameMap::R3_long_opr;
 180 
 181 LIR_Opr FrameMap::F1_opr;
 182 LIR_Opr FrameMap::F1_double_opr;
 183 
 184 LIR_Opr FrameMap::_caller_save_cpu_regs[] = { 0, };
 185 LIR_Opr FrameMap::_caller_save_fpu_regs[] = { 0, };
 186 
 187 FloatRegister FrameMap::nr2floatreg (int rnr) {
 188   assert(_init_done, "tables not initialized");
 189   debug_only(fpu_range_check(rnr);)
 190   return _fpu_regs[rnr];
 191 }
 192 
 193 


 284   R10_oop_opr = as_oop_opr(R10);
 285   R11_oop_opr = as_oop_opr(R11);
 286   R12_oop_opr = as_oop_opr(R12);
 287   //R13_oop_opr = as_oop_opr(R13);
 288   R14_oop_opr = as_oop_opr(R14);
 289   R15_oop_opr = as_oop_opr(R15);
 290   //R16_oop_opr = as_oop_opr(R16);
 291   R17_oop_opr = as_oop_opr(R17);
 292   R18_oop_opr = as_oop_opr(R18);
 293   R19_oop_opr = as_oop_opr(R19);
 294   R20_oop_opr = as_oop_opr(R20);
 295   R21_oop_opr = as_oop_opr(R21);
 296   R22_oop_opr = as_oop_opr(R22);
 297   R23_oop_opr = as_oop_opr(R23);
 298   R24_oop_opr = as_oop_opr(R24);
 299   R25_oop_opr = as_oop_opr(R25);
 300   R26_oop_opr = as_oop_opr(R26);
 301   R27_oop_opr = as_oop_opr(R27);
 302   R28_oop_opr = as_oop_opr(R28);
 303   //R29_oop_opr = as_oop_opr(R29);
 304   //R30_oop_opr = as_oop_opr(R30);
 305   R31_oop_opr = as_oop_opr(R31);
 306 
 307   R0_metadata_opr  = as_metadata_opr(R0);
 308   //R1_metadata_opr  = as_metadata_opr(R1);
 309   R2_metadata_opr  = as_metadata_opr(R2);
 310   R3_metadata_opr  = as_metadata_opr(R3);
 311   R4_metadata_opr  = as_metadata_opr(R4);
 312   R5_metadata_opr  = as_metadata_opr(R5);
 313   R6_metadata_opr  = as_metadata_opr(R6);
 314   R7_metadata_opr  = as_metadata_opr(R7);
 315   R8_metadata_opr  = as_metadata_opr(R8);
 316   R9_metadata_opr  = as_metadata_opr(R9);
 317   R10_metadata_opr = as_metadata_opr(R10);
 318   R11_metadata_opr = as_metadata_opr(R11);
 319   R12_metadata_opr = as_metadata_opr(R12);
 320   //R13_metadata_opr = as_metadata_opr(R13);
 321   R14_metadata_opr = as_metadata_opr(R14);
 322   R15_metadata_opr = as_metadata_opr(R15);
 323   //R16_metadata_opr = as_metadata_opr(R16);
 324   R17_metadata_opr = as_metadata_opr(R17);
 325   R18_metadata_opr = as_metadata_opr(R18);
 326   R19_metadata_opr = as_metadata_opr(R19);
 327   R20_metadata_opr = as_metadata_opr(R20);
 328   R21_metadata_opr = as_metadata_opr(R21);
 329   R22_metadata_opr = as_metadata_opr(R22);
 330   R23_metadata_opr = as_metadata_opr(R23);
 331   R24_metadata_opr = as_metadata_opr(R24);
 332   R25_metadata_opr = as_metadata_opr(R25);
 333   R26_metadata_opr = as_metadata_opr(R26);
 334   R27_metadata_opr = as_metadata_opr(R27);
 335   R28_metadata_opr = as_metadata_opr(R28);
 336   //R29_metadata_opr = as_metadata_opr(R29);
 337   //R30_metadata_opr = as_metadata_opr(R30);
 338   R31_metadata_opr = as_metadata_opr(R31);
 339 
 340   SP_opr = as_pointer_opr(R1_SP);
 341 
 342   R0_long_opr = LIR_OprFact::double_cpu(cpu_reg2rnr(R0), cpu_reg2rnr(R0));
 343   R3_long_opr = LIR_OprFact::double_cpu(cpu_reg2rnr(R3), cpu_reg2rnr(R3));
 344 
 345   F1_opr = as_float_opr(F1);
 346   F1_double_opr = as_double_opr(F1);
 347 
 348   // All the allocated cpu regs are caller saved.
 349   for (int i = 0; i < max_nof_caller_save_cpu_regs; i++) {
 350     _caller_save_cpu_regs[i] = LIR_OprFact::single_cpu(i);
 351   }
 352 
 353   // All the fpu regs are caller saved.
 354   for (int i = 0; i < nof_caller_save_fpu_regs; i++) {
 355     _caller_save_fpu_regs[i] = LIR_OprFact::single_fpu(i);
 356   }
 357 }


< prev index next >