Overview
Comment: | Add forwardingTargetForSelector: for ARM64/Win64 |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
55450a564ee57f924a4bc55343e99dbf |
User & Date: | js on 2024-08-30 19:41:33 |
Other Links: | manifest | tags |
References
2024-08-30
| ||
19:53 | • Fixed ticket [9bafaf1184]: Write assembly for forwardingTargetForSelector: on Windows/ARM64 plus 4 other changes artifact: 3b7e18359c user: js | |
Context
2024-08-30
| ||
20:37 | PLATFORMS.md: Add ARM64/Win64 to forwarding check-in: 514c38d5f7 user: js tags: trunk | |
19:41 | Add forwardingTargetForSelector: for ARM64/Win64 check-in: 55450a564e user: js tags: trunk | |
18:58 | Add ARM64/Win64 assembly lookup implementation check-in: 995af4a904 user: js tags: trunk | |
Changes
Added src/forwarding/forwarding-arm64-win64.S version [68a4961bdc].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | /* * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * <https://www.gnu.org/licenses/>. */ #include "config.h" #include "platform.h" .globl OFForward .globl OFForward_stret .section .text OFForward: OFForward_stret: #ifdef HAVE_BTI bti c #endif stp fp, lr, [sp, #-224]! mov fp, sp /* Save all arguments, x8 and x19 */ stp x0, x1, [sp, #16] stp x2, x3, [sp, #32] stp x4, x5, [sp, #48] stp x6, x7, [sp, #64] stp x8, x19, [sp, #80] /* Save all foating point arguments */ stp q0, q1, [sp, #96] stp q2, q3, [sp, #128] stp q4, q5, [sp, #160] stp q6, q7, [sp, #192] bl object_getClass adrp x19, .Lsel_forwardingTargetForSelector_ add x19, x19, :lo12:.Lsel_forwardingTargetForSelector_ mov x1, x19 bl class_respondsToSelector cbz x0, 0f ldr x0, [sp, #16] mov x1, x19 bl objc_msg_lookup mov x1, x19 mov x19, x0 ldp x0, x2, [sp, #16] blr x19 cbz x0, 0f ldr x1, [sp, #16] cmp x0, x1 b.eq 0f mov x19, x0 ldr x1, [sp, #24] bl objc_msg_lookup mov x16, x0 mov x0, x19 /* Restore all arguments, x8 and x19, but not x0 */ ldr x1, [sp, #24] ldp x2, x3, [sp, #32] ldp x4, x5, [sp, #48] ldp x6, x7, [sp, #64] ldp x8, x19, [sp, #80] /* Restore all foating point arguments */ ldp q0, q1, [sp, #96] ldp q2, q3, [sp, #128] ldp q4, q5, [sp, #160] ldp q6, q7, [sp, #192] ldp fp, lr, [sp], #224 br x16 0: ldp x0, x1, [sp, #16] ldr x19, [sp, #88] ldp fp, lr, [sp], #224 b OFMethodNotFound .def OFForward .scl 2 .type 32 .endef .def OFForward_stret .scl 2 .type 32 .endef .Linit: #ifdef HAVE_BTI bti c #endif adrp x0, .Lmodule add x0, x0, :lo12:.Lmodule b __objc_exec_class .section .ctors, "aw" .xword .Linit .section .rodata .Lstr_forwardingTargetForSelector_: .asciz "forwardingTargetForSelector:" .section .data .Lsel_forwardingTargetForSelector_: .xword .Lstr_forwardingTargetForSelector_, 0 .xword 0, 0 .Lsymtab: .xword 0, .Lsel_forwardingTargetForSelector_ .short 0, 0 .long 0 .xword 0 .Lmodule: .long 8, 32 .xword 0, .Lsymtab |
Modified src/forwarding/forwarding.S from [4426e69e90] to [b15270c58a].
︙ | ︙ | |||
69 70 71 72 73 74 75 76 77 78 | # include "forwarding-amd64-macho.S" # endif # elif defined(OF_WINDOWS) # if defined(OF_AMD64) # include "forwarding-amd64-win64.S" # elif defined(OF_X86) # include "forwarding-x86-win32.S" # endif # endif #endif | > > | 69 70 71 72 73 74 75 76 77 78 79 80 | # include "forwarding-amd64-macho.S" # endif # elif defined(OF_WINDOWS) # if defined(OF_AMD64) # include "forwarding-amd64-win64.S" # elif defined(OF_X86) # include "forwarding-x86-win32.S" # elif defined(OF_ARM64) # include "forwarding-arm64-win64.S" # endif # endif #endif |
Modified src/macros.h from [250be4f66f] to [f36695b45c].
︙ | ︙ | |||
367 368 369 370 371 372 373 | # if defined(OF_AMD64) # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR # if __OBJFW_RUNTIME_ABI__ >= 800 # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET # endif # endif # elif defined(OF_WINDOWS) | | | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 | # if defined(OF_AMD64) # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR # if __OBJFW_RUNTIME_ABI__ >= 800 # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET # endif # endif # elif defined(OF_WINDOWS) # if defined(OF_AMD64) || defined(OF_X86) || defined(OF_ARM64) # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR # if __OBJFW_RUNTIME_ABI__ >= 800 # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET # endif # endif # endif #endif |
︙ | ︙ |