diff options
author | 2019-12-03 14:36:42 +0000 | |
---|---|---|
committer | 2019-12-04 12:04:36 +0000 | |
commit | a00b54b74bee06c006b8bebfbef85e2801de293c (patch) | |
tree | 6edb2a96c1f89ae913e6b5f190b117cb290239e8 /runtime/thread.h | |
parent | e571a283b73fb4621c401811f523503b3266564b (diff) |
Helpers and refactorings to prepare for interpreter optimizations (x64)
- Add data structure offsets that will be used in assembly code.
- Be explicit about a stack overflow in a fault handler.
- Move assembly helper code in asm_support so interpreter can use it.
- Support putting literals in InterpreterCache.
- Fix artHandleFillArrayDataFromCode for x64.
Bug: 119800099
Test: test.py
Change-Id: I2729f87fe5d09c04ae2e7081636f0cd89ac14c21
Diffstat (limited to 'runtime/thread.h')
-rw-r--r-- | runtime/thread.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/runtime/thread.h b/runtime/thread.h index 29375e51f4..d6faa95824 100644 --- a/runtime/thread.h +++ b/runtime/thread.h @@ -718,7 +718,14 @@ class Thread { } public: - static uint32_t QuickEntryPointOffsetWithSize(size_t quick_entrypoint_offset, + template<PointerSize pointer_size> + static constexpr ThreadOffset<pointer_size> QuickEntryPointOffset( + size_t quick_entrypoint_offset) { + return ThreadOffsetFromTlsPtr<pointer_size>( + OFFSETOF_MEMBER(tls_ptr_sized_values, quick_entrypoints) + quick_entrypoint_offset); + } + + static constexpr uint32_t QuickEntryPointOffsetWithSize(size_t quick_entrypoint_offset, PointerSize pointer_size) { if (pointer_size == PointerSize::k32) { return QuickEntryPointOffset<PointerSize::k32>(quick_entrypoint_offset). @@ -730,12 +737,6 @@ class Thread { } template<PointerSize pointer_size> - static ThreadOffset<pointer_size> QuickEntryPointOffset(size_t quick_entrypoint_offset) { - return ThreadOffsetFromTlsPtr<pointer_size>( - OFFSETOF_MEMBER(tls_ptr_sized_values, quick_entrypoints) + quick_entrypoint_offset); - } - - template<PointerSize pointer_size> static ThreadOffset<pointer_size> JniEntryPointOffset(size_t jni_entrypoint_offset) { return ThreadOffsetFromTlsPtr<pointer_size>( OFFSETOF_MEMBER(tls_ptr_sized_values, jni_entrypoints) + jni_entrypoint_offset); @@ -743,7 +744,7 @@ class Thread { // Return the entry point offset integer value for ReadBarrierMarkRegX, where X is `reg`. template <PointerSize pointer_size> - static int32_t ReadBarrierMarkEntryPointsOffset(size_t reg) { + static constexpr int32_t ReadBarrierMarkEntryPointsOffset(size_t reg) { // The entry point list defines 30 ReadBarrierMarkRegX entry points. DCHECK_LT(reg, 30u); // The ReadBarrierMarkRegX entry points are ordered by increasing |