Overview
Comment: | LoongArch 64/ELF assembly lookup implementation |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
60995264351961586e22755bd5e3a2c3 |
User & Date: | js on 2024-07-27 16:16:42 |
Original Comment: | Add LoongArch64/ELF assembly lookup implementation |
Other Links: | manifest | tags |
References
2024-07-27
| ||
16:18 | • Fixed ticket [296aa2d0bb]: Write assembly for dispatch on LoongArch 64 plus 5 other changes artifact: 1d2683c7bd user: js | |
Context
2024-07-27
| ||
23:33 | forwardingTargetForSelector: for LoongArch 64/ELF check-in: 573f1ca9aa user: js tags: trunk | |
16:16 | LoongArch 64/ELF assembly lookup implementation check-in: 6099526435 user: js tags: trunk | |
2024-07-21
| ||
16:41 | platform.h: Add LoongArch 64 check-in: 75e7375c66 user: js tags: trunk | |
Changes
Added src/runtime/lookup-asm/lookup-asm-loongarch64-elf.S version [cb61c5a810].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * 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 objc_msg_lookup .globl objc_msg_lookup_stret .globl objc_msg_lookup_super .globl objc_msg_lookup_super_stret .section .text .macro GENERATE_LOOKUP name notFound \name: beqz $a0, .LreturnNilMethod andi $t0, $a0, 1 bnez $t0, .LtaggedPointer_\name ld.d $t0, $a0, 0 ld.d $t0, $t0, 64 .Lmain_\name: #ifdef OF_SELUID24 ld.bu $t1, $a1, 2 slli.d $t1, $t1, 3 #endif ld.bu $t2, $a1, 1 slli.d $t2, $t2, 3 ld.bu $t3, $a1, 0 slli.d $t3, $t3, 3 #ifdef OF_SELUID24 ldx.d $t0, $t0, $t1 #endif ldx.d $t0, $t0, $t2 ldx.d $t0, $t0, $t3 beqz $t0, 0f move $a0, $t0 ret 0: b %plt(\notFound) .LtaggedPointer_\name: la.global $t1, objc_taggedPointerSecret ldptr.d $t1, $t1, 0 xor $t1, $a0, $t1 andi $t1, $t1, 0xE slli.d $t1, $t1, 2 la.global $t0, objc_taggedPointerClasses ldx.d $t0, $t0, $t1 ld.d $t0, $t0, 64 b .Lmain_\name .type \name, %function .size \name, .-\name .endm .macro GENERATE_LOOKUP_SUPER name lookup \name: move $t0, $a0 ld.d $a0, $a0, 0 beqz $a0, .LreturnNilMethod ld.d $t0, $t0, 8 ld.d $t0, $t0, 64 b .Lmain_\lookup .type \name, %function .size \name, .-\name .endm GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup GENERATE_LOOKUP_SUPER objc_msg_lookup_super_stret objc_msg_lookup_stret .LreturnNilMethod: la.local $a0, .LnilMethod ret .LnilMethod: li.d $a0, 0 ret #if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD) .section .note.GNU-stack, "", %progbits #endif |
Modified src/runtime/lookup-asm/lookup-asm.S from [05db03bf88] to [afae4eb55f].
︙ | ︙ | |||
40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # include "lookup-asm-mips-elf.S" # elif defined(OF_SPARC64) # include "lookup-asm-sparc64-elf.S" # elif defined(OF_SPARC) # include "lookup-asm-sparc-elf.S" # elif defined(OF_RISCV64) # include "lookup-asm-riscv64-elf.S" # endif #elif defined(OF_MACH_O) # if defined(OF_AMD64) # include "lookup-asm-amd64-macho.S" # endif #elif defined(OF_WINDOWS) # if defined(OF_AMD64) | > > | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | # include "lookup-asm-mips-elf.S" # elif defined(OF_SPARC64) # include "lookup-asm-sparc64-elf.S" # elif defined(OF_SPARC) # include "lookup-asm-sparc-elf.S" # elif defined(OF_RISCV64) # include "lookup-asm-riscv64-elf.S" # elif defined(OF_LOONGARCH64) # include "lookup-asm-loongarch64-elf.S" # endif #elif defined(OF_MACH_O) # if defined(OF_AMD64) # include "lookup-asm-amd64-macho.S" # endif #elif defined(OF_WINDOWS) # if defined(OF_AMD64) |
︙ | ︙ |
Modified src/runtime/private.h from [318b5fdb1e] to [cceb11309c].
︙ | ︙ | |||
310 311 312 313 314 315 316 | #if defined(OF_ELF) # if defined(OF_AMD64) || defined(OF_X86) || \ defined(OF_POWERPC64) || defined(OF_POWERPC) || \ defined(OF_ARM64) || defined(OF_ARM) || \ defined(OF_MIPS64_N64) || defined(OF_MIPS) || \ defined(OF_SPARC64) || defined(OF_SPARC) || \ | | | 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 | #if defined(OF_ELF) # if defined(OF_AMD64) || defined(OF_X86) || \ defined(OF_POWERPC64) || defined(OF_POWERPC) || \ defined(OF_ARM64) || defined(OF_ARM) || \ defined(OF_MIPS64_N64) || defined(OF_MIPS) || \ defined(OF_SPARC64) || defined(OF_SPARC) || \ defined(OF_RISCV64) || defined(OF_LOONGARCH64) # define OF_ASM_LOOKUP # endif #elif defined(OF_MACH_O) # if defined(OF_AMD64) # define OF_ASM_LOOKUP # endif #elif defined(OF_WINDOWS) |
︙ | ︙ |