Differences From Artifact [b4c76d8ed5]:
- File src/forwarding/apple-forwarding-x86_64.S — part of check-in [2566c341f3] at 2013-12-24 00:50:36 on branch trunk — Add forwarding for iOS/ARM64. (user: js, size: 3866) [annotate] [blame] [check-ins using]
To Artifact [541a8f5d95]:
- File
src/forwarding/apple-forwarding-x86_64.S
— part of check-in
[0c332aa2d2]
at
2013-12-27 02:07:14
on branch trunk
— Rework forwarding API and ABI.
It matches the Apple API and ABI now and the forwarding handler itself
determines whether it should forward or not.This moves handling of +[resolve{Class,Instance}Method:] to the runtime
and allows adding new kinds of forwarding without changing the runtime.Also fixes a potential stack problem in the forwarding for MIPS. (user: js, size: 3897) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
52 53 54 55 56 57 58 59 60 61 62 63 64 65 | movdqa %xmm7, -0xC0(%rbp) call _object_getClass movq %rax, %rdi movq L_sel_forwardingTargetForSelector_(%rip), %rsi call _class_respondsToSelector testq %rax, %rax jz fail movq -0x10(%rbp), %rdi movq L_sel_forwardingTargetForSelector_(%rip), %rsi movq -0x18(%rbp), %rdx call _objc_msgSend | > < | < | > > | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | movdqa %xmm7, -0xC0(%rbp) call _object_getClass movq %rax, %rdi movq L_sel_forwardingTargetForSelector_(%rip), %rsi call _class_respondsToSelector testq %rax, %rax jz fail movq -0x10(%rbp), %rdi movq L_sel_forwardingTargetForSelector_(%rip), %rsi movq -0x18(%rbp), %rdx call _objc_msgSend testq %rax, %rax jz fail cmpq -0x10(%rbp), %rax je fail movq %rax, %rdi /* Restore all arguments, except %rdi */ movdqa -0xC0(%rbp), %xmm7 movdqa -0xB0(%rbp), %xmm6 movdqa -0xA0(%rbp), %xmm5 movdqa -0x90(%rbp), %xmm4 movdqa -0x80(%rbp), %xmm3 |
︙ | ︙ | |||
132 133 134 135 136 137 138 | testq %rax, %rax jz fail_stret movq -0x18(%rbp), %rdi movq L_sel_forwardingTargetForSelector_(%rip), %rsi movq -0x20(%rbp), %rdx call _objc_msgSend | < | < | > > | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | testq %rax, %rax jz fail_stret movq -0x18(%rbp), %rdi movq L_sel_forwardingTargetForSelector_(%rip), %rsi movq -0x20(%rbp), %rdx call _objc_msgSend testq %rax, %rax jz fail_stret cmpq -0x18(%rbp), %rax je fail_stret movq %rax, %rsi /* Restore all arguments, except %rsi */ movdqa -0xC0(%rbp), %xmm7 movdqa -0xB0(%rbp), %xmm6 movdqa -0xA0(%rbp), %xmm5 movdqa -0x90(%rbp), %xmm4 movdqa -0x80(%rbp), %xmm3 |
︙ | ︙ | |||
162 163 164 165 166 167 168 | movq %rbp, %rsp popq %rbp jmp _objc_msgSend_stret fail_stret: | > | | | | 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | movq %rbp, %rsp popq %rbp jmp _objc_msgSend_stret fail_stret: movq -0x10(%rbp), %rdi movq -0x18(%rbp), %rsi movq -0x20(%rbp), %rdx movq %rbp, %rsp popq %rbp jmp _of_method_not_found_stret |