Mercurial > hg > truffle
diff src/share/vm/graal/graalCodeInstaller.cpp @ 15018:db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Mon, 07 Apr 2014 16:09:17 -0700 |
parents | 8db730993642 |
children | 5c71dcf0915d |
line wrap: on
line diff
--- a/src/share/vm/graal/graalCodeInstaller.cpp Mon Apr 07 23:35:41 2014 +0200 +++ b/src/share/vm/graal/graalCodeInstaller.cpp Mon Apr 07 16:09:17 2014 -0700 @@ -180,14 +180,14 @@ // Records any Metadata values embedded in a Constant (e.g., the value returned by HotSpotResolvedObjectType.klass()). static void record_metadata_in_constant(oop constant, OopRecorder* oop_recorder) { - char kind = Kind::typeChar(Constant::kind(constant)); - char wordKind = 'j'; - if (kind == wordKind) { - oop obj = Constant::object(constant); - jlong prim = Constant::primitive(constant); - if (obj != NULL) { - record_metadata_reference(obj, prim, false, oop_recorder); - } + if (constant->is_a(HotSpotMetaspaceConstant::klass())) { + oop obj = HotSpotMetaspaceConstant::metaspaceObject(constant); + jlong prim = HotSpotMetaspaceConstant::primitive(constant); + assert(Kind::typeChar(Constant::kind(constant)) == 'j', "must have word kind"); + assert(obj != NULL, "must have an object"); + assert(prim != 0, "must have a primitive value"); + + record_metadata_reference(obj, prim, false, oop_recorder); } } @@ -263,17 +263,19 @@ return value; } else if (value->is_a(Constant::klass())){ record_metadata_in_constant(value, oop_recorder); - jlong prim = Constant::primitive(value); if (type == T_INT || type == T_FLOAT || type == T_SHORT || type == T_CHAR || type == T_BOOLEAN || type == T_BYTE) { + jlong prim = PrimitiveConstant::primitive(value); return new ConstantIntValue(*(jint*)&prim); } else if (type == T_LONG || type == T_DOUBLE) { + jlong prim = PrimitiveConstant::primitive(value); second = new ConstantIntValue(0); return new ConstantLongValue(prim); } else if (type == T_OBJECT) { - oop obj = Constant::object(value); - if (obj == NULL) { + if (value->is_a(NullConstant::klass())) { return new ConstantOopWriteValue(NULL); } else { + oop obj = HotSpotObjectConstant::object(value); + assert(obj != NULL, "null value must be in NullConstant"); return new ConstantOopWriteValue(JNIHandles::make_local(obj)); } } else if (type == T_ADDRESS) {