Index: src/forwarding/forwarding-amd64-win64.S ================================================================== --- src/forwarding/forwarding-amd64-win64.S +++ src/forwarding/forwarding-amd64-win64.S @@ -13,170 +13,168 @@ * file. */ #include "config.h" -.intel_syntax noprefix - .globl OFForward .globl OFForward_stret .section .text OFForward: - push rbp - mov rbp, rsp + pushq %rbp + movq %rsp, %rbp /* Save all arguments */ - sub rsp, 0x90 /* 16-byte alignment */ - mov [rbp - 0x28], rax - mov [rbp - 0x30], rcx - mov [rbp - 0x38], rdx - mov [rbp - 0x40], r8 - mov [rbp - 0x48], r9 - movaps [rbp - 0x60], xmm0 - movaps [rbp - 0x70], xmm1 - movaps [rbp - 0x80], xmm2 - movaps [rbp - 0x90], xmm3 + subq $0x90, %rsp /* 16-byte alignment */ + movq %rax, -0x28(%rbp) + movq %rcx, -0x30(%rbp) + movq %rdx, -0x38(%rbp) + movq %r8, -0x40(%rbp) + movq %r9, -0x48(%rbp) + movaps %xmm0, -0x60(%rbp) + movaps %xmm1, -0x70(%rbp) + movaps %xmm2, -0x80(%rbp) + movaps %xmm3, -0x90(%rbp) call object_getClass - mov rcx, rax - lea rdx, [rip + .Lsel_forwardingTargetForSelector_] + movq %rax, %rcx + leaq .Lsel_forwardingTargetForSelector_(%rip), %rdx call class_respondsToSelector - test rax, rax - jz 0f - - mov rcx, [rbp - 0x30] - lea rdx, [rip + .Lsel_forwardingTargetForSelector_] - call objc_msg_lookup - - mov rcx, [rbp - 0x30] - lea rdx, [rip + .Lsel_forwardingTargetForSelector_] - mov r8, [rbp - 0x38] - call rax - - test rax, rax - jz 0f - cmp rax, [rbp - 0x30] + testq %rax, %rax + jz 0f + + movq -0x30(%rbp), %rcx + leaq .Lsel_forwardingTargetForSelector_(%rip), %rdx + call objc_msg_lookup + + movq -0x30(%rbp), %rcx + leaq .Lsel_forwardingTargetForSelector_(%rip), %rdx + movq -0x38(%rbp), %r8 + call *%rax + + testq %rax, %rax + jz 0f + cmpq -0x30(%rbp), %rax je 0f - mov [rbp - 0x30], rax + movq %rax, -0x30(%rbp) - mov rcx, rax - mov rdx, [rbp - 0x38] + movq %rax, %rcx + movq -0x38(%rbp), %rdx call objc_msg_lookup - mov r11, rax + movq %rax, %r11 /* Restore all arguments */ - movaps xmm3, [rbp - 0x90] - movaps xmm2, [rbp - 0x80] - movaps xmm1, [rbp - 0x70] - movaps xmm0, [rbp - 0x60] - mov r9, [rbp - 0x48] - mov r8, [rbp - 0x40] - mov rdx, [rbp - 0x38] - mov rcx, [rbp - 0x30] - mov rax, [rbp - 0x28] - - mov rsp, rbp - pop rbp - - jmp r11 + movaps -0x90(%rbp), %xmm3 + movaps -0x80(%rbp), %xmm2 + movaps -0x70(%rbp), %xmm1 + movaps -0x60(%rbp), %xmm0 + movq -0x48(%rbp), %r9 + movq -0x40(%rbp), %r8 + movq -0x38(%rbp), %rdx + movq -0x30(%rbp), %rcx + movq -0x28(%rbp), %rax + + movq %rbp, %rsp + popq %rbp + + jmpq *%r11 0: - mov rcx, [rbp - 0x30] - mov rdx, [rbp - 0x38] + movq -0x30(%rbp), %rcx + movq -0x38(%rbp), %rdx - mov rsp, rbp - pop rbp + movq %rbp, %rsp + popq %rbp jmp OFMethodNotFound .def OFForward .scl 2 .type 32 .endef OFForward_stret: - push rbp - mov rbp, rsp + pushq %rbp + movq %rsp, %rbp /* Save all arguments */ - sub rsp, 0x90 /* 16-byte alignment */ - mov [rbp - 0x28], rax - mov [rbp - 0x30], rcx - mov [rbp - 0x38], rdx - mov [rbp - 0x40], r8 - mov [rbp - 0x48], r9 - movaps [rbp - 0x60], xmm0 - movaps [rbp - 0x70], xmm1 - movaps [rbp - 0x80], xmm2 - movaps [rbp - 0x90], xmm3 - - mov rcx, rdx + subq $0x90, %rsp /* 16-byte alignment */ + movq %rax, -0x28(%rbp) + movq %rcx, -0x30(%rbp) + movq %rdx, -0x38(%rbp) + movq %r8, -0x40(%rbp) + movq %r9, -0x48(%rbp) + movaps %xmm0, -0x60(%rbp) + movaps %xmm1, -0x70(%rbp) + movaps %xmm2, -0x80(%rbp) + movaps %xmm3, -0x90(%rbp) + + movq %rdx, %rcx call object_getClass - mov rcx, rax - lea rdx, [rip + .Lsel_forwardingTargetForSelector_] + movq %rax, %rcx + leaq .Lsel_forwardingTargetForSelector_(%rip), %rdx call class_respondsToSelector - test rax, rax + testq %rax, %rax jz 0f - mov rcx, [rbp - 0x38] - lea rdx, [rip + .Lsel_forwardingTargetForSelector_] + movq -0x38(%rbp), %rcx + leaq .Lsel_forwardingTargetForSelector_(%rip), %rdx call objc_msg_lookup - mov rcx, [rbp - 0x38] - lea rdx, [rip + .Lsel_forwardingTargetForSelector_] - mov r8, [rbp - 0x40] - call rax + movq -0x38(%rbp), %rcx + leaq .Lsel_forwardingTargetForSelector_(%rip), %rdx + movq -0x40(%rbp), %r8 + call *%rax - test rax, rax + testq %rax, %rax jz 0f - cmp rax, [rbp - 0x38] + cmpq -0x38(%rbp), %rax je 0f - mov [rbp - 0x38], rax + movq %rax, -0x38(%rbp) - mov rcx, rax - mov rdx, [rbp - 0x40] + movq %rax, %rcx + movq -0x40(%rbp), %rdx call objc_msg_lookup_stret - mov r11, rax + movq %rax, %r11 /* Restore all arguments */ - movaps xmm3, [rbp - 0x90] - movaps xmm2, [rbp - 0x80] - movaps xmm1, [rbp - 0x70] - movaps xmm0, [rbp - 0x60] - mov r9, [rbp - 0x48] - mov r8, [rbp - 0x40] - mov rdx, [rbp - 0x38] - mov rcx, [rbp - 0x30] - mov rax, [rbp - 0x28] - - mov rsp, rbp - pop rbp - - jmp r11 + movaps -0x90(%rbp), %xmm3 + movaps -0x80(%rbp), %xmm2 + movaps -0x70(%rbp), %xmm1 + movaps -0x60(%rbp), %xmm0 + movq -0x48(%rbp), %r9 + movq -0x40(%rbp), %r8 + movq -0x38(%rbp), %rdx + movq -0x30(%rbp), %rcx + movq -0x28(%rbp), %rax + + movq %rbp, %rsp + popq %rbp + + jmpq *%r11 0: - mov rcx, [rbp - 0x30] - mov rdx, [rbp - 0x38] - mov r8, [rbp - 0x40] + movq -0x30(%rbp), %rcx + movq -0x38(%rbp), %rdx + movq -0x40(%rbp), %r8 - mov rsp, rbp - pop rbp + movq %rbp, %rsp + popq %rbp jmp OFMethodNotFound_stret .def OFForward_stret .scl 2 .type 32 .endef .Linit: - lea rcx, [rip + .Lmodule] + leaq .Lmodule(%rip), %rcx jmp __objc_exec_class .section .ctors, "aw" .quad .Linit Index: src/runtime/lookup-asm/lookup-asm-amd64-win64.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-amd64-win64.S +++ src/runtime/lookup-asm/lookup-asm-amd64-win64.S @@ -13,62 +13,60 @@ * file. */ #include "config.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 rcx, rcx + testq %rcx, %rcx jz .LreturnNilMethod - test cl, 1 + testb $1, %cl jnz .LtaggedPointer_\name - mov r8, [rcx] - mov r8, [r8 + 56] + movq (%rcx), %r8 + movq 56(%r8), %r8 .Lmain_\name: - mov r10, rcx - mov r11, rdx + movq %rcx, %r10 + movq %rdx, %r11 - mov rax, [rdx] - movzx ecx, ah - movzx edx, al + movq (%rdx), %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 0f ret 0: - mov rcx, r10 - mov rdx, r11 + movq %r10, %rcx + movq %r11, %rdx jmp \notFound .LtaggedPointer_\name: - xor rcx, [rip + objc_taggedPointerSecret] - and cl, 0xE - movzx r8d, cl + xorq objc_taggedPointerSecret(%rip), %rcx + andb $0xE, %cl + movzbl %cl, %r8d - lea rax, [rip + objc_taggedPointerClasses] - mov r8, [rax + 4 * r8] - mov r8, [r8 + 56] + leaq objc_taggedPointerClasses(%rip), %rax + movq (%rax,%r8,4), %r8 + movq 56(%r8), %r8 jmp .Lmain_\name .def \name .scl 2 .type 32 @@ -75,18 +73,18 @@ .endef .endm .macro GENERATE_LOOKUP_SUPER name lookup \name: - mov r8, rcx - mov rcx, [rcx] - test rcx, rcx - jz short .LreturnNilMethod - - mov r8, [r8 + 8] - mov r8, [r8 + 56] - jmp short .Lmain_\lookup + movq %rcx, %r8 + movq (%rcx), %rcx + testq %rcx, %rcx + jz .LreturnNilMethod + + movq 8(%r8), %r8 + movq 56(%r8), %r8 + jmp .Lmain_\lookup .def \name .scl 2 .type 32 .endef .endm @@ -95,11 +93,11 @@ 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