933
934 switch (type) {
935 case T_BOOLEAN: // fall through
936 case T_BYTE : __ z_lb(dest->as_register(), disp_value, disp_reg, src); break;
937 case T_CHAR : __ z_llgh(dest->as_register(), disp_value, disp_reg, src); break;
938 case T_SHORT :
939 if (short_disp) {
940 __ z_lh(dest->as_register(), disp_value, disp_reg, src);
941 } else {
942 __ z_lhy(dest->as_register(), disp_value, disp_reg, src);
943 }
944 break;
945 case T_INT :
946 if (short_disp) {
947 __ z_l(dest->as_register(), disp_value, disp_reg, src);
948 } else {
949 __ z_ly(dest->as_register(), disp_value, disp_reg, src);
950 }
951 break;
952 case T_ADDRESS:
953 if (UseCompressedClassPointers && addr->disp() == oopDesc::klass_offset_in_bytes()) {
954 __ z_llgf(dest->as_register(), disp_value, disp_reg, src);
955 __ decode_klass_not_null(dest->as_register());
956 } else {
957 __ z_lg(dest->as_register(), disp_value, disp_reg, src);
958 }
959 break;
960 case T_ARRAY : // fall through
961 case T_OBJECT:
962 {
963 if (UseCompressedOops && !wide) {
964 __ z_llgf(dest->as_register(), disp_value, disp_reg, src);
965 __ oop_decoder(dest->as_register(), dest->as_register(), true);
966 } else {
967 __ z_lg(dest->as_register(), disp_value, disp_reg, src);
968 }
969 __ verify_oop(dest->as_register(), FILE_AND_LINE);
970 break;
971 }
972 case T_FLOAT:
973 if (short_disp) {
974 __ z_le(dest->as_float_reg(), disp_value, disp_reg, src);
975 } else {
976 __ z_ley(dest->as_float_reg(), disp_value, disp_reg, src);
977 }
978 break;
2737 Register lock = op->lock_opr()->as_register();
2738 if (!UseFastLocking) {
2739 __ branch_optimized(Assembler::bcondAlways, *op->stub()->entry());
2740 } else if (op->code() == lir_lock) {
2741 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
2742 // Add debug info for NullPointerException only if one is possible.
2743 if (op->info() != NULL) {
2744 add_debug_info_for_null_check_here(op->info());
2745 }
2746 __ lock_object(hdr, obj, lock, *op->stub()->entry());
2747 // done
2748 } else if (op->code() == lir_unlock) {
2749 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
2750 __ unlock_object(hdr, obj, lock, *op->stub()->entry());
2751 } else {
2752 ShouldNotReachHere();
2753 }
2754 __ bind(*op->stub()->continuation());
2755 }
2756
2757 void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
2758 ciMethod* method = op->profiled_method();
2759 int bci = op->profiled_bci();
2760 ciMethod* callee = op->profiled_callee();
2761
2762 // Update counter for all call types.
2763 ciMethodData* md = method->method_data_or_null();
2764 assert(md != NULL, "Sanity");
2765 ciProfileData* data = md->bci_to_data(bci);
2766 assert(data != NULL && data->is_CounterData(), "need CounterData for calls");
2767 assert(op->mdo()->is_single_cpu(), "mdo must be allocated");
2768 Register mdo = op->mdo()->as_register();
2769 assert(op->tmp1()->is_double_cpu(), "tmp1 must be allocated");
2770 Register tmp1 = op->tmp1()->as_register_lo();
2771 metadata2reg(md->constant_encoding(), mdo);
2772
2773 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()));
2774 // Perform additional virtual call profiling for invokevirtual and
2775 // invokeinterface bytecodes
2776 if (op->should_profile_receiver_type()) {
|
933
934 switch (type) {
935 case T_BOOLEAN: // fall through
936 case T_BYTE : __ z_lb(dest->as_register(), disp_value, disp_reg, src); break;
937 case T_CHAR : __ z_llgh(dest->as_register(), disp_value, disp_reg, src); break;
938 case T_SHORT :
939 if (short_disp) {
940 __ z_lh(dest->as_register(), disp_value, disp_reg, src);
941 } else {
942 __ z_lhy(dest->as_register(), disp_value, disp_reg, src);
943 }
944 break;
945 case T_INT :
946 if (short_disp) {
947 __ z_l(dest->as_register(), disp_value, disp_reg, src);
948 } else {
949 __ z_ly(dest->as_register(), disp_value, disp_reg, src);
950 }
951 break;
952 case T_ADDRESS:
953 __ z_lg(dest->as_register(), disp_value, disp_reg, src);
954 break;
955 case T_ARRAY : // fall through
956 case T_OBJECT:
957 {
958 if (UseCompressedOops && !wide) {
959 __ z_llgf(dest->as_register(), disp_value, disp_reg, src);
960 __ oop_decoder(dest->as_register(), dest->as_register(), true);
961 } else {
962 __ z_lg(dest->as_register(), disp_value, disp_reg, src);
963 }
964 __ verify_oop(dest->as_register(), FILE_AND_LINE);
965 break;
966 }
967 case T_FLOAT:
968 if (short_disp) {
969 __ z_le(dest->as_float_reg(), disp_value, disp_reg, src);
970 } else {
971 __ z_ley(dest->as_float_reg(), disp_value, disp_reg, src);
972 }
973 break;
2732 Register lock = op->lock_opr()->as_register();
2733 if (!UseFastLocking) {
2734 __ branch_optimized(Assembler::bcondAlways, *op->stub()->entry());
2735 } else if (op->code() == lir_lock) {
2736 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
2737 // Add debug info for NullPointerException only if one is possible.
2738 if (op->info() != NULL) {
2739 add_debug_info_for_null_check_here(op->info());
2740 }
2741 __ lock_object(hdr, obj, lock, *op->stub()->entry());
2742 // done
2743 } else if (op->code() == lir_unlock) {
2744 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
2745 __ unlock_object(hdr, obj, lock, *op->stub()->entry());
2746 } else {
2747 ShouldNotReachHere();
2748 }
2749 __ bind(*op->stub()->continuation());
2750 }
2751
2752 void LIR_Assembler::emit_load_klass(LIR_OpLoadKlass* op) {
2753 Register obj = op->obj()->as_pointer_register();
2754 Register result = op->result_opr()->as_pointer_register();
2755
2756 CodeEmitInfo* info = op->info();
2757 if (info != NULL) {
2758 add_debug_info_for_null_check_here(info);
2759 }
2760
2761 if (UseCompressedClassPointers) {
2762 __ z_llgf(result, Address(obj, oopDesc::klass_offset_in_bytes()));
2763 __ decode_klass_not_null(result);
2764 } else {
2765 __ z_lg(result, Address(obj, oopDesc::klass_offset_in_bytes()));
2766 }
2767 }
2768 void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
2769 ciMethod* method = op->profiled_method();
2770 int bci = op->profiled_bci();
2771 ciMethod* callee = op->profiled_callee();
2772
2773 // Update counter for all call types.
2774 ciMethodData* md = method->method_data_or_null();
2775 assert(md != NULL, "Sanity");
2776 ciProfileData* data = md->bci_to_data(bci);
2777 assert(data != NULL && data->is_CounterData(), "need CounterData for calls");
2778 assert(op->mdo()->is_single_cpu(), "mdo must be allocated");
2779 Register mdo = op->mdo()->as_register();
2780 assert(op->tmp1()->is_double_cpu(), "tmp1 must be allocated");
2781 Register tmp1 = op->tmp1()->as_register_lo();
2782 metadata2reg(md->constant_encoding(), mdo);
2783
2784 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()));
2785 // Perform additional virtual call profiling for invokevirtual and
2786 // invokeinterface bytecodes
2787 if (op->should_profile_receiver_type()) {
|