ObjFW  Check-in [2630b77909]

Overview
Comment:Convert all x86/Win32 ASM to Intel syntax

GAS has decent support for Intel syntax these days, so there is little
reason to stick with AT&T syntax.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 2630b77909e0ab16046b4a586c90453ec777861cb73fe31cb4cef97f6351b9da
User & Date: js on 2020-06-30 01:53:16
Other Links: manifest | tags
Context
2020-06-30
19:52
Don't use -no-integrated-as on Darwin check-in: f4e99b94d2 user: js tags: trunk
01:53
Convert all x86/Win32 ASM to Intel syntax check-in: 2630b77909 user: js tags: trunk
01:08
Remove unnecessary PIC from x86/Win32 ASM check-in: 9ccac85bb4 user: js tags: trunk
Changes

Modified src/forwarding/forwarding-x86-win32.S from [12b660e0de] to [38023e4835].

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







+
+





-
-
+
+

-
-
+
+

-
-
+
+


-
-
-
+
+
+


-
-
+
+

-
-
-
-
+
+
+
+


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

-
-
+
+
-
-
+
+

-
-
-
-
+
+
+
+


-
-
-
+
+
+

-
+


-
-
-
+
+
+




-
-
+
+

-
-
+
+

-
-
+
+


-
-
-
+
+
+


-
-
+
+

-
-
-
-
+
+
+
+


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

-
-
-
-
+
+
+
+

-
-
-
-
+
+
+
+


-
-
-
+
+
+

-
+


-
-
-
+
+
+




-
-
+
+

-
-
+
+

-
-
+
+


-
-
-
+
+
+







 * 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:
	pushl	%ebp
	movl	%esp, %ebp
	push	ebp
	mov	ebp, esp

	pushl	%ebx
	subl	$20, %esp
	push	ebx
	sub	esp, 20

	movl	8(%ebp), %eax
	movl	%eax, (%esp)
	mov	eax, [ebp+8]
	mov	[esp], eax
	call	_object_getClass

	movl	%eax, (%esp)
	movl	$sel_forwardingTargetForSelector_, %eax
	movl	%eax, 4(%esp)
	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	[esp+4], eax
	call	_class_respondsToSelector

	testl	%eax, %eax
	jz	0f
	test	eax, eax
	jz	short 0f

	movl	8(%ebp), %eax
	movl	%eax, (%esp)
	movl	$sel_forwardingTargetForSelector_, %eax
	movl	%eax, 4(%esp)
	mov	eax, [ebp+8]
	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	[esp+4], eax
	call	_objc_msg_lookup

	movl	8(%ebp), %edx
	movl	%edx, (%esp)
	movl	$sel_forwardingTargetForSelector_, %edx
	movl	%edx, 4(%esp)
	movl	12(%ebp), %edx
	movl	%edx, 8(%esp)
	call	*%eax
	mov	edx, [ebp+8]
	mov	[esp], edx
	mov	edx, offset sel_forwardingTargetForSelector_
	mov	[esp+4], edx
	mov	edx, [ebp+12]
	mov	[esp+8], edx
	call	eax

	testl	%eax, %eax
	jz	0f
	test	eax, eax
	jz	short 0f
	cmpl	8(%ebp), %eax
	je	0f
	cmp	eax, [ebp+8]
	je	short 0f

	movl	%eax, 8(%ebp)
	movl	%eax, (%esp)
	movl	12(%ebp), %eax
	movl	%eax, 4(%esp)
	mov	[ebp+8], eax
	mov	[esp], eax
	mov	eax, [ebp+12]
	mov	[esp+4], eax
	call	_objc_msg_lookup

	addl	$20, %esp
	popl	%ebx
	popl	%ebp
	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	*%eax
	jmp	eax

0:
	addl	$20, %esp
	popl	%ebx
	popl	%ebp
	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	_of_method_not_found

_of_forward_stret:
	pushl	%ebp
	movl	%esp, %ebp
	push	ebp
	mov	ebp, esp

	pushl	%ebx
	subl	$20, %esp
	push	ebx
	sub	esp, 20

	movl	12(%ebp), %eax
	movl	%eax, (%esp)
	mov	eax, [ebp+12]
	mov	[esp], eax
	call	_object_getClass

	movl	%eax, (%esp)
	movl	$sel_forwardingTargetForSelector_, %eax
	movl	%eax, 4(%esp)
	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	[esp+4], eax
	call	_class_respondsToSelector

	testl	%eax, %eax
	jz	0f
	test	eax, eax
	jz	short 0f

	movl	12(%ebp), %eax
	movl	%eax, (%esp)
	movl	$sel_forwardingTargetForSelector_, %eax
	movl	%eax, 4(%esp)
	mov	eax, [ebp+12]
	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	[esp+4], eax
	call	_objc_msg_lookup

	movl	12(%ebp), %edx
	movl	%edx, (%esp)
	movl	$sel_forwardingTargetForSelector_, %edx
	movl	%edx, 4(%esp)
	movl	16(%ebp), %edx
	movl	%edx, 8(%esp)
	call	*%eax
	mov	edx, [ebp+12]
	mov	[esp], edx
	mov	edx, offset sel_forwardingTargetForSelector_
	mov	[esp+4], edx
	mov	edx, [ebp+16]
	mov	[esp+8], edx
	call	eax

	testl	%eax, %eax
	jz	0f
	cmpl	12(%ebp), %eax
	je	0f
	test	eax, eax
	jz	short 0f
	cmp	eax, [ebp+12]
	je	short 0f

	movl	%eax, 12(%ebp)
	movl	%eax, (%esp)
	movl	16(%ebp), %eax
	movl	%eax, 4(%esp)
	mov	[ebp+12], eax
	mov	[esp], eax
	mov	eax, [ebp+16]
	mov	[esp+4], eax
	call	_objc_msg_lookup_stret

	addl	$20, %esp
	popl	%ebx
	popl	%ebp
	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	*%eax
	jmp	eax

0:
	addl	$20, %esp
	popl	%ebx
	popl	%ebp
	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	_of_method_not_found_stret

init:
	pushl	%ebp
	movl	%esp, %ebp
	push	ebp
	mov	ebp, esp

	pushl	%ebx
	subl	$4, %esp
	push	ebx
	sub	esp, 4

	movl	$module, %eax
	movl	%eax, (%esp)
	mov	eax, offset module
	mov	[esp], eax
	call	___objc_exec_class

	addl	$4, %esp
	popl	%ebx
	popl	%ebp
	add	esp, 4
	pop	ebx
	pop	ebp
	ret

.section .ctors, "aw"
	.long init

.section .rodata
str_forwardingTargetForSelector_:

Modified src/runtime/lookup-asm/lookup-asm-x86-win32.S from [59e96874a5] to [44cfb2c923].

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







+
+









-
-
-
+
+
+

-
-
+
+


-
+


-
-
+
+

-
-
-
-
+
+
+
+

-
-
+
+









-
-
-
-
+
+
+
+

-
-
-
-
+
+
+
+








-
+



-
+

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

.intel_syntax noprefix

.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:
	movl	4(%esp), %edx
	testl	%edx, %edx
	jz	ret_nil
	mov	edx, [esp+4]
	test	edx, edx
	jz	short ret_nil

	movl	(%edx), %edx
	movl	32(%edx), %edx
	mov	edx, [edx]
	mov	edx, [edx+32]

.Lmain_\name:
	movl	8(%esp), %eax
	mov	eax, [esp+8]

#ifdef OF_SELUID24
	movzbl	2(%eax), %ecx
	movl	(%edx,%ecx,4), %edx
	movzx	ecx, byte ptr [eax+2]
	mov	edx, [edx+ecx*4]
#endif
	movzbl	1(%eax), %ecx
	movl	(%edx,%ecx,4), %edx
	movzbl	(%eax), %ecx
	movl	(%edx,%ecx,4), %eax
	movzx	ecx, byte ptr [eax+1]
	mov	edx, [edx+ecx*4]
	movzx	ecx, byte ptr [eax]
	mov	eax, [edx+ecx*4]

	testl	%eax, %eax
	jz	0f
	test	eax, eax
	jz	short 0f

	ret

0:
	jmp	\not_found
.endm

.macro generate_lookup_super name lookup
\name:
	movl	4(%esp), %edx
	movl	(%edx), %eax
	cmpl	$0, %eax
	je	ret_nil
	mov	edx, [esp+4]
	mov	eax, [edx]
	test	eax, eax
	jz	short ret_nil

	movl	%eax, 4(%esp)
	movl	4(%edx), %edx
	movl	32(%edx), %edx
	jmp	.Lmain_\lookup
	mov	[esp+4], eax
	mov	edx, [edx+4]
	mov	edx, [edx+32]
	jmp	short .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:
	movl	$nil_method, %eax
	mov	eax, offset nil_method
	ret

nil_method:
	xorl	%eax, %eax
	xor	eax, eax
	ret