Differences From Artifact [a34378a6db]:
- File src/forwarding/apple-forwarding-ppc.S — part of check-in [2566c341f3] at 2013-12-24 00:50:36 on branch trunk — Add forwarding for iOS/ARM64. (user: js, size: 4296) [annotate] [blame] [check-ins using]
To Artifact [744faa6cfb]:
- File
src/forwarding/apple-forwarding-ppc.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: 4321) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | bl _object_getClass bl L0 L0: mflr r13 addis r13, r13, ha16(L_sel_forwardingTargetForSelector_-L0) lwz r13, lo16(L_sel_forwardingTargetForSelector_-L0)(r13) mr r4, r13 bl _class_respondsToSelector cmpwi r3, 0 beq- fail lwz r3, 216(r1) mr r4, r13 lwz r5, 220(r1) bl _objc_msgSend cmpwi r3, 0 beq- fail | > > < | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | bl _object_getClass bl L0 L0: mflr r13 addis r13, r13, ha16(L_sel_forwardingTargetForSelector_-L0) lwz r13, lo16(L_sel_forwardingTargetForSelector_-L0)(r13) mr r4, r13 bl _class_respondsToSelector cmpwi r3, 0 beq- fail lwz r3, 216(r1) mr r4, r13 lwz r5, 220(r1) bl _objc_msgSend cmpwi r3, 0 beq- fail lwz r4, 216(r1) cmpw r3, r4 beq- fail /* Restore all arguments and r13, except r3 */ lwz r4, 220(r1) lwz r5, 56(r1) |
︙ | ︙ | |||
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | bl _object_getClass bl L1 L1: mflr r13 addis r13, r13, ha16(L_sel_forwardingTargetForSelector_-L1) lwz r13, lo16(L_sel_forwardingTargetForSelector_-L1)(r13) mr r4, r13 bl _class_respondsToSelector cmpwi r3, 0 beq- fail_stret lwz r3, 212(r1) mr r4, r13 lwz r5, 216(r1) bl _objc_msgSend cmpwi r3, 0 beq- fail_stret | > > < | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | bl _object_getClass bl L1 L1: mflr r13 addis r13, r13, ha16(L_sel_forwardingTargetForSelector_-L1) lwz r13, lo16(L_sel_forwardingTargetForSelector_-L1)(r13) mr r4, r13 bl _class_respondsToSelector cmpwi r3, 0 beq- fail_stret lwz r3, 212(r1) mr r4, r13 lwz r5, 216(r1) bl _objc_msgSend cmpwi r3, 0 beq- fail_stret lwz r4, 212(r1) cmpw r3, r4 beq- fail_stret mr r4, r3 /* Restore all arguments and r13, except r4 */ |
︙ | ︙ | |||
221 222 223 224 225 226 227 | addi r1, r1, 184 lwz r0, 8(r1) mtlr r0 b _objc_msgSend_stret fail_stret: | | | > | | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | addi r1, r1, 184 lwz r0, 8(r1) mtlr r0 b _objc_msgSend_stret fail_stret: lwz r3, 208(r1) lwz r4, 212(r1) lwz r5, 216(r1) addi r1, r1, 184 lwz r0, 8(r1) mtlr r0 b _of_method_not_found_stret |