Index: src/forwarding/forwarding-x86-win32.S ================================================================== --- src/forwarding/forwarding-x86-win32.S +++ src/forwarding/forwarding-x86-win32.S @@ -26,158 +26,133 @@ movl %esp, %ebp pushl %ebx subl $20, %esp - call get_eip -0: - - movl 8(%ebp), %eax - movl %eax, (%esp) - leal _object_getClass-0b(%ebx), %eax - call *%eax - - movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax - movl %eax, 4(%esp) - leal _class_respondsToSelector-0b(%ebx), %eax - call *%eax - - testl %eax, %eax - jz 1f - - movl 8(%ebp), %eax - movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax - movl %eax, 4(%esp) - leal _objc_msg_lookup-0b(%ebx), %eax - call *%eax - - movl 8(%ebp), %edx - movl %edx, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %edx + movl 8(%ebp), %eax + movl %eax, (%esp) + call _object_getClass + + movl %eax, (%esp) + movl $sel_forwardingTargetForSelector_, %eax + movl %eax, 4(%esp) + call _class_respondsToSelector + + testl %eax, %eax + jz 0f + + movl 8(%ebp), %eax + movl %eax, (%esp) + movl $sel_forwardingTargetForSelector_, %eax + movl %eax, 4(%esp) + call _objc_msg_lookup + + movl 8(%ebp), %edx + movl %edx, (%esp) + movl $sel_forwardingTargetForSelector_, %edx movl %edx, 4(%esp) movl 12(%ebp), %edx movl %edx, 8(%esp) call *%eax testl %eax, %eax - jz 1f + jz 0f cmpl 8(%ebp), %eax - je 1f + je 0f movl %eax, 8(%ebp) movl %eax, (%esp) movl 12(%ebp), %eax movl %eax, 4(%esp) - leal _objc_msg_lookup-0b(%ebx), %eax - call *%eax + call _objc_msg_lookup addl $20, %esp popl %ebx popl %ebp jmp *%eax -1: - leal _of_method_not_found-0b(%ebx), %eax - +0: addl $20, %esp popl %ebx popl %ebp - jmp *%eax + jmp _of_method_not_found _of_forward_stret: pushl %ebp movl %esp, %ebp pushl %ebx subl $20, %esp - call get_eip -0: - - movl 12(%ebp), %eax - movl %eax, (%esp) - leal _object_getClass-0b(%ebx), %eax - call *%eax - - movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax - movl %eax, 4(%esp) - leal _class_respondsToSelector-0b(%ebx), %eax - call *%eax - - testl %eax, %eax - jz 1f - - movl 12(%ebp), %eax - movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax - movl %eax, 4(%esp) - leal _objc_msg_lookup-0b(%ebx), %eax - call *%eax - - movl 12(%ebp), %edx - movl %edx, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %edx + movl 12(%ebp), %eax + movl %eax, (%esp) + call _object_getClass + + movl %eax, (%esp) + movl $sel_forwardingTargetForSelector_, %eax + movl %eax, 4(%esp) + call _class_respondsToSelector + + testl %eax, %eax + jz 0f + + movl 12(%ebp), %eax + movl %eax, (%esp) + movl $sel_forwardingTargetForSelector_, %eax + movl %eax, 4(%esp) + call _objc_msg_lookup + + movl 12(%ebp), %edx + movl %edx, (%esp) + movl $sel_forwardingTargetForSelector_, %edx movl %edx, 4(%esp) movl 16(%ebp), %edx movl %edx, 8(%esp) call *%eax testl %eax, %eax - jz 1f + jz 0f cmpl 12(%ebp), %eax - je 1f + je 0f movl %eax, 12(%ebp) movl %eax, (%esp) movl 16(%ebp), %eax movl %eax, 4(%esp) - leal _objc_msg_lookup_stret-0b(%ebx), %eax - call *%eax + call _objc_msg_lookup_stret addl $20, %esp popl %ebx popl %ebp jmp *%eax -1: - leal _of_method_not_found_stret-0b(%ebx), %eax - +0: addl $20, %esp popl %ebx popl %ebp - jmp *%eax + jmp _of_method_not_found_stret init: pushl %ebp movl %esp, %ebp pushl %ebx subl $4, %esp - call get_eip -0: - leal module-0b(%ebx), %eax + movl $module, %eax movl %eax, (%esp) - leal ___objc_exec_class-0b(%ebx), %eax - call *%eax + call ___objc_exec_class addl $4, %esp popl %ebx popl %ebp ret -get_eip: - movl (%esp), %ebx - ret - .section .ctors, "aw" .long init .section .rodata str_forwardingTargetForSelector_: Index: src/runtime/lookup-asm/lookup-asm-x86-win32.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-x86-win32.S +++ src/runtime/lookup-asm/lookup-asm-x86-win32.S @@ -48,14 +48,11 @@ jz 0f ret 0: - call get_eip -1: - addl $\not_found-1b, %eax - jmp *%eax + jmp \not_found .endm .macro generate_lookup_super name lookup \name: movl 4(%esp), %edx @@ -73,17 +70,11 @@ generate_lookup _objc_msg_lookup_stret _objc_method_not_found_stret generate_lookup_super _objc_msg_lookup_super _objc_msg_lookup generate_lookup_super _objc_msg_lookup_super_stret _objc_msg_lookup_stret ret_nil: - call get_eip -0: - addl $nil_method-0b, %eax + movl $nil_method, %eax ret nil_method: xorl %eax, %eax ret - -get_eip: - movl (%esp), %eax - ret