hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp
changeset 35495 e27da438fa13
parent 35470 75c679ad0747
parent 35232 76aed99c0ddd
child 35847 990c61a50f24
child 35606 d873b64009cc
equal deleted inserted replaced
35492:c8c0273e6b91 35495:e27da438fa13
   179   }
   179   }
   180 }
   180 }
   181 
   181 
   182 // Ring buffer jumps
   182 // Ring buffer jumps
   183 
   183 
   184 #ifndef PRODUCT
       
   185 void MacroAssembler::ret(  bool trace )   { if (trace) {
       
   186                                                     mov(I7, O7); // traceable register
       
   187                                                     JMP(O7, 2 * BytesPerInstWord);
       
   188                                                   } else {
       
   189                                                     jmpl( I7, 2 * BytesPerInstWord, G0 );
       
   190                                                   }
       
   191                                                 }
       
   192 
       
   193 void MacroAssembler::retl( bool trace )  { if (trace) JMP(O7, 2 * BytesPerInstWord);
       
   194                                                  else jmpl( O7, 2 * BytesPerInstWord, G0 ); }
       
   195 #endif /* PRODUCT */
       
   196 
       
   197 
   184 
   198 void MacroAssembler::jmp2(Register r1, Register r2, const char* file, int line ) {
   185 void MacroAssembler::jmp2(Register r1, Register r2, const char* file, int line ) {
   199   assert_not_delayed();
   186   assert_not_delayed();
   200   // This can only be traceable if r1 & r2 are visible after a window save
   187   // This can only be traceable if r1 & r2 are visible after a window save
   201   if (TraceJumps) {
   188   if (TraceJumps) {
   756 
   743 
   757   st_ptr(oop_result, vm_result_addr);
   744   st_ptr(oop_result, vm_result_addr);
   758 }
   745 }
   759 
   746 
   760 
   747 
   761 void MacroAssembler::ic_call(address entry, bool emit_delay) {
   748 void MacroAssembler::ic_call(address entry, bool emit_delay, jint method_index) {
   762   RelocationHolder rspec = virtual_call_Relocation::spec(pc());
   749   RelocationHolder rspec = virtual_call_Relocation::spec(pc(), method_index);
   763   patchable_set((intptr_t)Universe::non_oop_word(), G5_inline_cache_reg);
   750   patchable_set((intptr_t)Universe::non_oop_word(), G5_inline_cache_reg);
   764   relocate(rspec);
   751   relocate(rspec);
   765   call(entry, relocInfo::none);
   752   call(entry, relocInfo::none);
   766   if (emit_delay) {
   753   if (emit_delay) {
   767     delayed()->nop();
   754     delayed()->nop();
   768   }
   755   }
   769 }
   756 }
   770 
       
   771 
   757 
   772 void MacroAssembler::card_table_write(jbyte* byte_map_base,
   758 void MacroAssembler::card_table_write(jbyte* byte_map_base,
   773                                       Register tmp, Register obj) {
   759                                       Register tmp, Register obj) {
   774 #ifdef _LP64
   760 #ifdef _LP64
   775   srlx(obj, CardTableModRefBS::card_shift, obj);
   761   srlx(obj, CardTableModRefBS::card_shift, obj);