< prev index next >

src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp

Print this page

 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()) {
< prev index next >