ObjFW  Check-in [71d8f813ef]

Overview
Comment:Remove unnecessary `short` from assembly
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 71d8f813efdaea4acdc0f958a22b71ba7f62d1c4edeaf17f4fe2cdb06f219e29
User & Date: js on 2023-10-28 18:45:35
Other Links: manifest | tags
Context
2023-10-28
18:50
Fix accidentally left over movq check-in: 7a1b76cbec user: js tags: trunk
18:45
Remove unnecessary `short` from assembly check-in: 71d8f813ef user: js tags: trunk
18:35
Use more local labels in assembly check-in: cb18f26404 user: js tags: trunk
Changes

Modified src/forwarding/forwarding-amd64-elf.S from [60cb5f07a9] to [c81bf7cc2c].

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
	call	object_getClass@PLT

	mov	rdi, rax
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector@PLT

	test	rax, rax
	jz	short 0f

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup@PLT

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x18]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x10]
	je	short 0f

	mov	[rbp - 0x10], rax

	mov	rdi, rax
	mov	rsi, [rbp - 0x18]
	call	objc_msg_lookup@PLT
	mov	r11, rax







|











|

|







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
	call	object_getClass@PLT

	mov	rdi, rax
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector@PLT

	test	rax, rax
	jz	0f

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup@PLT

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x18]
	call	rax

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x10]
	je	0f

	mov	[rbp - 0x10], rax

	mov	rdi, rax
	mov	rsi, [rbp - 0x18]
	call	objc_msg_lookup@PLT
	mov	r11, rax
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
	call	object_getClass@PLT

	mov	rdi, rax
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector@PLT

	test	rax, rax
	jz	short 0f

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup@PLT

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x20]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x18]
	je	short 0f

	mov	[rbp - 0x18], rax

	mov	rdi, rax
	mov	rsi, [rbp - 0x20]
	call	objc_msg_lookup_stret@PLT
	mov	r11, rax







|











|

|







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
	call	object_getClass@PLT

	mov	rdi, rax
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector@PLT

	test	rax, rax
	jz	0f

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup@PLT

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x20]
	call	rax

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x18]
	je	0f

	mov	[rbp - 0x18], rax

	mov	rdi, rax
	mov	rsi, [rbp - 0x20]
	call	objc_msg_lookup_stret@PLT
	mov	r11, rax

Modified src/forwarding/forwarding-amd64-win64.S from [bb16226b9b] to [43dda63d1e].

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

	mov	rcx, rax
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector

	test	rax, rax
	jz	short 0f

	mov	rcx, [rbp - 0x30]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup

	mov	rcx, [rbp - 0x30]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	mov	r8, [rbp - 0x38]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x30]
	je	short 0f

	mov	[rbp - 0x30], rax

	mov	rcx, rax
	mov	rdx, [rbp - 0x38]
	call	objc_msg_lookup
	mov	r11, rax







|











|

|







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

	mov	rcx, rax
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector

	test	rax, rax
	jz	0f

	mov	rcx, [rbp - 0x30]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup

	mov	rcx, [rbp - 0x30]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	mov	r8, [rbp - 0x38]
	call	rax

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x30]
	je	0f

	mov	[rbp - 0x30], rax

	mov	rcx, rax
	mov	rdx, [rbp - 0x38]
	call	objc_msg_lookup
	mov	r11, rax
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
	call	object_getClass

	mov	rcx, rax
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector

	test	rax, rax
	jz	short 0f

	mov	rcx, [rbp - 0x38]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup

	mov	rcx, [rbp - 0x38]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	mov	r8, [rbp - 0x40]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x38]
	je	short 0f

	mov	[rbp - 0x38], rax

	mov	rcx, rax
	mov	rdx, [rbp - 0x40]
	call	objc_msg_lookup_stret
	mov	r11, rax







|











|

|







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

	mov	rcx, rax
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector

	test	rax, rax
	jz	0f

	mov	rcx, [rbp - 0x38]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup

	mov	rcx, [rbp - 0x38]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	mov	r8, [rbp - 0x40]
	call	rax

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x38]
	je	0f

	mov	[rbp - 0x38], rax

	mov	rcx, rax
	mov	rdx, [rbp - 0x40]
	call	objc_msg_lookup_stret
	mov	r11, rax

Modified src/forwarding/forwarding-x86-elf.S from [7d07165df3] to [6488f750ac].

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

	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	class_respondsToSelector@PLT

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	objc_msg_lookup@PLT

	mov	edx, [ebp + 8]
	mov	[esp], edx
	lea	edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], edx
	mov	edx, [ebp + 12]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
	cmp	eax, [ebp + 8]
	je	short 0f

	mov	[ebp + 8], eax
	mov	[esp], eax
	mov	eax, [ebp + 12]
	mov	[esp + 4], eax
	call	objc_msg_lookup@PLT








|
















|

|







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

	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	class_respondsToSelector@PLT

	test	eax, eax
	jz	0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	objc_msg_lookup@PLT

	mov	edx, [ebp + 8]
	mov	[esp], edx
	lea	edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], edx
	mov	edx, [ebp + 12]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	0f
	cmp	eax, [ebp + 8]
	je	0f

	mov	[ebp + 8], eax
	mov	[esp], eax
	mov	eax, [ebp + 12]
	mov	[esp + 4], eax
	call	objc_msg_lookup@PLT

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

	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	class_respondsToSelector@PLT

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp  + 4], eax
	call	objc_msg_lookup@PLT

	mov	edx, [ebp + 12]
	mov	[esp], edx
	lea	edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], edx
	mov	edx, [ebp + 16]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
	cmp	eax, [ebp + 12]
	je	short 0f

	mov	[ebp + 12], eax
	mov	[esp], eax
	mov	eax, [ebp + 16]
	mov	[esp + 4], eax
	call	objc_msg_lookup_stret@PLT








|




|











|

|







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

	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	class_respondsToSelector@PLT

	test	eax, eax
	jz	0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	objc_msg_lookup@PLT

	mov	edx, [ebp + 12]
	mov	[esp], edx
	lea	edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], edx
	mov	edx, [ebp + 16]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	0f
	cmp	eax, [ebp + 12]
	je	0f

	mov	[ebp + 12], eax
	mov	[esp], eax
	mov	eax, [ebp + 16]
	mov	[esp + 4], eax
	call	objc_msg_lookup_stret@PLT

Modified src/forwarding/forwarding-x86-win32.S from [a9803a8051] to [e2482c7f1d].

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

	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_objc_msg_lookup

	mov	edx, [ebp + 8]
	mov	[esp], edx
	mov	edx, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], edx
	mov	edx, [ebp + 12]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
	cmp	eax, [ebp + 8]
	je	short 0f

	mov	[ebp + 8], eax
	mov	[esp], eax
	mov	eax, [ebp + 12]
	mov	[esp + 4], eax
	call	_objc_msg_lookup








|
















|

|







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

	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_objc_msg_lookup

	mov	edx, [ebp + 8]
	mov	[esp], edx
	mov	edx, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], edx
	mov	edx, [ebp + 12]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	0f
	cmp	eax, [ebp + 8]
	je	0f

	mov	[ebp + 8], eax
	mov	[esp], eax
	mov	eax, [ebp + 12]
	mov	[esp + 4], eax
	call	_objc_msg_lookup

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

	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_objc_msg_lookup

	mov	edx, [ebp + 12]
	mov	[esp], edx
	mov	edx, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], edx
	mov	edx, [ebp + 16]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
	cmp	eax, [ebp + 12]
	je	short 0f

	mov	[ebp + 12], eax
	mov	[esp], eax
	mov	eax, [ebp + 16]
	mov	[esp  + 4], eax
	call	_objc_msg_lookup_stret

	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	eax







|
















|

|




|







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

	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_objc_msg_lookup

	mov	edx, [ebp + 12]
	mov	[esp], edx
	mov	edx, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], edx
	mov	edx, [ebp + 16]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	0f
	cmp	eax, [ebp + 12]
	je	0f

	mov	[ebp + 12], eax
	mov	[esp], eax
	mov	eax, [ebp + 16]
	mov	[esp + 4], eax
	call	_objc_msg_lookup_stret

	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	eax

Modified src/platform/x86/OFAtomic.h from [19cc36e8a6] to [5dfd999b87].

233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
	__asm__ __volatile__ (
	    "0:\n\t"
	    "mov{l}	{ %2, %0 | %0, %2 }\n\t"
	    "mov{l}	{ %0, %%eax | eax, %0 }\n\t"
	    "or{l}	{ %1, %0 | %0, %1 }\n\t"
	    "lock\n\t"
	    "cmpxchg{l}	{ %0, %2 | %2, %0 }\n\t"
	    "jne	{ | short } 0b"
	    : "=&r"(i)
	    : "r"(i), "m"(*p)
	    : "eax", "cc"
	);

	return i;
}







|







233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
	__asm__ __volatile__ (
	    "0:\n\t"
	    "mov{l}	{ %2, %0 | %0, %2 }\n\t"
	    "mov{l}	{ %0, %%eax | eax, %0 }\n\t"
	    "or{l}	{ %1, %0 | %0, %1 }\n\t"
	    "lock\n\t"
	    "cmpxchg{l}	{ %0, %2 | %2, %0 }\n\t"
	    "jne	0b"
	    : "=&r"(i)
	    : "r"(i), "m"(*p)
	    : "eax", "cc"
	);

	return i;
}
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
		__asm__ __volatile__ (
		    "0:\n\t"
		    "mov{q}	{ %2, %0 | %0, %2 }\n\t"
		    "mov{q}	{ %0, %%rax | rax, %0 }\n\t"
		    "or{q}	{ %1, %0 | %0, %1 }\n\t"
		    "lock\n\t"
		    "cmpxchg{q}	{ %0, %2 | %2, %0 }\n\t"
		    "jne	{ | short } 0b"
		    : "=&r"(i)
		    : "r"(i), "m"(*p)
		    : "rax", "cc"
		);
#endif
	else
		abort();







|







256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
		__asm__ __volatile__ (
		    "0:\n\t"
		    "mov{q}	{ %2, %0 | %0, %2 }\n\t"
		    "mov{q}	{ %0, %%rax | rax, %0 }\n\t"
		    "or{q}	{ %1, %0 | %0, %1 }\n\t"
		    "lock\n\t"
		    "cmpxchg{q}	{ %0, %2 | %2, %0 }\n\t"
		    "jne	0b"
		    : "=&r"(i)
		    : "r"(i), "m"(*p)
		    : "rax", "cc"
		);
#endif
	else
		abort();
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
	__asm__ __volatile__ (
	    "0:\n\t"
	    "mov{l}	{ %2, %0 | %0, %2 }\n\t"
	    "mov{l}	{ %0, %%eax | eax, %0 }\n\t"
	    "and{l}	{ %1, %0 | %0, %1 }\n\t"
	    "lock\n\t"
	    "cmpxchg{l}	{ %0, %2 | %2, %0 }\n\t"
	    "jne	{ | short } 0b"
	    : "=&r"(i)
	    : "r"(i), "m"(*p)
	    : "eax", "cc"
	);

	return i;
}







|







278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
	__asm__ __volatile__ (
	    "0:\n\t"
	    "mov{l}	{ %2, %0 | %0, %2 }\n\t"
	    "mov{l}	{ %0, %%eax | eax, %0 }\n\t"
	    "and{l}	{ %1, %0 | %0, %1 }\n\t"
	    "lock\n\t"
	    "cmpxchg{l}	{ %0, %2 | %2, %0 }\n\t"
	    "jne	0b"
	    : "=&r"(i)
	    : "r"(i), "m"(*p)
	    : "eax", "cc"
	);

	return i;
}
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
		__asm__ __volatile__ (
		    "0:\n\t"
		    "mov{q}	{ %2, %0 | %0, %2 }\n\t"
		    "mov{q}	{ %0, %%rax | rax, %0 }\n\t"
		    "and{q}	{ %1, %0 | %0, %1 }\n\t"
		    "lock\n\t"
		    "cmpxchg{q}	{ %0, %2 | %2, %0 }\n\t"
		    "jne	{ | short } 0b"
		    : "=&r"(i)
		    : "r"(i), "m"(*p)
		    : "rax", "cc"
		);
#endif
	else
		abort();







|







301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
		__asm__ __volatile__ (
		    "0:\n\t"
		    "mov{q}	{ %2, %0 | %0, %2 }\n\t"
		    "mov{q}	{ %0, %%rax | rax, %0 }\n\t"
		    "and{q}	{ %1, %0 | %0, %1 }\n\t"
		    "lock\n\t"
		    "cmpxchg{q}	{ %0, %2 | %2, %0 }\n\t"
		    "jne	0b"
		    : "=&r"(i)
		    : "r"(i), "m"(*p)
		    : "rax", "cc"
		);
#endif
	else
		abort();
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
	__asm__ __volatile__ (
	    "0:\n\t"
	    "mov{l}	{ %2, %0 | %0, %2 }\n\t"
	    "mov{l}	{ %0, %%eax | eax, %0 }\n\t"
	    "xor{l}	{ %1, %0 | %0, %1 }\n\t"
	    "lock\n\t"
	    "cmpxchg{l}	{ %0, %2 | %2, %0 }\n\t"
	    "jne	{ | short } 0b"
	    : "=&r"(i)
	    : "r"(i), "m"(*p)
	    : "eax", "cc"
	);

	return i;
}







|







323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
	__asm__ __volatile__ (
	    "0:\n\t"
	    "mov{l}	{ %2, %0 | %0, %2 }\n\t"
	    "mov{l}	{ %0, %%eax | eax, %0 }\n\t"
	    "xor{l}	{ %1, %0 | %0, %1 }\n\t"
	    "lock\n\t"
	    "cmpxchg{l}	{ %0, %2 | %2, %0 }\n\t"
	    "jne	0b"
	    : "=&r"(i)
	    : "r"(i), "m"(*p)
	    : "eax", "cc"
	);

	return i;
}
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
		__asm__ __volatile__ (
		    "0:\n\t"
		    "mov{q}	{ %2, %0 | %0, %2 }\n\t"
		    "mov{q}	{ %0, %%rax | rax, %0 }\n\t"
		    "xor{q}	{ %1, %0 | %0, %1 }\n\t"
		    "lock\n\t"
		    "cmpxchg{q}	{ %0, %2 | %2, %0 }\n\t"
		    "jne	{ | short } 0b"
		    : "=&r"(i)
		    : "r"(i), "m"(*p)
		    : "rax", "cc"
		);
#endif
	else
		abort();







|







346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
		__asm__ __volatile__ (
		    "0:\n\t"
		    "mov{q}	{ %2, %0 | %0, %2 }\n\t"
		    "mov{q}	{ %0, %%rax | rax, %0 }\n\t"
		    "xor{q}	{ %1, %0 | %0, %1 }\n\t"
		    "lock\n\t"
		    "cmpxchg{q}	{ %0, %2 | %2, %0 }\n\t"
		    "jne	0b"
		    : "=&r"(i)
		    : "r"(i), "m"(*p)
		    : "rax", "cc"
		);
#endif
	else
		abort();

Modified src/runtime/lookup-asm/lookup-asm-amd64-elf.S from [d1cf6bd700] to [c80a243830].

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
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	test	rdi, rdi
	jz	short .LreturnNilMethod

	test	dil, 1
	jnz	short .LtaggedPointer_\name

	mov	r8, [rdi]
	mov	r8, [r8 + 64]

.Lmain_\name:
	mov	rax, [rsi]
	movzx	ecx, ah
	movzx	edx, al
#ifdef OF_SELUID24
	shr	eax, 16

	mov	r8, [r8 + 8 * rax]
#endif
	mov	r8, [r8 + 8 * rcx]
	mov	rax, [r8 + 8 * rdx]

	test	rax, rax
	jz	short \notFound@PLT

	ret

.LtaggedPointer_\name:
	mov	rax, [rip + objc_taggedPointerSecret@GOTPCREL]
	xor	rdi, [rax]
	and	dil, 0xE
	movzx	r8d, dil

	mov	rax, [rip + objc_taggedPointerClasses@GOTPCREL]
	mov	r8, [rax + 4 * r8]
	mov	r8, [r8 + 64]

	jmp	short .Lmain_\name
.type \name, %function
.size \name, .-\name
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	r8, rdi
	mov	rdi, [rdi]
	test	rdi, rdi
	jz	short .LreturnNilMethod

	mov	r8, [r8 + 8]
	mov	r8, [r8 + 64]
	jmp	short .Lmain_\lookup
.type \name, %function
.size \name, .-\name
.endm

GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound
GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret
GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup







|


|

















|













|









|



|







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
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	test	rdi, rdi
	jz	.LreturnNilMethod

	test	dil, 1
	jnz	.LtaggedPointer_\name

	mov	r8, [rdi]
	mov	r8, [r8 + 64]

.Lmain_\name:
	mov	rax, [rsi]
	movzx	ecx, ah
	movzx	edx, al
#ifdef OF_SELUID24
	shr	eax, 16

	mov	r8, [r8 + 8 * rax]
#endif
	mov	r8, [r8 + 8 * rcx]
	mov	rax, [r8 + 8 * rdx]

	test	rax, rax
	jz	\notFound@PLT

	ret

.LtaggedPointer_\name:
	mov	rax, [rip + objc_taggedPointerSecret@GOTPCREL]
	xor	rdi, [rax]
	and	dil, 0xE
	movzx	r8d, dil

	mov	rax, [rip + objc_taggedPointerClasses@GOTPCREL]
	mov	r8, [rax + 4 * r8]
	mov	r8, [r8 + 64]

	jmp	.Lmain_\name
.type \name, %function
.size \name, .-\name
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	r8, rdi
	mov	rdi, [rdi]
	test	rdi, rdi
	jz	.LreturnNilMethod

	mov	r8, [r8 + 8]
	mov	r8, [r8 + 64]
	jmp	.Lmain_\lookup
.type \name, %function
.size \name, .-\name
.endm

GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound
GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret
GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup

Modified src/runtime/lookup-asm/lookup-asm-amd64-win64.S from [2fecd29e3d] to [aebc3c4fb2].

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
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	test	rcx, rcx
	jz	short .LreturnNilMethod

	test	cl, 1
	jnz	short .LtaggedPointer_\name

	mov	r8, [rcx]
	mov	r8, [r8 + 56]

.Lmain_\name:
	mov	r10, rcx
	mov	r11, rdx

	mov	rax, [rdx]
	movzx	ecx, ah
	movzx	edx, al
#ifdef OF_SELUID24
	shr	eax, 16

	mov	r8, [r8 + 8 * rax]
#endif
	mov	r8, [r8 + 8 * rcx]
	mov	rax, [r8 + 8 * rdx]

	test	rax, rax
	jz	short 0f

	ret

0:
	mov	rcx, r10
	mov	rdx, r11
	jmp	short \notFound

.LtaggedPointer_\name:
	xor	rcx, [rip + objc_taggedPointerSecret]
	and	cl, 0xE
	movzx	r8d, cl

	lea	rax, [rip + objc_taggedPointerClasses]
	mov	r8, [rax + 4 * r8]
	mov	r8, [r8 + 56]

	jmp	short .Lmain_\name
.def \name
.scl 2
.type 32
.endef
.endm

.macro GENERATE_LOOKUP_SUPER name lookup







|


|




















|






|










|







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
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	test	rcx, rcx
	jz	.LreturnNilMethod

	test	cl, 1
	jnz	.LtaggedPointer_\name

	mov	r8, [rcx]
	mov	r8, [r8 + 56]

.Lmain_\name:
	mov	r10, rcx
	mov	r11, rdx

	mov	rax, [rdx]
	movzx	ecx, ah
	movzx	edx, al
#ifdef OF_SELUID24
	shr	eax, 16

	mov	r8, [r8 + 8 * rax]
#endif
	mov	r8, [r8 + 8 * rcx]
	mov	rax, [r8 + 8 * rdx]

	test	rax, rax
	jz	0f

	ret

0:
	mov	rcx, r10
	mov	rdx, r11
	jmp	\notFound

.LtaggedPointer_\name:
	xor	rcx, [rip + objc_taggedPointerSecret]
	and	cl, 0xE
	movzx	r8d, cl

	lea	rax, [rip + objc_taggedPointerClasses]
	mov	r8, [rax + 4 * r8]
	mov	r8, [r8 + 56]

	jmp	.Lmain_\name
.def \name
.scl 2
.type 32
.endef
.endm

.macro GENERATE_LOOKUP_SUPER name lookup

Modified src/runtime/lookup-asm/lookup-asm-x86-elf.S from [cd6507b46d] to [657ef9388f].

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
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	mov	edx, [esp + 4]
	test	edx, edx
	jz	short .LreturnNilMethod

	test	dl, 1
	jnz	short .LtaggedPointer_\name

	mov	edx, [edx]
	mov	edx, [edx + 32]

.Lmain_\name:
	mov	eax, [esp + 8]

#ifdef OF_SELUID24
	movzx	ecx, byte ptr [eax + 2]
	mov	edx, [edx + 4 * ecx]
#endif
	movzx	ecx, byte ptr [eax + 1]
	mov	edx, [edx + 4 * ecx]
	movzx	ecx, byte ptr [eax]
	mov	eax, [edx + 4 * ecx]

	test	eax, eax
	jz	short 0f

	ret

0:
	call	.LgetEIP
	add	eax, offset _GLOBAL_OFFSET_TABLE_
	mov	eax, [eax + \notFound@GOT]







|


|

















|







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
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	mov	edx, [esp + 4]
	test	edx, edx
	jz	.LreturnNilMethod

	test	dl, 1
	jnz	.LtaggedPointer_\name

	mov	edx, [edx]
	mov	edx, [edx + 32]

.Lmain_\name:
	mov	eax, [esp + 8]

#ifdef OF_SELUID24
	movzx	ecx, byte ptr [eax + 2]
	mov	edx, [edx + 4 * ecx]
#endif
	movzx	ecx, byte ptr [eax + 1]
	mov	edx, [edx + 4 * ecx]
	movzx	ecx, byte ptr [eax]
	mov	eax, [edx + 4 * ecx]

	test	eax, eax
	jz	0f

	ret

0:
	call	.LgetEIP
	add	eax, offset _GLOBAL_OFFSET_TABLE_
	mov	eax, [eax + \notFound@GOT]
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
	and	dl, 0xE
	movzx	edx, dl

	mov	eax, [eax + objc_taggedPointerClasses@GOT]
	mov	edx, [eax + 2 * edx]
	mov	edx, [edx + 32]

	jmp	short .Lmain_\name
.type \name, %function
.size \name, .-\name
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	edx, [esp + 4]
	mov	eax, [edx]
	test	eax, eax
	jz	short .LreturnNilMethod

	mov	[esp + 4], eax
	mov	edx, [edx + 4]
	mov	edx, [edx + 32]
	jmp	short .Lmain_\lookup
.type \name, %function
.size \name, .-\name
.endm

GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound
GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret
GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup







|









|




|







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
	and	dl, 0xE
	movzx	edx, dl

	mov	eax, [eax + objc_taggedPointerClasses@GOT]
	mov	edx, [eax + 2 * edx]
	mov	edx, [edx + 32]

	jmp	.Lmain_\name
.type \name, %function
.size \name, .-\name
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	edx, [esp + 4]
	mov	eax, [edx]
	test	eax, eax
	jz	.LreturnNilMethod

	mov	[esp + 4], eax
	mov	edx, [edx + 4]
	mov	edx, [edx + 32]
	jmp	.Lmain_\lookup
.type \name, %function
.size \name, .-\name
.endm

GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound
GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret
GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup

Modified src/runtime/lookup-asm/lookup-asm-x86-win32.S from [d9ae57eae0] to [8858e35bdf].

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
.globl _objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	mov	edx, [esp + 4]
	test	edx, edx
	jz	short .LreturnNilMethod

	test	dl, 1
	jnz	short .LtaggedPointer_\name

	mov	edx, [edx]
	mov	edx, [edx + 32]

.Lmain_\name:
	mov	eax, [esp + 8]

#ifdef OF_SELUID24
	movzx	ecx, byte ptr [eax + 2]
	mov	edx, [edx + 4 * ecx]
#endif
	movzx	ecx, byte ptr [eax + 1]
	mov	edx, [edx + 4 * ecx]
	movzx	ecx, byte ptr [eax]
	mov	eax, [edx + 4 * ecx]

	test	eax, eax
	jz	short \notFound

	ret

.LtaggedPointer_\name:
	xor	edx, _objc_taggedPointerSecret
	and	dl, 0xE
	movzx	edx, dl

	mov	edx, [_objc_taggedPointerClasses + 2 * edx]
	mov	edx, [edx + 32]

	jmp	short .Lmain_\name
.def \name
.scl 2
.type 32
.endef
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	edx, [esp + 4]
	mov	eax, [edx]
	test	eax, eax
	jz	short .LreturnNilMethod

	mov	[esp + 4], eax
	mov	edx, [edx  + 4]
	mov	edx, [edx + 32]
	jmp	short .Lmain_\lookup
.def \name
.scl 2
.type 32
.endef
.endm

GENERATE_LOOKUP _objc_msg_lookup _objc_methodNotFound







|


|

















|











|











|


|

|







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
.globl _objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	mov	edx, [esp + 4]
	test	edx, edx
	jz	.LreturnNilMethod

	test	dl, 1
	jnz	.LtaggedPointer_\name

	mov	edx, [edx]
	mov	edx, [edx + 32]

.Lmain_\name:
	mov	eax, [esp + 8]

#ifdef OF_SELUID24
	movzx	ecx, byte ptr [eax + 2]
	mov	edx, [edx + 4 * ecx]
#endif
	movzx	ecx, byte ptr [eax + 1]
	mov	edx, [edx + 4 * ecx]
	movzx	ecx, byte ptr [eax]
	mov	eax, [edx + 4 * ecx]

	test	eax, eax
	jz	\notFound

	ret

.LtaggedPointer_\name:
	xor	edx, _objc_taggedPointerSecret
	and	dl, 0xE
	movzx	edx, dl

	mov	edx, [_objc_taggedPointerClasses + 2 * edx]
	mov	edx, [edx + 32]

	jmp	.Lmain_\name
.def \name
.scl 2
.type 32
.endef
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	edx, [esp + 4]
	mov	eax, [edx]
	test	eax, eax
	jz	.LreturnNilMethod

	mov	[esp + 4], eax
	mov	edx, [edx + 4]
	mov	edx, [edx + 32]
	jmp	.Lmain_\lookup
.def \name
.scl 2
.type 32
.endef
.endm

GENERATE_LOOKUP _objc_msg_lookup _objc_methodNotFound