diff options
author | Roland Levillain <rpl@google.com> | 2017-02-09 16:20:14 +0000 |
---|---|---|
committer | Roland Levillain <rpl@google.com> | 2017-02-09 16:45:52 +0000 |
commit | d966ce7739bebbdce5481900a1b3220b31f3f3ad (patch) | |
tree | 2dc80fcf35d1db73fa4b4a0fa9492d407a1b7a4b /compiler/optimizing/code_generator_arm.cc | |
parent | 8d4b1189639f0d8982bde681ccbdd7c03fe6ddbf (diff) |
Use entrypoint switching on x86 & x86-64 for GC root read barriers.
For consistency reason (with the ARM and ARM64 implementations),
check the read barrier marking entrypoint
(`Thread::Current()->pReadBarrierMarkReg ## root.reg()`)
instead of `Thread::Current()->GetIsGcMarking()` to decide whether
to mark a GC root.
This change should have no impact on the performance or the
size of the generated code.
Test: m test-art-host
Bug: 32638713
Change-Id: Ifd71312992fdfd6067447cccb7d95860f3771b57
Diffstat (limited to 'compiler/optimizing/code_generator_arm.cc')
-rw-r--r-- | compiler/optimizing/code_generator_arm.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc index 20cdae3619..e66408911f 100644 --- a/compiler/optimizing/code_generator_arm.cc +++ b/compiler/optimizing/code_generator_arm.cc @@ -624,6 +624,10 @@ class ArraySetSlowPathARM : public SlowPathCodeARM { // probably still be a from-space reference (unless it gets updated by // another thread, or if another thread installed another object // reference (different from `ref`) in `obj.field`). +// +// If `entrypoint` is a valid location it is assumed to already be +// holding the entrypoint. The case where the entrypoint is passed in +// is for the GcRoot read barrier. class ReadBarrierMarkSlowPathARM : public SlowPathCodeARM { public: ReadBarrierMarkSlowPathARM(HInstruction* instruction, |