diff options
| author | 2016-08-24 02:57:47 +0000 | |
|---|---|---|
| committer | 2016-08-24 02:57:47 +0000 | |
| commit | 2ccdfbbf786df73b08939c3909e9c9f5301e7a5f (patch) | |
| tree | fd31e05ccfc5d0b7921e0cfb1e60755729ed6bd9 | |
| parent | 47ec97259fefc03978517814a14e07ea4c09d472 (diff) | |
| parent | 4489fb3938291275649c07670daec80e50be4949 (diff) | |
Merge "ART: Improve art_quick_resolve_string for x86."
| -rw-r--r-- | runtime/arch/x86/quick_entrypoints_x86.S | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/runtime/arch/x86/quick_entrypoints_x86.S b/runtime/arch/x86/quick_entrypoints_x86.S index d685ace90f..282f10d410 100644 --- a/runtime/arch/x86/quick_entrypoints_x86.S +++ b/runtime/arch/x86/quick_entrypoints_x86.S @@ -1123,14 +1123,13 @@ DEFINE_FUNCTION art_quick_resolve_string movd %xmm0, %edx // extract index cmp %edx, %eax jne .Lart_quick_resolve_string_slow_path + movl %ecx, %eax #ifdef USE_READ_BARRIER - testl LITERAL(LOCK_WORD_MARK_BIT_MASK_SHIFTED), MIRROR_OBJECT_LOCK_WORD_OFFSET(%ecx) - jz .Lart_quick_resolve_string_slow_path + cmpl LITERAL(0), %fs:THREAD_IS_GC_MARKING_OFFSET + jne .Lart_quick_resolve_string_marking #endif - movl %ecx, %eax RESTORE_SAVE_REFS_ONLY_FRAME ret - .Lart_quick_resolve_string_slow_path: // Outgoing argument set up subl LITERAL(8), %esp // push padding @@ -1143,7 +1142,18 @@ DEFINE_FUNCTION art_quick_resolve_string CFI_ADJUST_CFA_OFFSET(-16) RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER - +.Lart_quick_resolve_string_marking: + testl LITERAL(LOCK_WORD_MARK_BIT_MASK_SHIFTED), MIRROR_OBJECT_LOCK_WORD_OFFSET(%eax) + jnz .Lart_quick_resolve_string_no_rb + subl LITERAL(12), %esp // alignment padding + CFI_ADJUST_CFA_OFFSET(12) + PUSH eax // Pass the string as the first param. + call SYMBOL(artReadBarrierMark) + addl LITERAL(16), %esp + CFI_ADJUST_CFA_OFFSET(-16) +.Lart_quick_resolve_string_no_rb: + RESTORE_SAVE_REFS_ONLY_FRAME + ret END_FUNCTION art_quick_resolve_string ONE_ARG_DOWNCALL art_quick_initialize_static_storage, artInitializeStaticStorageFromCode, RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER |