src/share/vm/opto/graphKit.cpp
Print this page
rev 6132 : 6653795: C2 intrinsic for Unsafe.getAddress performs pointer sign extension on 32-bit systems
Summary: Native pointers less than 64 bits wide should be extended as an unsigned number.
Reviewed-by: kvn, kevinw, roland
@@ -1123,10 +1123,21 @@
if (offset_con != Type::OffsetBot) {
return longcon((jlong) offset_con);
}
return _gvn.transform( new (C) ConvI2LNode(offset));
}
+
+Node* GraphKit::ConvI2UL(Node* offset) {
+ juint offset_con = (juint) find_int_con(offset, Type::OffsetBot);
+ if (offset_con != (juint) Type::OffsetBot) {
+ return longcon((julong) offset_con);
+ }
+ Node* conv = _gvn.transform( new (C) ConvI2LNode(offset));
+ Node* mask = _gvn.transform( ConLNode::make(C, (julong) max_juint) );
+ return _gvn.transform( new (C) AndLNode(conv, mask) );
+}
+
Node* GraphKit::ConvL2I(Node* offset) {
// short-circuit a common case
jlong offset_con = find_long_con(offset, (jlong)Type::OffsetBot);
if (offset_con != (jlong)Type::OffsetBot) {
return intcon((int) offset_con);