Overview
Comment: | Add PPC/ELF assembly lookup implementation. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
301fee913d5b55f8df7a8462c3b704a5 |
User & Date: | js on 2012-07-18 23:55:15 |
Other Links: | manifest | tags |
Context
2012-07-19
| ||
01:45 | Add exception handling for ARM. check-in: e47640dd96 user: js tags: trunk | |
2012-07-18
| ||
23:55 | Add PPC/ELF assembly lookup implementation. check-in: 301fee913d user: js tags: trunk | |
15:30 | PLATFORMS.md: Add Linux/PPC. check-in: a204475fb5 user: js tags: trunk | |
Changes
Modified configure.ac from [4b2a3dbd4a] to [f68f9de071].
︙ | ︙ | |||
236 237 238 239 240 241 242 | # ifdef __ELF__ yes # endif #endif ], [ AC_SUBST(LOOKUP_S, lookup-amd64-elf.S) AC_DEFINE(OF_ASM_LOOKUP, 1, | | | | > > | > > > > > > > > > > > > | 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | # ifdef __ELF__ yes # endif #endif ], [ AC_SUBST(LOOKUP_S, lookup-amd64-elf.S) AC_DEFINE(OF_ASM_LOOKUP, 1, [Whether to use assembly for lookup]) ], [ AC_EGREP_CPP(yes, [ #if defined(__i386__) && defined(__ELF__) yes #endif ], [ AC_SUBST(LOOKUP_S, lookup-x86-elf.S) AC_DEFINE(OF_ASM_LOOKUP, 1, [Whether to use assembly for lookup]) ]) ]) AC_EGREP_CPP(yes, [ #if defined(__amd64__) || defined(__x86_64__) # ifdef __MACH__ yes # endif #endif ], [ AC_SUBST(LOOKUP_S, lookup-amd64-macho.S) AC_DEFINE(OF_ASM_LOOKUP, 1, [Whether to use assembly for lookup]) ]) AC_EGREP_CPP(yes, [ #if defined(__ppc__) || defined(__PPC__) # ifdef __ELF__ yes # endif #endif ], [ AC_SUBST(LOOKUP_S, lookup-ppc-elf.S) AC_DEFINE(OF_ASM_LOOKUP, 1, [Whether to use assembly for lookup]) ]) AS_IF([test x"$enable_seluid16" = x"yes"], [ AC_DEFINE(OF_SELUID16, 1, [Whether to use 16 bit selector UIDs]) ]) ;; |
︙ | ︙ |
Added src/runtime/lookup-ppc-elf.S version [a61daa3c61].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * Copyright (c) 2008, 2009, 2010, 2011, 2012 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" .globl objc_msg_lookup .globl objc_msg_lookup_super .section .text objc_msg_lookup: cmpwi %r3, 0 beq ret_nil lwz %r5, 0(%r3) lwz %r5, 32(%r5) lookup: lbz %r6, 1(%r4) lbz %r7, 2(%r4) lbz %r8, 3(%r4) slwi %r6, %r6, 2 slwi %r7, %r7, 2 slwi %r8, %r8, 2 lwzx %r5, %r5, %r6 lwzx %r5, %r5, %r7 lwzx %r5, %r5, %r8 cmpwi %r5, 0 beq forward mr %r3, %r5 blr forward: b objc_not_found_handler@plt objc_msg_lookup_super: lwz %r5, 0(%r3) cmpwi %r5, 0 beq ret_nil lwz %r5, 4(%r3) lwz %r5, 32(%r5) b lookup ret_nil: mflr %r0 bl get_pc mtlr %r0 .L1: addi %r3, %r3, nil_method-.L1 blr nil_method: li %r3, 0 blr get_pc: mflr %r3 blr .type objc_msg_lookup, @function .type objc_msg_lookup_super, @function .size objc_msg_lookup, forward-objc_msg_lookup .size objc_msg_lookup_super, ret_nil-objc_msg_lookup_super |