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