summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/code_generator_arm64.h
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2018-04-25 17:27:45 +0100
committerVladimir Marko <vmarko@google.com>2018-07-25 18:34:19 +0100
commit450f1d0fa0c40198e63c3e016f02e40ac854b0cb (patch)
tree0606a5c722be0d706242c015cb1218021c5c1309 /compiler/optimizing/code_generator_arm64.h
parentda6220a29fae95f17edd5374dc6bc2d4870a84da (diff)
downloadart-450f1d0fa0c40198e63c3e016f02e40ac854b0cb.tar.gz
art-450f1d0fa0c40198e63c3e016f02e40ac854b0cb.tar.bz2
art-450f1d0fa0c40198e63c3e016f02e40ac854b0cb.zip
ARM/ARM64: Use introspection marking for JITted code.
Impact on Golem benchmarks is within noise. Test: m test-art-host-gtest Test: Pixel 2 XL boots. Test: testrunner.py --target --optimizing --jit Bug: 36141117 Change-Id: Idf5177ee5cd34e2034d298a7907240b3e3e12d82
Diffstat (limited to 'compiler/optimizing/code_generator_arm64.h')
-rw-r--r--compiler/optimizing/code_generator_arm64.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/compiler/optimizing/code_generator_arm64.h b/compiler/optimizing/code_generator_arm64.h
index 93bab3180c..c07d1eaf95 100644
--- a/compiler/optimizing/code_generator_arm64.h
+++ b/compiler/optimizing/code_generator_arm64.h
@@ -619,9 +619,9 @@ class CodeGeneratorARM64 : public CodeGenerator {
dex::StringIndex string_index,
vixl::aarch64::Label* adrp_label = nullptr);
- // Add a new baker read barrier patch and return the label to be bound
- // before the CBNZ instruction.
- vixl::aarch64::Label* NewBakerReadBarrierPatch(uint32_t custom_data);
+ // Emit the CBNZ instruction for baker read barrier and record
+ // the associated patch for AOT or slow path for JIT.
+ void EmitBakerReadBarrierCbnz(uint32_t custom_data);
vixl::aarch64::Literal<uint32_t>* DeduplicateBootImageAddressLiteral(uint64_t address);
vixl::aarch64::Literal<uint32_t>* DeduplicateJitStringLiteral(const DexFile& dex_file,
@@ -928,6 +928,19 @@ class CodeGeneratorARM64 : public CodeGenerator {
// Patches for class literals in JIT compiled code.
TypeToLiteralMap jit_class_patches_;
+ // Baker read barrier slow paths, mapping custom data (uint32_t) to label.
+ // Wrap the label to work around vixl::aarch64::Label being non-copyable
+ // and non-moveable and as such unusable in ArenaSafeMap<>.
+ struct LabelWrapper {
+ LabelWrapper(const LabelWrapper& src)
+ : label() {
+ DCHECK(!src.label.IsLinked() && !src.label.IsBound());
+ }
+ LabelWrapper() = default;
+ vixl::aarch64::Label label;
+ };
+ ArenaSafeMap<uint32_t, LabelWrapper> jit_baker_read_barrier_slow_paths_;
+
friend class linker::Arm64RelativePatcherTest;
DISALLOW_COPY_AND_ASSIGN(CodeGeneratorARM64);
};