src/cpu/sparc/vm/c1_FrameMap_sparc.cpp

Print this page




 164 bool FrameMap::is_caller_save_register (LIR_Opr reg) {
 165   if (reg->is_single_fpu() || reg->is_double_fpu()) { return true; }
 166   if (reg->is_double_cpu()) {
 167     return is_caller_save_register(reg->as_register_lo()) ||
 168            is_caller_save_register(reg->as_register_hi());
 169   }
 170   return is_caller_save_register(reg->as_register());
 171 }
 172 
 173 
 174 NEEDS_CLEANUP   // once the new calling convention is enabled, we no
 175                 // longer need to treat I5, I4 and L0 specially
 176 // Because the interpreter destroys caller's I5, I4 and L0,
 177 // we must spill them before doing a Java call as we may land in
 178 // interpreter.
 179 bool FrameMap::is_caller_save_register (Register r) {
 180   return (r->is_global() && (r != G0)) || r->is_out();
 181 }
 182 
 183 
 184 void FrameMap::init () {
 185   if (_init_done) return;
 186 
 187   int i=0;
 188   // Register usage:
 189   //  O6: sp
 190   //  I6: fp
 191   //  I7: return address
 192   //  G0: zero
 193   //  G2: thread
 194   //  G7: not available
 195   //  G6: not available
 196   /*  0 */ map_register(i++, L0);
 197   /*  1 */ map_register(i++, L1);
 198   /*  2 */ map_register(i++, L2);
 199   /*  3 */ map_register(i++, L3);
 200   /*  4 */ map_register(i++, L4);
 201   /*  5 */ map_register(i++, L5);
 202   /*  6 */ map_register(i++, L6);
 203   /*  7 */ map_register(i++, L7);
 204 
 205   /*  8 */ map_register(i++, I0);




 164 bool FrameMap::is_caller_save_register (LIR_Opr reg) {
 165   if (reg->is_single_fpu() || reg->is_double_fpu()) { return true; }
 166   if (reg->is_double_cpu()) {
 167     return is_caller_save_register(reg->as_register_lo()) ||
 168            is_caller_save_register(reg->as_register_hi());
 169   }
 170   return is_caller_save_register(reg->as_register());
 171 }
 172 
 173 
 174 NEEDS_CLEANUP   // once the new calling convention is enabled, we no
 175                 // longer need to treat I5, I4 and L0 specially
 176 // Because the interpreter destroys caller's I5, I4 and L0,
 177 // we must spill them before doing a Java call as we may land in
 178 // interpreter.
 179 bool FrameMap::is_caller_save_register (Register r) {
 180   return (r->is_global() && (r != G0)) || r->is_out();
 181 }
 182 
 183 
 184 void FrameMap::initialize() {
 185   assert(!_init_done, "once");
 186 
 187   int i=0;
 188   // Register usage:
 189   //  O6: sp
 190   //  I6: fp
 191   //  I7: return address
 192   //  G0: zero
 193   //  G2: thread
 194   //  G7: not available
 195   //  G6: not available
 196   /*  0 */ map_register(i++, L0);
 197   /*  1 */ map_register(i++, L1);
 198   /*  2 */ map_register(i++, L2);
 199   /*  3 */ map_register(i++, L3);
 200   /*  4 */ map_register(i++, L4);
 201   /*  5 */ map_register(i++, L5);
 202   /*  6 */ map_register(i++, L6);
 203   /*  7 */ map_register(i++, L7);
 204 
 205   /*  8 */ map_register(i++, I0);