Mercurial > hg > graal-jvmci-8
diff src/share/vm/c1/c1_LIRGenerator.cpp @ 6948:e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 12 Nov 2012 23:14:12 +0100 |
parents | c38f13903fdf 8e47bac5643a |
children | 989155e2d07a |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_LIRGenerator.cpp Mon Nov 12 18:11:17 2012 +0100 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp Mon Nov 12 23:14:12 2012 +0100 @@ -30,8 +30,8 @@ #include "c1/c1_LIRGenerator.hpp" #include "c1/c1_ValueStack.hpp" #include "ci/ciArrayKlass.hpp" -#include "ci/ciCPCache.hpp" #include "ci/ciInstance.hpp" +#include "ci/ciObjArray.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "utilities/bitMap.inline.hpp" @@ -461,13 +461,13 @@ } -void LIRGenerator::jobject2reg_with_patching(LIR_Opr r, ciObject* obj, CodeEmitInfo* info) { +void LIRGenerator::klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info) { if (!obj->is_loaded() || PatchALot) { assert(info != NULL, "info must be set if class is not loaded"); - __ oop2reg_patch(NULL, r, info); + __ klass2reg_patch(NULL, r, info); } else { // no patching needed - __ oop2reg(obj->constant_encoding(), r); + __ metadata2reg(obj->constant_encoding(), r); } } @@ -657,7 +657,7 @@ void LIRGenerator::new_instance(LIR_Opr dst, ciInstanceKlass* klass, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info) { - jobject2reg_with_patching(klass_reg, klass, info); + klass2reg_with_patching(klass_reg, klass, info); // If klass is not loaded we do not know if the klass has finalizers: if (UseFastNewInstance && klass->is_loaded() && !Klass::layout_helper_needs_slow_path(klass->layout_helper())) { @@ -955,8 +955,8 @@ not_taken_count_offset = t; } - LIR_Opr md_reg = new_register(T_OBJECT); - __ oop2reg(md->constant_encoding(), md_reg); + LIR_Opr md_reg = new_register(T_METADATA); + __ metadata2reg(md->constant_encoding(), md_reg); LIR_Opr data_offset_reg = new_pointer_register(); __ cmove(lir_cond(cond), @@ -1189,11 +1189,11 @@ if (compilation()->env()->dtrace_method_probes()) { BasicTypeList signature; signature.append(LP64_ONLY(T_LONG) NOT_LP64(T_INT)); // thread - signature.append(T_OBJECT); // methodOop + signature.append(T_OBJECT); // Method* LIR_OprList* args = new LIR_OprList(); args->append(getThreadPointer()); - LIR_Opr meth = new_register(T_OBJECT); - __ oop2reg(method()->constant_encoding(), meth); + LIR_Opr meth = new_register(T_METADATA); + __ metadata2reg(method()->constant_encoding(), meth); args->append(meth); call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL); } @@ -1286,7 +1286,7 @@ if (x->needs_null_check()) { info = state_for(x); } - __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), T_OBJECT), result, info); + __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), T_ADDRESS), result, info); __ move_wide(new LIR_Address(result, in_bytes(Klass::java_mirror_offset()), T_OBJECT), result); } @@ -2292,8 +2292,8 @@ if (gen_type_check) { // We have determined that offset == referent_offset && src != null. // if (src->_klass->_reference_type == REF_NONE) -> continue - __ move(new LIR_Address(src.result(), oopDesc::klass_offset_in_bytes(), T_OBJECT), src_klass); - LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(instanceKlass::reference_type_offset()), T_BYTE); + __ move(new LIR_Address(src.result(), oopDesc::klass_offset_in_bytes(), UseCompressedKlassPointers ? T_OBJECT : T_ADDRESS), src_klass); + LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE); LIR_Opr reference_type = new_register(T_INT); __ move(reference_type_addr, reference_type); __ cmp(lir_cond_equal, reference_type, LIR_OprFact::intConst(REF_NONE)); @@ -2553,8 +2553,8 @@ assert(data->is_JumpData(), "need JumpData for branches"); offset = md->byte_offset_of_slot(data, JumpData::taken_offset()); } - LIR_Opr md_reg = new_register(T_OBJECT); - __ oop2reg(md->constant_encoding(), md_reg); + LIR_Opr md_reg = new_register(T_METADATA); + __ metadata2reg(md->constant_encoding(), md_reg); increment_counter(new LIR_Address(md_reg, offset, NOT_LP64(T_INT) LP64_ONLY(T_LONG)), DataLayout::counter_increment); @@ -2608,11 +2608,11 @@ if (compilation()->env()->dtrace_method_probes()) { BasicTypeList signature; signature.append(LP64_ONLY(T_LONG) NOT_LP64(T_INT)); // thread - signature.append(T_OBJECT); // methodOop + signature.append(T_OBJECT); // Method* LIR_OprList* args = new LIR_OprList(); args->append(getThreadPointer()); - LIR_Opr meth = new_register(T_OBJECT); - __ oop2reg(method()->constant_encoding(), meth); + LIR_Opr meth = new_register(T_METADATA); + __ metadata2reg(method()->constant_encoding(), meth); args->append(meth); call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), voidType, NULL); } @@ -2794,7 +2794,7 @@ SharedRuntime::get_resolve_virtual_call_stub(), arg_list, info); } else { - int entry_offset = instanceKlass::vtable_start_offset() + x->vtable_index() * vtableEntry::size(); + int entry_offset = InstanceKlass::vtable_start_offset() + x->vtable_index() * vtableEntry::size(); int vtable_offset = entry_offset * wordSize + vtableEntry::method_offset_in_bytes(); __ call_virtual(target, receiver, result_register, vtable_offset, arg_list, info); } @@ -2905,11 +2905,12 @@ void LIRGenerator::do_ClassIDIntrinsic(Intrinsic* x) { CodeEmitInfo* info = state_for(x); CodeEmitInfo* info2 = new CodeEmitInfo(info); // Clone for the second null check + BasicType klass_pointer_type = NOT_LP64(T_INT) LP64_ONLY(T_LONG); assert(info != NULL, "must have info"); LIRItem arg(x->argument_at(1), this); arg.load_item(); - LIR_Opr klass = new_register(T_OBJECT); - __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), T_OBJECT), klass, info); + LIR_Opr klass = new_pointer_register(); + __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), klass_pointer_type), klass, info); LIR_Opr id = new_register(T_LONG); ByteSize offset = TRACE_ID_OFFSET; LIR_Address* trace_id_addr = new LIR_Address(klass, in_bytes(offset), T_LONG); @@ -3031,21 +3032,21 @@ assert(level > CompLevel_simple, "Shouldn't be here"); int offset = -1; - LIR_Opr counter_holder = new_register(T_OBJECT); + LIR_Opr counter_holder = new_register(T_METADATA); LIR_Opr meth; if (level == CompLevel_limited_profile) { - offset = in_bytes(backedge ? methodOopDesc::backedge_counter_offset() : - methodOopDesc::invocation_counter_offset()); - __ oop2reg(method->constant_encoding(), counter_holder); + offset = in_bytes(backedge ? Method::backedge_counter_offset() : + Method::invocation_counter_offset()); + __ metadata2reg(method->constant_encoding(), counter_holder); meth = counter_holder; } else if (level == CompLevel_full_profile) { - offset = in_bytes(backedge ? methodDataOopDesc::backedge_counter_offset() : - methodDataOopDesc::invocation_counter_offset()); + offset = in_bytes(backedge ? MethodData::backedge_counter_offset() : + MethodData::invocation_counter_offset()); ciMethodData* md = method->method_data_or_null(); assert(md != NULL, "Sanity"); - __ oop2reg(md->constant_encoding(), counter_holder); - meth = new_register(T_OBJECT); - __ oop2reg(method->constant_encoding(), meth); + __ metadata2reg(md->constant_encoding(), counter_holder); + meth = new_register(T_METADATA); + __ metadata2reg(method->constant_encoding(), meth); } else { ShouldNotReachHere(); }