1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ----------------------------------------------------------------------- 2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. 3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Copyright (c) 2008 Red Hat, Inc. 4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project derived from unix64.S 5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project x86-64 Foreign Function Interface for Darwin. 7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Permission is hereby granted, free of charge, to any person obtaining 9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project a copy of this software and associated documentation files (the 10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ``Software''), to deal in the Software without restriction, including 11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project without limitation the rights to use, copy, modify, merge, publish, 12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project distribute, sublicense, and/or sell copies of the Software, and to 13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project permit persons to whom the Software is furnished to do so, subject to 14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project the following conditions: 15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project The above copyright notice and this permission notice shall be included 17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project in all copies or substantial portions of the Software. 18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS 20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR 23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project OTHER DEALINGS IN THE SOFTWARE. 26a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ----------------------------------------------------------------------- */ 27a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __x86_64__ 29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define LIBFFI_ASM 30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <fficonfig.h> 31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <ffi.h> 32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .file "darwin64.S" 34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.text 35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, 37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void *raddr, void (*fnaddr)(void)); 38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Bit o trickiness here -- ARGS+BYTES is the base of the stack frame 40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project for this function. This has been allocated by ffi_call. We also 41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project deallocate some of the stack that has been alloca'd. */ 42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .globl _ffi_call_unix64 45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_call_unix64: 47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW0: 48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq (%rsp), %r10 /* Load return address. */ 49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq (%rdi, %rsi), %rax /* Find local stack base. */ 50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rdx, (%rax) /* Save flags. */ 51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rcx, 8(%rax) /* Save raddr. */ 52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rbp, 16(%rax) /* Save old frame pointer. */ 53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %r10, 24(%rax) /* Relocate return address. */ 54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, %rbp /* Finalize local stack frame. */ 55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW1: 56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rdi, %r10 /* Save a copy of the register area. */ 57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %r8, %r11 /* Save a copy of the target fn. */ 58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movl %r9d, %eax /* Set number of SSE registers. */ 59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Load up all argument registers. */ 61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq (%r10), %rdi 62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 8(%r10), %rsi 63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 16(%r10), %rdx 64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 24(%r10), %rcx 65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 32(%r10), %r8 66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 40(%r10), %r9 67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project testl %eax, %eax 68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project jnz Lload_sse 69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLret_from_load_sse: 70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Deallocate the reg arg area. */ 72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq 176(%r10), %rsp 73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Call the user function. */ 75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project call *%r11 76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Deallocate stack arg area; local stack frame in redzone. */ 78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq 24(%rbp), %rsp 79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 0(%rbp), %rcx /* Reload flags. */ 81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 8(%rbp), %rdi /* Reload raddr. */ 82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq 16(%rbp), %rbp /* Reload old frame pointer. */ 83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW2: 84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* The first byte of the flags contains the FFI_TYPE. */ 86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movzbl %cl, %r10d 87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq Lstore_table(%rip), %r11 88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movslq (%r11, %r10, 4), %r10 89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project addq %r11, %r10 90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project jmp *%r10 91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLstore_table: 93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ 94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ 95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ 96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ 97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ 98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ 99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ 100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ 101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ 102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ 103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ 104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ 105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ 106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ 107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ 108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .text 110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_void: 112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_uint8: 115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movzbq %al, %rax 116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 119a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_sint8: 120a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movsbq %al, %rax 121a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 122a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 123a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 124a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_uint16: 125a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movzwq %ax, %rax 126a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 127a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 128a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_sint16: 129a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movswq %ax, %rax 130a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 131a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 132a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 133a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_uint32: 134a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movl %eax, %eax 135a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 136a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 137a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_sint32: 138a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cltq 139a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 140a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 141a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 142a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_int64: 143a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rdi) 144a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 145a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 146a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_float: 147a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movss %xmm0, (%rdi) 148a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 149a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 150a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_double: 151a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movsd %xmm0, (%rdi) 152a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 153a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_ldouble: 154a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project fstpt (%rdi) 155a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 156a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 157a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLst_struct: 158a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq -20(%rsp), %rsi /* Scratch area in redzone. */ 159a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 160a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* We have to locate the values now, and since we don't want to 161a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project write too much data into the user's return value, we spill the 162a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project value to a 16 byte scratch area first. Bits 8, 9, and 10 163a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project control where the values are located. Only one of the three 164a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bits will be set; see ffi_prep_cif_machdep for the pattern. */ 165a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movd %xmm0, %r10 166a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movd %xmm1, %r11 167a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project testl $0x100, %ecx 168a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %rax, %rdx 169a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %r10, %rax 170a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project testl $0x200, %ecx 171a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %r10, %rdx 172a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project testl $0x400, %ecx 173a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %r10, %rax 174a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %r11, %rdx 175a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rax, (%rsi) 176a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rdx, 8(%rsi) 177a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 178a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Bits 12-31 contain the true size of the structure. Copy from 179a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project the scratch area to the true destination. */ 180a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project shrl $12, %ecx 181a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project rep movsb 182a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 183a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 184a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Many times we can avoid loading any SSE registers at all. 185a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project It's not worth an indirect jump to load the exact set of 186a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project SSE registers needed; zero or all is a good compromise. */ 187a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 188a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW3: 189a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLload_sse: 190a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 48(%r10), %xmm0 191a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 64(%r10), %xmm1 192a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 80(%r10), %xmm2 193a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 96(%r10), %xmm3 194a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 112(%r10), %xmm4 195a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 128(%r10), %xmm5 196a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 144(%r10), %xmm6 197a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa 160(%r10), %xmm7 198a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project jmp Lret_from_load_sse 199a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 200a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW4: 201a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 202a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .globl _ffi_closure_unix64 203a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 204a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_closure_unix64: 205a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW5: 206a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* The carry flag is set by the trampoline iff SSE registers 207a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project are used. Don't clobber it before the branch instruction. */ 208a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq -200(%rsp), %rsp 209a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW6: 210a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rdi, (%rsp) 211a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rsi, 8(%rsp) 212a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rdx, 16(%rsp) 213a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rcx, 24(%rsp) 214a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %r8, 32(%rsp) 215a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %r9, 40(%rsp) 216a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project jc Lsave_sse 217a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLret_from_save_sse: 218a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 219a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %r10, %rdi 220a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq 176(%rsp), %rsi 221a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq %rsp, %rdx 222a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq 208(%rsp), %rcx 223a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project call _ffi_closure_unix64_inner 224a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 225a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* Deallocate stack frame early; return value is now in redzone. */ 226a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project addq $200, %rsp 227a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW7: 228a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 229a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* The first byte of the return value contains the FFI_TYPE. */ 230a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movzbl %al, %r10d 231a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project leaq Lload_table(%rip), %r11 232a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movslq (%r11, %r10, 4), %r10 233a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project addq %r11, %r10 234a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project jmp *%r10 235a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 236a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLload_table: 237a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_void-Lload_table /* FFI_TYPE_VOID */ 238a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int32-Lload_table /* FFI_TYPE_INT */ 239a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ 240a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ 241a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ 242a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ 243a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ 244a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ 245a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ 246a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ 247a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ 248a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ 249a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ 250a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ 251a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ 252a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 253a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .text 254a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 255a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_void: 256a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 257a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 258a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int8: 259a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movzbl -24(%rsp), %eax 260a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 261a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 262a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int16: 263a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movzwl -24(%rsp), %eax 264a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 265a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 266a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int32: 267a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movl -24(%rsp), %eax 268a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 269a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 270a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_int64: 271a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq -24(%rsp), %rax 272a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 273a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 274a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_float: 275a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movss -24(%rsp), %xmm0 276a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 277a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 278a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_double: 279a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movsd -24(%rsp), %xmm0 280a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 281a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 282a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_ldouble: 283a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project fldt -24(%rsp) 284a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 285a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 286a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLld_struct: 287a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, 288a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading 289a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project both rdx and xmm1 with the second word. For the remaining, 290a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project bit 8 set means xmm0 gets the second word, and bit 9 means 291a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project that rax gets the second word. */ 292a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq -24(%rsp), %rcx 293a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq -16(%rsp), %rdx 294a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq -16(%rsp), %xmm1 295a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project testl $0x100, %eax 296a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %rdx, %rcx 297a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movd %rcx, %xmm0 298a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project testl $0x200, %eax 299a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movq -24(%rsp), %rax 300a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project cmovnz %rdx, %rax 301a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ret 302a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 303a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* See the comment above Lload_sse; the same logic applies here. */ 304a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 305a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW8: 306a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLsave_sse: 307a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm0, 48(%rsp) 308a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm1, 64(%rsp) 309a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm2, 80(%rsp) 310a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm3, 96(%rsp) 311a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm4, 112(%rsp) 312a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm5, 128(%rsp) 313a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm6, 144(%rsp) 314a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project movdqa %xmm7, 160(%rsp) 315a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project jmp Lret_from_save_sse 316a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 317a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLUW9: 318a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support 319a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectEH_frame1: 320a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ 321a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$0 322a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLSCIE1: 323a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long 0x0 /* CIE Identifier Tag */ 324a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 /* CIE Version */ 325a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .ascii "zR\0" /* CIE Augmentation */ 326a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ 327a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ 328a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x10 /* CIE RA Column */ 329a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 /* uleb128 0x1; Augmentation size */ 330a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x10 /* FDE Encoding (pcrel sdata4) */ 331a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ 332a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x7 /* uleb128 0x7 */ 333a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x8 /* uleb128 0x8 */ 334a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x90 /* DW_CFA_offset, column 0x10 */ 335a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x1 336a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 337a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLECIE1: 338a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .globl _ffi_call_unix64.eh 339a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_call_unix64.eh: 340a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLSFDE1: 341a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ 342a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$1 343a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLASFDE1: 344a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long LASFDE1-EH_frame1 /* FDE CIE offset */ 345a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .quad LUW0-. /* FDE initial location */ 346a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$2,LUW4-LUW0 /* FDE address range */ 347a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .quad L$set$2 348a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x0 /* Augmentation size */ 349a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 /* DW_CFA_advance_loc4 */ 350a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$3,LUW1-LUW0 351a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$3 352a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 353a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project /* New stack frame based off rbp. This is a itty bit of unwind 354a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project trickery in that the CFA *has* changed. There is no easy way 355a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project to describe it correctly on entry to the function. Fortunately, 356a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project it doesn't matter too much since at all points we can correctly 357a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project unwind back to ffi_call. Note that the location to which we 358a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project moved the return address is (the new) CFA-8, so from the 359a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project perspective of the unwind info, it hasn't moved. */ 360a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ 361a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x6 362a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x20 363a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ 364a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x2 365a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xa /* DW_CFA_remember_state */ 366a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 367a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 /* DW_CFA_advance_loc4 */ 368a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$4,LUW2-LUW1 369a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$4 370a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ 371a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x7 372a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x8 373a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xc0+6 /* DW_CFA_restore, %rbp */ 374a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 375a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 /* DW_CFA_advance_loc4 */ 376a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$5,LUW3-LUW2 377a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$5 378a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xb /* DW_CFA_restore_state */ 379a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 380a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 381a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLEFDE1: 382a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .globl _ffi_closure_unix64.eh 383a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project_ffi_closure_unix64.eh: 384a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLSFDE3: 385a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ 386a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$6 387a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLASFDE3: 388a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long LASFDE3-EH_frame1 /* FDE CIE offset */ 389a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .quad LUW5-. /* FDE initial location */ 390a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$7,LUW9-LUW5 /* FDE address range */ 391a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .quad L$set$7 392a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x0 /* Augmentation size */ 393a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 394a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 /* DW_CFA_advance_loc4 */ 395a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$8,LUW6-LUW5 396a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$8 397a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xe /* DW_CFA_def_cfa_offset */ 398a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 208,1 /* uleb128 208 */ 399a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xa /* DW_CFA_remember_state */ 400a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 401a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 /* DW_CFA_advance_loc4 */ 402a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$9,LUW7-LUW6 403a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$9 404a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xe /* DW_CFA_def_cfa_offset */ 405a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x8 406a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 407a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0x4 /* DW_CFA_advance_loc4 */ 408a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .set L$set$10,LUW8-LUW7 409a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .long L$set$10 410a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .byte 0xb /* DW_CFA_restore_state */ 411a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 412a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .align 3 413a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source ProjectLEFDE3: 414a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project .subsections_via_symbols 415a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 416a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif /* __x86_64__ */ 417