ObjFW  Check-in [80ab671cf4]

Overview
Comment:Add lookup-asm-amd64-win64.S
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 80ab671cf4f9a217aed81f29818db411e65be8675b37aa95c97904303c50caa6
User & Date: js on 2014-02-19 14:31:34
Other Links: manifest | tags
Context
2014-02-20
16:04
Add forwardingTargetForSelector: for AMD64/Win64 check-in: 0ce296bbb5 user: js tags: trunk
2014-02-19
14:31
Add lookup-asm-amd64-win64.S check-in: 80ab671cf4 user: js tags: trunk
13:05
lookup-asm-amd64-*: Remove useless mov check-in: 452bdb4a5f user: js tags: trunk
Changes

Added src/runtime/lookup-asm/lookup-asm-amd64-win64.S version [0e61521df8].


















































































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, 2013, 2014
 *   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_stret
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro generate_lookup name not_found
\name:
	testq	%rcx, %rcx
	jz	ret_nil

	movq	(%rcx), %r8
	movq	56(%r8), %r8

.Lmain_\name:
	movq	%rcx, %r10
	movq	%rdx, %r11

	movq	(%rdx), %rax
	movzbl	%ah, %ecx
	movzbl	%al, %edx
#ifdef OF_SELUID24
	shrl	$16, %eax

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

	testq	%rax, %rax
	jz	0f

	ret

0:
	movq	%r10, %rcx
	movq	%r11, %rdx
	jmp	\not_found
.endm

.macro generate_lookup_super name lookup
\name:
	movq	(%rcx), %rax
	testq	%rax, %rax
	jz	ret_nil

	movq	8(%rcx), %r8
	movq	56(%r8), %r8
	jmp	.Lmain_\lookup
.endm

generate_lookup objc_msg_lookup objc_method_not_found
generate_lookup objc_msg_lookup_stret objc_method_not_found_stret
generate_lookup_super objc_msg_lookup_super objc_msg_lookup
generate_lookup_super objc_msg_lookup_super_stret objc_msg_lookup_stret

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

nil_method:
	xorq	%rax, %rax
	ret

Modified src/runtime/lookup-asm/lookup-asm.S from [01d860fc4e] to [fd112afaa8].

32
33
34
35
36
37
38
39



40
41
42
32
33
34
35
36
37
38

39
40
41
42
43
44







-
+
+
+



#elif defined(__MACH__)
# if defined(__x86_64__)
#  include "lookup-asm-amd64-macho.S"
# elif defined(__ppc__)
#  include "lookup-asm-ppc-macho.S"
# endif
#elif defined(_WIN32)
# if defined(__i386__)
# if defined(__x86_64__)
#  include "lookup-asm-amd64-win64.S"
# elif defined(__i386__)
#  include "lookup-asm-x86-win32.S"
# endif
#endif

Modified src/runtime/runtime-private.h from [adca3c814b] to [bccc1d0efc].

186
187
188
189
190
191
192
193

194
195
196
197
198
199
200
201
202
203
204
186
187
188
189
190
191
192

193
194
195
196
197
198
199
200
201
202
203
204







-
+











#  define OF_ASM_LOOKUP
# endif
#elif defined(__MACH__)
# if defined(__x86_64__) || defined(__ppc__)
#  define OF_ASM_LOOKUP
# endif
#elif defined(_WIN32)
# if defined(__i386__)
# if defined(__x86_64__) || defined(__i386__)
#  define OF_ASM_LOOKUP
# endif
#endif

#define OBJC_ERROR(...)							\
	{								\
		fprintf(stderr, "[objc @ " __FILE__ ":%d] ", __LINE__);	\
		fprintf(stderr, __VA_ARGS__);				\
		fputs("\n", stderr);					\
		abort();						\
	}