< prev index next >
src/hotspot/share/runtime/sharedRuntime.cpp
Print this page
*** 2291,2301 ****
--- 2291,2304 ----
case T_VALUETYPE: {
// If value types are passed as fields, return 'in' to differentiate
// between a T_VALUETYPE and a T_OBJECT in the signature.
return ValueTypePassFieldsAsArgs ? in : adapter_encoding(T_OBJECT, false);
}
+
case T_VALUETYPEPTR:
+ return T_VALUETYPE; // TODO hack because we don't have enough bits to represent T_VALUETYPEPTR.
+
case T_OBJECT:
case T_ARRAY:
// In other words, we assume that any register good enough for
// an int or long is good enough for a managed pointer.
#ifdef _LP64
*** 2673,2684 ****
} else {
sig_extended.push(SigEntry(T_OBJECT));
}
}
for (SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) {
! if (ss.type() == T_VALUETYPE) {
! Symbol* name = ss.as_symbol(CHECK_NULL);
if (!ValueTypePassFieldsAsArgs) {
sig_extended.push(SigEntry(T_VALUETYPEPTR));
} else {
// Method handle intrinsics with a __Value argument may be created during
// compilation. Only do a full system dictionary lookup if the argument name
--- 2676,2687 ----
} else {
sig_extended.push(SigEntry(T_OBJECT));
}
}
for (SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) {
! Symbol* sym = ss.as_symbol_or_null();
! if (sym != NULL && method->method_holder()->is_declared_value_type(sym)) {
if (!ValueTypePassFieldsAsArgs) {
sig_extended.push(SigEntry(T_VALUETYPEPTR));
} else {
// Method handle intrinsics with a __Value argument may be created during
// compilation. Only do a full system dictionary lookup if the argument name
< prev index next >