summaryrefslogtreecommitdiff
path: root/compiler/optimizing/jit_patches_arm64.h
diff options
context:
space:
mode:
author Almaz Mingaleev <mingaleev@google.com> 2024-11-06 12:42:18 +0000
committer Almaz Mingaleev <mingaleev@google.com> 2024-11-06 15:08:37 +0000
commita687066b7043dbc1be8f85001eeb0f341cd25885 (patch)
tree4a718fe531d822ab7b065b62549fdaff7d0ffcde /compiler/optimizing/jit_patches_arm64.h
parent6b32080cb3f09c786128043df88e53fb344b7a15 (diff)
arm64: Store resolved MethodType-s in .bss.
Bug: 297147201 Test: art/test/testrunner/testrunner.py --target --64 --jit Test: art/test/testrunner/testrunner.py --target --64 Change-Id: Iecd5575e5eb0d161cbc338f63f29cb52b0c23177
Diffstat (limited to 'compiler/optimizing/jit_patches_arm64.h')
-rw-r--r--compiler/optimizing/jit_patches_arm64.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/compiler/optimizing/jit_patches_arm64.h b/compiler/optimizing/jit_patches_arm64.h
index f5d92804ac..e13060210a 100644
--- a/compiler/optimizing/jit_patches_arm64.h
+++ b/compiler/optimizing/jit_patches_arm64.h
@@ -20,10 +20,12 @@
#include "base/arena_allocator.h"
#include "base/arena_containers.h"
#include "dex/dex_file.h"
+#include "dex/proto_reference.h"
#include "dex/string_reference.h"
#include "dex/type_reference.h"
#include "handle.h"
#include "mirror/class.h"
+#include "mirror/method_type.h"
#include "mirror/string.h"
#include "utils/arm64/assembler_arm64.h"
@@ -56,7 +58,9 @@ class JitPatchesARM64 {
jit_string_patches_(StringReferenceValueComparator(),
allocator->Adapter(kArenaAllocCodeGenerator)),
jit_class_patches_(TypeReferenceValueComparator(),
- allocator->Adapter(kArenaAllocCodeGenerator)) {
+ allocator->Adapter(kArenaAllocCodeGenerator)),
+ jit_method_type_patches_(ProtoReferenceValueComparator(),
+ allocator->Adapter(kArenaAllocCodeGenerator)) {
}
using Uint64ToLiteralMap = ArenaSafeMap<uint64_t, vixl::aarch64::Literal<uint64_t>*>;
@@ -67,6 +71,9 @@ class JitPatchesARM64 {
using TypeToLiteralMap = ArenaSafeMap<TypeReference,
vixl::aarch64::Literal<uint32_t>*,
TypeReferenceValueComparator>;
+ using ProtoToLiteralMap = ArenaSafeMap<ProtoReference,
+ vixl::aarch64::Literal<uint32_t>*,
+ ProtoReferenceValueComparator>;
vixl::aarch64::Literal<uint32_t>* DeduplicateUint32Literal(uint32_t value);
vixl::aarch64::Literal<uint64_t>* DeduplicateUint64Literal(uint64_t value);
@@ -81,6 +88,11 @@ class JitPatchesARM64 {
dex::TypeIndex type_index,
Handle<mirror::Class> handle,
CodeGenerationData* code_generation_data);
+ vixl::aarch64::Literal<uint32_t>* DeduplicateJitMethodTypeLiteral(
+ const DexFile& dex_file,
+ dex::ProtoIndex proto_index,
+ Handle<mirror::MethodType> handle,
+ CodeGenerationData* code_generation_data);
void EmitJitRootPatches(uint8_t* code,
const uint8_t* roots_data,
@@ -99,6 +111,8 @@ class JitPatchesARM64 {
StringToLiteralMap jit_string_patches_;
// Patches for class literals in JIT compiled code.
TypeToLiteralMap jit_class_patches_;
+ // Patches for MethodType literals in JIT compiled code.
+ ProtoToLiteralMap jit_method_type_patches_;
};
} // namespace arm64