--- a/src/hotspot/share/oops/accessBackend.hpp Wed Jan 10 10:21:25 2018 +0100
+++ b/src/hotspot/share/oops/accessBackend.hpp Wed Jan 10 18:04:56 2018 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
#include "metaprogramming/conditional.hpp"
#include "metaprogramming/enableIf.hpp"
#include "metaprogramming/integralConstant.hpp"
+#include "metaprogramming/isSame.hpp"
#include "utilities/debug.hpp"
#include "utilities/globalDefinitions.hpp"
@@ -54,11 +55,11 @@
BARRIER_CLONE
};
- template <DecoratorSet decorators>
+ template <DecoratorSet decorators, typename T>
struct MustConvertCompressedOop: public IntegralConstant<bool,
HasDecorator<decorators, INTERNAL_VALUE_IS_OOP>::value &&
- HasDecorator<decorators, INTERNAL_CONVERT_COMPRESSED_OOP>::value &&
- HasDecorator<decorators, INTERNAL_RT_USE_COMPRESSED_OOPS>::value> {};
+ IsSame<typename HeapOopType<decorators>::type, narrowOop>::value &&
+ IsSame<T, oop>::value> {};
// This metafunction returns an appropriate oop type if the value is oop-like
// and otherwise returns the same type T.
@@ -172,13 +173,13 @@
// Only encode if INTERNAL_VALUE_IS_OOP
template <DecoratorSet idecorators, typename T>
static inline typename EnableIf<
- AccessInternal::MustConvertCompressedOop<idecorators>::value,
+ AccessInternal::MustConvertCompressedOop<idecorators, T>::value,
typename HeapOopType<idecorators>::type>::type
encode_internal(T value);
template <DecoratorSet idecorators, typename T>
static inline typename EnableIf<
- !AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+ !AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
encode_internal(T value) {
return value;
}
@@ -192,12 +193,12 @@
// Only decode if INTERNAL_VALUE_IS_OOP
template <DecoratorSet idecorators, typename T>
static inline typename EnableIf<
- AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+ AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
decode_internal(typename HeapOopType<idecorators>::type value);
template <DecoratorSet idecorators, typename T>
static inline typename EnableIf<
- !AccessInternal::MustConvertCompressedOop<idecorators>::value, T>::type
+ !AccessInternal::MustConvertCompressedOop<idecorators, T>::value, T>::type
decode_internal(T value) {
return value;
}