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
|