< prev index next >

src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp

Print this page

2283                      op->klass()->as_register(),
2284                      *op->stub()->entry());
2285 
2286   __ bind(*op->stub()->continuation());
2287   __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
2288 }
2289 
2290 
2291 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
2292   LP64_ONLY( __ extsw(op->len()->as_register(), op->len()->as_register()); )
2293   if (UseSlowPath ||
2294       (!UseFastNewObjectArray && (is_reference_type(op->type()))) ||
2295       (!UseFastNewTypeArray   && (!is_reference_type(op->type())))) {
2296     __ b(*op->stub()->entry());
2297   } else {
2298     __ allocate_array(op->obj()->as_register(),
2299                       op->len()->as_register(),
2300                       op->tmp1()->as_register(),
2301                       op->tmp2()->as_register(),
2302                       op->tmp3()->as_register(),
2303                       arrayOopDesc::header_size(op->type()),
2304                       type2aelembytes(op->type()),
2305                       op->klass()->as_register(),
2306                       *op->stub()->entry());
2307   }
2308   __ bind(*op->stub()->continuation());
2309 }
2310 
2311 
2312 void LIR_Assembler::type_profile_helper(Register mdo, int mdo_offset_bias,
2313                                         ciMethodData *md, ciProfileData *data,
2314                                         Register recv, Register tmp1, Label* update_done) {
2315   uint i;
2316   for (i = 0; i < VirtualCallData::row_limit(); i++) {
2317     Label next_test;
2318     // See if the receiver is receiver[n].
2319     __ ld(tmp1, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) - mdo_offset_bias, mdo);
2320     __ verify_klass_ptr(tmp1);
2321     __ cmpd(CCR0, recv, tmp1);
2322     __ bne(CCR0, next_test);
2323 

2283                      op->klass()->as_register(),
2284                      *op->stub()->entry());
2285 
2286   __ bind(*op->stub()->continuation());
2287   __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
2288 }
2289 
2290 
2291 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
2292   LP64_ONLY( __ extsw(op->len()->as_register(), op->len()->as_register()); )
2293   if (UseSlowPath ||
2294       (!UseFastNewObjectArray && (is_reference_type(op->type()))) ||
2295       (!UseFastNewTypeArray   && (!is_reference_type(op->type())))) {
2296     __ b(*op->stub()->entry());
2297   } else {
2298     __ allocate_array(op->obj()->as_register(),
2299                       op->len()->as_register(),
2300                       op->tmp1()->as_register(),
2301                       op->tmp2()->as_register(),
2302                       op->tmp3()->as_register(),
2303                       arrayOopDesc::base_offset_in_bytes(op->type()),
2304                       type2aelembytes(op->type()),
2305                       op->klass()->as_register(),
2306                       *op->stub()->entry());
2307   }
2308   __ bind(*op->stub()->continuation());
2309 }
2310 
2311 
2312 void LIR_Assembler::type_profile_helper(Register mdo, int mdo_offset_bias,
2313                                         ciMethodData *md, ciProfileData *data,
2314                                         Register recv, Register tmp1, Label* update_done) {
2315   uint i;
2316   for (i = 0; i < VirtualCallData::row_limit(); i++) {
2317     Label next_test;
2318     // See if the receiver is receiver[n].
2319     __ ld(tmp1, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) - mdo_offset_bias, mdo);
2320     __ verify_klass_ptr(tmp1);
2321     __ cmpd(CCR0, recv, tmp1);
2322     __ bne(CCR0, next_test);
2323 
< prev index next >