ObjFW  Check-in [965b8afeef]

Overview
Comment:Add ASM for AMD64/Mach-O.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | runtime
Files: files | file ages | folders
SHA3-256: 965b8afeefa6355cb9ceb38bf0df3e63375154dffac53b24ed60252fa2b4253c
User & Date: js on 2012-05-12 10:22:47
Other Links: branch diff | manifest | tags
Context
2012-05-12
14:14
Use -Wno-deprecated-objc-isa-usage if available. check-in: 482c103268 user: js tags: runtime
10:22
Add ASM for AMD64/Mach-O. check-in: 965b8afeef user: js tags: runtime
2012-05-10
18:38
Sequential selectors to reduce fragmentation. check-in: 3f0b9df793 user: js tags: runtime
Changes

Modified configure.ac from [a12f19a3e6] to [6d931bb351].

213
214
215
216
217
218
219










220
221
222
223
224
225
226
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236







+
+
+
+
+
+
+
+
+
+







				#endif
			], [
				AC_SUBST(LOOKUP_S, lookup-x86-elf.S)
				AC_DEFINE(OF_ASM_LOOKUP, 1,
					[Whether to use lookup in assembly])
			])
		])

		AC_EGREP_CPP(yes, [
			#if defined(__amd64__) && defined(__MACH__)
			yes
			#endif
		], [
			AC_SUBST(LOOKUP_S, lookup-amd64-macho.S)
			AC_DEFINE(OF_ASM_LOOKUP, 1,
				[Whether to use lookup in assembly])
		])

		AS_IF([test x"$enable_seluid16" = x"yes"], [
			AC_DEFINE(OF_SELUID16, 1,
				[Whether to use 16 bit selector UIDs])
		])
		;;
	"Apple runtime")

Added src/runtime/lookup-amd64-macho.S version [09cb0dc88d].



































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/*
 * 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, __text, regular, pure_instructions
_objc_msg_lookup:
	testq	%rdi, %rdi
	jz	ret_nil

	movq	(%rdi), %r8
	movq	64(%r8), %r8

lookup:
	movq	(%rsi), %rax
	movzbl	%ah, %ecx
	movzbl	%al, %edx
#ifndef OF_SELUID16
	shrl	$16, %eax

	movq	(%r8,%rax,8), %r8
#endif
	movq	(%r8,%rcx,8), %r8
	movq	(%r8,%rdx,8), %rax

	testq	%rax, %rax
	jz	forward

	ret

forward:
	jmp	_objc_not_found_handler

_objc_msg_lookup_super:
	movq	(%rdi), %rax
	testq	%rax, %rax
	jz	ret_nil

	movq	8(%rdi), %r8
	movq	64(%r8), %r8
	movq	%rdi, %rax
	jmp	lookup

ret_nil:
	leaq	nil_method(%rip), %rax
	ret

nil_method:
	movq	%rdi, %rax
	ret