From 56ece93b527cfd7d3f2a82861c8be4441ff170e1 Mon Sep 17 00:00:00 2001 From: Christina Wadsworth Date: Mon, 22 Aug 2016 18:16:15 -0700 Subject: [PATCH] ART: Improve art_quick_resolve_string for arm. Check gc_is_marking instead of the mark bit first, this makes it that we don't go slow path if the GC is not running. Test: test-art-host Bug: 20323084 Change-Id: I834742fbb670302ba0955a579008ff75914a2673 --- runtime/arch/arm/quick_entrypoints_arm.S | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S index 881bebe00..e25e93fcb 100644 --- a/runtime/arch/arm/quick_entrypoints_arm.S +++ b/runtime/arch/arm/quick_entrypoints_arm.S @@ -1046,20 +1046,32 @@ ENTRY art_quick_resolve_string cmp r0, r3 bne .Lart_quick_resolve_string_slow_path #ifdef USE_READ_BARRIER - ldr r3, [r2, MIRROR_OBJECT_LOCK_WORD_OFFSET] - tst r3, #LOCK_WORD_MARK_BIT_MASK_SHIFTED - beq .Lart_quick_resolve_string_slow_path + ldr r3, [rSELF, #THREAD_IS_GC_MARKING_OFFSET] + cbnz r3, .Lart_quick_resolve_string_marking #endif mov r0, r2 bx lr - +// Slow path case, the index did not match .Lart_quick_resolve_string_slow_path: - SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC - mov r1, r9 @ pass Thread::Current + SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC + mov r1, r9 @ pass Thread::Current mov r3, sp - bl artResolveStringFromCode @ (uint32_t type_idx, Method* method, Thread*) + bl artResolveStringFromCode @ (uint32_t type_idx, Method* method, Thread*) RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER +// GC is marking case, need to check the mark bit. +.Lart_quick_resolve_string_marking: + ldr r3, [r2, MIRROR_OBJECT_LOCK_WORD_OFFSET] + tst r3, #LOCK_WORD_MARK_BIT_MASK_SHIFTED + mov r0, r2 + bne .Lart_quick_resolve_string_no_rb + push {r1, r2, r3, lr} @ Save x1, LR + .cfi_adjust_cfa_offset 16 + bl artReadBarrierMark @ Get the marked string back. + pop {r1, r2, r3, lr} @ Restore registers. + .cfi_adjust_cfa_offset -16 +.Lart_quick_resolve_string_no_rb: + bx lr END art_quick_resolve_string // Generate the allocation entrypoints for each allocator. -- 2.11.0