summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_arm.cc
diff options
context:
space:
mode:
authorRoland Levillain <rpl@google.com>2017-02-09 16:20:14 +0000
committerRoland Levillain <rpl@google.com>2017-02-09 16:45:52 +0000
commitd966ce7739bebbdce5481900a1b3220b31f3f3ad (patch)
tree2dc80fcf35d1db73fa4b4a0fa9492d407a1b7a4b /compiler/optimizing/code_generator_arm.cc
parent8d4b1189639f0d8982bde681ccbdd7c03fe6ddbf (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.cc4
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,