@@ -15,70 +15,68 @@ #include "config.h" #include "platform.h" -.intel_syntax noprefix - .globl objc_msg_lookup .globl objc_msg_lookup_stret .globl objc_msg_lookup_super .globl objc_msg_lookup_super_stret .section .text .macro GENERATE_LOOKUP name notFound \name: - test rdi, rdi + testq %rdi, %rdi jz .LreturnNilMethod - test dil, 1 + testb $1, %dil jnz .LtaggedPointer_\name - mov r8, [rdi] - mov r8, [r8 + 64] + movq (%rdi), %r8 + movq 64(%r8), %r8 .Lmain_\name: - mov rax, [rsi] - movzx ecx, ah - movzx edx, al + movq (%rsi), %rax + movzbl %ah, %ecx + movzbl %al, %edx #ifdef OF_SELUID24 - shr eax, 16 + shrl $16, %eax - mov r8, [r8 + 8 * rax] + movq (%r8,%rax,8), %r8 #endif - mov r8, [r8 + 8 * rcx] - mov rax, [r8 + 8 * rdx] + movq (%r8,%rcx,8), %r8 + movq (%r8,%rdx,8), %rax - test rax, rax + testq %rax, %rax jz \notFound@PLT ret .LtaggedPointer_\name: - mov rax, [rip + objc_taggedPointerSecret@GOTPCREL] - xor rdi, [rax] - and dil, 0xE - movzx r8d, dil - - mov rax, [rip + objc_taggedPointerClasses@GOTPCREL] - mov r8, [rax + 4 * r8] - mov r8, [r8 + 64] + movq objc_taggedPointerSecret@GOTPCREL(%rip), %rax + xorq (%rax), %rdi + andb $0xE, %dil + movzbl %dil, %r8d + + movq objc_taggedPointerClasses@GOTPCREL(%rip), %rax + movq (%rax,%r8,4), %r8 + movq 64(%r8), %r8 jmp .Lmain_\name .type \name, %function .size \name, .-\name .endm .macro GENERATE_LOOKUP_SUPER name lookup \name: - mov r8, rdi - mov rdi, [rdi] - test rdi, rdi + movq %rdi, %r8 + movq (%rdi), %rdi + testq %rdi, %rdi jz .LreturnNilMethod - mov r8, [r8 + 8] - mov r8, [r8 + 64] + movq 8(%r8), %r8 + movq 64(%r8), %r8 jmp .Lmain_\lookup .type \name, %function .size \name, .-\name .endm @@ -86,15 +84,15 @@ GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup GENERATE_LOOKUP_SUPER objc_msg_lookup_super_stret objc_msg_lookup_stret .LreturnNilMethod: - lea rax, [rip + .LnilMethod] + leaq .LnilMethod(%rip), %rax ret .LnilMethod: - xor rax, rax + xorq %rax, %rax ret #if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD) .section .note.GNU-stack, "", %progbits #endif