[ptr-compr] Use __builtin_assume_aligned() when available
... to let C++ compiler know that isolate root is 4Gb aligned and give it a chance to generate a better code. Bug: v8:9353 Change-Id: Ibd23c14cc44107c722a446a84dd14ca66f3bccfe Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1776079 Reviewed-by: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#63445}
This commit is contained in:
parent
2e0bc516b7
commit
fe7b3f9dbb
@ -216,6 +216,7 @@
|
|||||||
# define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \
|
# define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \
|
||||||
(__has_attribute(warn_unused_result))
|
(__has_attribute(warn_unused_result))
|
||||||
|
|
||||||
|
# define V8_HAS_BUILTIN_ASSUME_ALIGNED (__has_builtin(__builtin_assume_aligned))
|
||||||
# define V8_HAS_BUILTIN_BSWAP16 (__has_builtin(__builtin_bswap16))
|
# define V8_HAS_BUILTIN_BSWAP16 (__has_builtin(__builtin_bswap16))
|
||||||
# define V8_HAS_BUILTIN_BSWAP32 (__has_builtin(__builtin_bswap32))
|
# define V8_HAS_BUILTIN_BSWAP32 (__has_builtin(__builtin_bswap32))
|
||||||
# define V8_HAS_BUILTIN_BSWAP64 (__has_builtin(__builtin_bswap64))
|
# define V8_HAS_BUILTIN_BSWAP64 (__has_builtin(__builtin_bswap64))
|
||||||
@ -262,6 +263,7 @@
|
|||||||
# define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \
|
# define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \
|
||||||
(!V8_CC_INTEL && V8_GNUC_PREREQ(4, 1, 0))
|
(!V8_CC_INTEL && V8_GNUC_PREREQ(4, 1, 0))
|
||||||
|
|
||||||
|
# define V8_HAS_BUILTIN_ASSUME_ALIGNED (V8_GNUC_PREREQ(4, 7, 0))
|
||||||
# define V8_HAS_BUILTIN_CLZ (V8_GNUC_PREREQ(3, 4, 0))
|
# define V8_HAS_BUILTIN_CLZ (V8_GNUC_PREREQ(3, 4, 0))
|
||||||
# define V8_HAS_BUILTIN_CTZ (V8_GNUC_PREREQ(3, 4, 0))
|
# define V8_HAS_BUILTIN_CTZ (V8_GNUC_PREREQ(3, 4, 0))
|
||||||
# define V8_HAS_BUILTIN_EXPECT (V8_GNUC_PREREQ(2, 96, 0))
|
# define V8_HAS_BUILTIN_EXPECT (V8_GNUC_PREREQ(2, 96, 0))
|
||||||
@ -300,6 +302,12 @@
|
|||||||
# define V8_INLINE inline
|
# define V8_INLINE inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if V8_HAS_BUILTIN_ASSUME_ALIGNED
|
||||||
|
# define V8_ASSUME_ALIGNED(ptr, alignment) \
|
||||||
|
__builtin_assume_aligned((ptr), (alignment))
|
||||||
|
#else
|
||||||
|
# define V8_ASSUME_ALIGNED(ptr) (ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
// A macro used to tell the compiler to never inline a particular function.
|
// A macro used to tell the compiler to never inline a particular function.
|
||||||
// Don't bother for debug builds.
|
// Don't bother for debug builds.
|
||||||
|
@ -35,7 +35,12 @@ V8_INLINE Address GetIsolateRoot<Address>(Address on_heap_addr) {
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
V8_INLINE Address GetIsolateRoot<Isolate*>(Isolate* isolate) {
|
V8_INLINE Address GetIsolateRoot<Isolate*>(Isolate* isolate) {
|
||||||
return isolate->isolate_root();
|
Address isolate_root = isolate->isolate_root();
|
||||||
|
#ifdef V8_COMPRESS_POINTERS
|
||||||
|
isolate_root = reinterpret_cast<Address>(V8_ASSUME_ALIGNED(
|
||||||
|
reinterpret_cast<void*>(isolate_root), kPtrComprIsolateRootAlignment));
|
||||||
|
#endif
|
||||||
|
return isolate_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decompresses smi value.
|
// Decompresses smi value.
|
||||||
|
Loading…
Reference in New Issue
Block a user