957 op->tmp2()->as_register(),
958 op->tmp3()->as_register(),
959 op->header_size(),
960 op->object_size(),
961 op->klass()->as_register(),
962 *op->stub()->entry());
963 __ bind(*op->stub()->continuation());
964 }
965
966 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
967 if (UseSlowPath ||
968 (!UseFastNewObjectArray && (op->type() == T_OBJECT || op->type() == T_ARRAY)) ||
969 (!UseFastNewTypeArray && (op->type() != T_OBJECT && op->type() != T_ARRAY))) {
970 __ b(*op->stub()->entry());
971 } else {
972 __ allocate_array(op->obj()->as_register(),
973 op->len()->as_register(),
974 op->tmp1()->as_register(),
975 op->tmp2()->as_register(),
976 op->tmp3()->as_register(),
977 arrayOopDesc::header_size(op->type()),
978 type2aelembytes(op->type()),
979 op->klass()->as_register(),
980 *op->stub()->entry());
981 }
982 __ bind(*op->stub()->continuation());
983 }
984
985 void LIR_Assembler::type_profile_helper(Register mdo, int mdo_offset_bias,
986 ciMethodData *md, ciProfileData *data,
987 Register recv, Register tmp1, Label* update_done) {
988 assert_different_registers(mdo, recv, tmp1);
989 uint i;
990 for (i = 0; i < VirtualCallData::row_limit(); i++) {
991 Label next_test;
992 // See if the receiver is receiver[n].
993 Address receiver_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) -
994 mdo_offset_bias);
995 __ ldr(tmp1, receiver_addr);
996 __ verify_klass_ptr(tmp1);
997 __ cmp(recv, tmp1);
|
957 op->tmp2()->as_register(),
958 op->tmp3()->as_register(),
959 op->header_size(),
960 op->object_size(),
961 op->klass()->as_register(),
962 *op->stub()->entry());
963 __ bind(*op->stub()->continuation());
964 }
965
966 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
967 if (UseSlowPath ||
968 (!UseFastNewObjectArray && (op->type() == T_OBJECT || op->type() == T_ARRAY)) ||
969 (!UseFastNewTypeArray && (op->type() != T_OBJECT && op->type() != T_ARRAY))) {
970 __ b(*op->stub()->entry());
971 } else {
972 __ allocate_array(op->obj()->as_register(),
973 op->len()->as_register(),
974 op->tmp1()->as_register(),
975 op->tmp2()->as_register(),
976 op->tmp3()->as_register(),
977 arrayOopDesc::base_offset_in_bytes(op->type()),
978 type2aelembytes(op->type()),
979 op->klass()->as_register(),
980 *op->stub()->entry());
981 }
982 __ bind(*op->stub()->continuation());
983 }
984
985 void LIR_Assembler::type_profile_helper(Register mdo, int mdo_offset_bias,
986 ciMethodData *md, ciProfileData *data,
987 Register recv, Register tmp1, Label* update_done) {
988 assert_different_registers(mdo, recv, tmp1);
989 uint i;
990 for (i = 0; i < VirtualCallData::row_limit(); i++) {
991 Label next_test;
992 // See if the receiver is receiver[n].
993 Address receiver_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) -
994 mdo_offset_bias);
995 __ ldr(tmp1, receiver_addr);
996 __ verify_klass_ptr(tmp1);
997 __ cmp(recv, tmp1);
|