From a00b54b74bee06c006b8bebfbef85e2801de293c Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Tue, 3 Dec 2019 14:36:42 +0000 Subject: 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 --- runtime/thread.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'runtime/thread.h') 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 + static constexpr ThreadOffset QuickEntryPointOffset( + size_t quick_entrypoint_offset) { + return ThreadOffsetFromTlsPtr( + 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(quick_entrypoint_offset). @@ -729,12 +736,6 @@ class Thread { } } - template - static ThreadOffset QuickEntryPointOffset(size_t quick_entrypoint_offset) { - return ThreadOffsetFromTlsPtr( - OFFSETOF_MEMBER(tls_ptr_sized_values, quick_entrypoints) + quick_entrypoint_offset); - } - template static ThreadOffset JniEntryPointOffset(size_t jni_entrypoint_offset) { return ThreadOffsetFromTlsPtr( @@ -743,7 +744,7 @@ class Thread { // Return the entry point offset integer value for ReadBarrierMarkRegX, where X is `reg`. template - 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 -- cgit v1.2.3-59-g8ed1b