Differences From Artifact [71a0f74942]:
- File src/forwarding/apple-forwarding-arm.S — part of check-in [2566c341f3] at 2013-12-24 00:50:36 on branch trunk — Add forwarding for iOS/ARM64. (user: js, size: 2439) [annotate] [blame] [check-ins using]
To Artifact [a9ffa0e379]:
- File
src/forwarding/apple-forwarding-arm.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: 2403) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
28 29 30 31 32 33 34 | .section __DATA, __objc_imageinfo, regular, no_dead_strip .long 0, 0 .section __TEXT, __text, regular, pure_instructions .arm .align 2 _of_forward: | | > > > > < < | < | > < | | | > > > > < < | < | > < | | < < | | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | .section __DATA, __objc_imageinfo, regular, no_dead_strip .long 0, 0 .section __TEXT, __text, regular, pure_instructions .arm .align 2 _of_forward: stmfd sp!, {r0-r4, lr} fstmfdd sp!, {d0-d7} ldr r4, L_sel_forwardingTargetForSelector_$indirect_L0 L0: ldr r4, [pc, r4] blx _object_getClass mov r1, r4 blx _class_respondsToSelector cmp r0, #0 beq fail ldr r0, [sp, #64] mov r1, r4 ldr r2, [sp, #68] blx _objc_msgSend cmp r0, #0 beq fail ldr r1, [sp, #64] cmp r0, r1 beq fail fldmfdd sp!, {d0-d7} add sp, sp, #4 @ throw away r0 ldmfd sp!, {r1-r4, lr} b _objc_msgSend fail: fldmfdd sp!, {d0-d7} ldmfd sp!, {r0-r4, lr} b _of_method_not_found .align 2 _of_forward_stret: stmfd sp!, {r0-r4, lr} fstmfdd sp!, {d0-d7} ldr r4, L_sel_forwardingTargetForSelector_$indirect_L1 L1: ldr r4, [pc, r4] mov r0, r1 blx _object_getClass mov r1, r4 blx _class_respondsToSelector cmp r0, #0 beq fail_stret ldr r0, [sp, #68] mov r1, r4 ldr r2, [sp, #72] blx _objc_msgSend cmp r0, #0 beq fail_stret ldr r1, [sp, #68] cmp r0, r1 beq fail_stret mov r1, r0 fldmfdd sp!, {d0-d7} ldmfd sp!, {r0} add sp, sp, #4 @ throw away r1 ldmfd sp!, {r2-r4, lr} b _objc_msgSend_stret fail_stret: fldmfdd sp!, {d0-d7} ldmfd sp!, {r0-r4, lr} b _of_method_not_found_stret .data_region L_sel_forwardingTargetForSelector_$indirect_L0: .long L_sel_forwardingTargetForSelector_-(L0+8) L_sel_forwardingTargetForSelector_$indirect_L1: .long L_sel_forwardingTargetForSelector_-(L1+8) .end_data_region |