ObjFW  Check-in [491a164ab6]

Overview
Comment:Revert forwarding-x86_64-win64.S to AT&T syntax

This is for consistency with the Mach-O version.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 491a164ab695f98d2d2b86b910b919091fce13fb41559ac09a1e182211aefebf
User & Date: js on 2021-02-07 18:25:46
Other Links: manifest | tags
Context
2021-02-07
18:34
Revert forwarding-x86_64-elf.S back to AT&T syntax check-in: da13b10211 user: js tags: trunk
18:25
Revert forwarding-x86_64-win64.S to AT&T syntax check-in: 491a164ab6 user: js tags: trunk
01:05
Revert forwarding-x86-win32.S back to AT&T syntax check-in: 82bfdb5575 user: js tags: trunk
Changes

Modified src/forwarding/forwarding-x86_64-win64.S from [c7e60b4820] to [055654d84b].

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


139
140

141
142
143
144
145
146
147
148
149
150
151









152
153
154


155
156

157
158
159
160
161



162
163
164


165
166
167
168
169

170
171
172
173
174
175
176
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
139
140









141
142
143
144
145
146
147
148
149
150


151
152
153

154
155
156



157
158
159
160


161
162
163
164
165
166

167
168
169
170
171
172
173
174







-
-





-
-
+
+


-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+



-
-
+
+


-
-
+
+

-
-
+
+


-
-
-
-
+
+
+
+

-
-
-
-
+
+
+
+

-
+

-
-
+
+

-
+


-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
+
+

-
+


-
-
+
+

-
-
+
+




-
-
+
+


-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
+


-
-
+
+


-
-
+
+

-
-
+
+


-
-
-
-
+
+
+
+

-
-
-
-
+
+
+
+

-
+

-
-
+
+

-
+


-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
+
+

-
+


-
-
-
+
+
+

-
-
+
+




-
+







 * 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"

.intel_syntax noprefix

.globl of_forward
.globl of_forward_stret

.section .text
of_forward:
	push	rbp
	mov	rbp, rsp
	pushq	%rbp
	movq	%rsp, %rbp

	/* Save all arguments */
	sub	rsp, 0x90	/* 16-byte alignment */
	mov	[rbp-0x28], rax
	mov	[rbp-0x30], rcx
	mov	[rbp-0x38], rdx
	mov	[rbp-0x40], r8
	mov	[rbp-0x48], r9
	movaps	[rbp-0x60], xmm0
	movaps	[rbp-0x70], xmm1
	movaps	[rbp-0x80], xmm2
	movaps	[rbp-0x90], xmm3
	subq	$0x90, %rsp	/* 16-byte alignment */
	movq	%rax, -0x28(%rbp)
	movq	%rcx, -0x30(%rbp)
	movq	%rdx, -0x38(%rbp)
	movq	%r8, -0x40(%rbp)
	movq	%r9, -0x48(%rbp)
	movaps	%xmm0, -0x60(%rbp)
	movaps	%xmm1, -0x70(%rbp)
	movaps	%xmm2, -0x80(%rbp)
	movaps	%xmm3, -0x90(%rbp)

	call	object_getClass

	mov	rcx, rax
	mov	rdx, offset sel_forwardingTargetForSelector_
	movq	%rax, %rcx
	leaq	sel_forwardingTargetForSelector_(%rip), %rdx
	call	class_respondsToSelector

	test	rax, rax
	jz	short 0f
	testq	%rax, %rax
	jz	0f

	mov	rcx, [rbp-0x30]
	mov	rdx, offset sel_forwardingTargetForSelector_
	movq	-0x30(%rbp), %rcx
	leaq	sel_forwardingTargetForSelector_(%rip), %rdx
	call	objc_msg_lookup

	mov	rcx, [rbp-0x30]
	mov	rdx, offset sel_forwardingTargetForSelector_
	mov	r8,  [rbp-0x38]
	call	rax
	movq	-0x30(%rbp), %rcx
	leaq	sel_forwardingTargetForSelector_(%rip), %rdx
	movq	-0x38(%rbp), %r8
	call	*%rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp-0x30]
	je	short 0f
	testq	%rax, %rax
	jz	0f
	cmpq	-0x30(%rbp), %rax
	je	0f

	mov	[rbp-0x30], rax
	movq	%rax, -0x30(%rbp)

	mov	rcx, rax
	mov	rdx, [rbp-0x38]
	movq	%rax, %rcx
	movq	-0x38(%rbp), %rdx
	call	objc_msg_lookup
	mov	r11, rax
	movq	%rax, %r11

	/* Restore all arguments */
	movaps	xmm3, [rbp-0x90]
	movaps	xmm2, [rbp-0x80]
	movaps	xmm1, [rbp-0x70]
	movaps	xmm0, [rbp-0x60]
	mov	r9,   [rbp-0x48]
	mov	r8,   [rbp-0x40]
	mov	rdx,  [rbp-0x38]
	mov	rcx,  [rbp-0x30]
	mov	rax,  [rbp-0x28]
	movaps	-0x90(%rbp), %xmm3
	movaps	-0x80(%rbp), %xmm2
	movaps	-0x70(%rbp), %xmm1
	movaps	-0x60(%rbp), %xmm0
	movq	-0x48(%rbp), %r9
	movq	-0x40(%rbp), %r8
	movq	-0x38(%rbp), %rdx
	movq	-0x30(%rbp), %rcx
	movq	-0x28(%rbp), %rax

	mov	rsp, rbp
	pop	rbp
	movq	%rbp, %rsp
	popq	%rbp

	jmp	r11
	jmpq	*%r11

0:
	mov	rcx, [rbp-0x30]
	mov	rdx, [rbp-0x38]
	movq	-0x30(%rbp), %rcx
	movq	-0x38(%rbp), %rdx

	mov	rsp, rbp
	pop	rbp
	movq	%rbp, %rsp
	popq	%rbp

	jmp	of_method_not_found

of_forward_stret:
	push	rbp
	mov	rbp, rsp
	pushq	%rbp
	movq	%rsp, %rbp

	/* Save all arguments */
	sub	rsp, 0x90	/* 16-byte alignment */
	mov	[rbp-0x28], rax
	mov	[rbp-0x30], rcx
	mov	[rbp-0x38], rdx
	mov	[rbp-0x40], r8
	mov	[rbp-0x48], r9
	movaps	[rbp-0x60], xmm0
	movaps	[rbp-0x70], xmm1
	movaps	[rbp-0x80], xmm2
	movaps	[rbp-0x90], xmm3
	subq	$0x90, %rsp	/* 16-byte alignment */
	movq	%rax, -0x28(%rbp)
	movq	%rcx, -0x30(%rbp)
	movq	%rdx, -0x38(%rbp)
	movq	%r8, -0x40(%rbp)
	movq	%r9, -0x48(%rbp)
	movaps	%xmm0, -0x60(%rbp)
	movaps	%xmm1, -0x70(%rbp)
	movaps	%xmm2, -0x80(%rbp)
	movaps	%xmm3, -0x90(%rbp)

	mov	rcx, rdx
	movq	%rdx, %rcx
	call	object_getClass

	mov	rcx, rax
	mov	rdx, offset sel_forwardingTargetForSelector_
	movq	%rax, %rcx
	leaq	sel_forwardingTargetForSelector_(%rip), %rdx
	call	class_respondsToSelector

	test	rax, rax
	jz	short 0f
	testq	%rax, %rax
	jz	0f

	mov	rcx, [rbp-0x38]
	mov	rdx, offset sel_forwardingTargetForSelector_
	movq	-0x38(%rbp), %rcx
	leaq	sel_forwardingTargetForSelector_(%rip), %rdx
	call	objc_msg_lookup

	mov	rcx, [rbp-0x38]
	mov	rdx, offset sel_forwardingTargetForSelector_
	mov	r8,  [rbp-0x40]
	call	rax
	movq	-0x38(%rbp), %rcx
	leaq	sel_forwardingTargetForSelector_(%rip), %rdx
	movq	-0x40(%rbp), %r8
	call	*%rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp-0x38]
	je	short 0f
	testq	%rax, %rax
	jz	0f
	cmpq	-0x38(%rbp), %rax
	je	0f

	mov	[rbp-0x38], rax
	movq	%rax, -0x38(%rbp)

	mov	rcx, rax
	mov	rdx, [rbp-0x40]
	movq	%rax, %rcx
	movq	-0x40(%rbp), %rdx
	call	objc_msg_lookup_stret
	mov	r11, rax
	movq	%rax, %r11

	/* Restore all arguments */
	movaps	xmm3, [rbp-0x90]
	movaps	xmm2, [rbp-0x80]
	movaps	xmm1, [rbp-0x70]
	movaps	xmm0, [rbp-0x60]
	mov	r9,   [rbp-0x48]
	mov	r8,   [rbp-0x40]
	mov	rdx,  [rbp-0x38]
	mov	rcx,  [rbp-0x30]
	mov	rax,  [rbp-0x28]
	movaps	-0x90(%rbp), %xmm3
	movaps	-0x80(%rbp), %xmm2
	movaps	-0x70(%rbp), %xmm1
	movaps	-0x60(%rbp), %xmm0
	movq	-0x48(%rbp), %r9
	movq	-0x40(%rbp), %r8
	movq	-0x38(%rbp), %rdx
	movq	-0x30(%rbp), %rcx
	movq	-0x28(%rbp), %rax

	mov	rsp, rbp
	pop	rbp
	movq	%rbp, %rsp
	popq	%rbp

	jmp	r11
	jmpq	*%r11

0:
	mov	rcx, [rbp-0x30]
	mov	rdx, [rbp-0x38]
	mov	r8,  [rbp-0x40]
	movq	-0x30(%rbp), %rcx
	movq	-0x38(%rbp), %rdx
	movq	-0x40(%rbp), %r8

	mov	rsp, rbp
	pop	rbp
	movq	%rbp, %rsp
	popq	%rbp

	jmp	of_method_not_found_stret

init:
	mov	rcx, offset module
	leaq	module(%rip), %rcx
	jmp	__objc_exec_class

.section .ctors, "aw"
	.quad init

.section .rodata
str_forwardingTargetForSelector_: