ObjFW  Diff

Differences From Artifact [dd3cafda04]:

To Artifact [d3f8a4b569]:


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







-
+





-
-
+
+






-
-
+
+















-
+

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

-
-
-
-
-
+
+
+
+
+

-
-
+
+











-
-
-
-
+
+
+
+

-
+



















-
-
+
+









-
+



-
-
+
+





	pushq	%rbp
	movq	%rsp, %rbp

	subq	$16, %rsp
	andq	$-16, %rsp
	movq	%rdi, -8(%rbp)

	movb	225(%rdi), %r11b
	movb	OFFSET_RETURN_TYPE(%rdi), %r11b
	cmpb	$RETURN_TYPE_STRET, %r11b
	je	.lookup_stret
	cmpb	$RETURN_TYPE_JMP_STRET, %r11b
	je	.lookup_stret

	movq	8(%rdi), %rsi
	movq	0(%rdi), %rdi
	movq	OFFSET_GPR_IN+8(%rdi), %rsi
	movq	OFFSET_GPR_IN+0(%rdi), %rdi
	call	objc_msg_lookup@PLT

.after_lookup:
	movq	%rax, -16(%rbp)
	movq	-8(%rbp), %rdi

	leaq	240(%rdi), %rdx
	movq	232(%rdi), %rcx
	leaq	OFFSET_STACK(%rdi), %rdx
	movq	OFFSET_STACK_SIZE(%rdi), %rcx

	testq	$1, %rcx
	jnz	.fix_align

.fill_stack:
	testq	%rcx, %rcx
	jz	.stack_filled

	decq	%rcx
	movq	(%rdx,%rcx,8), %r11
	pushq	%r11

	jmp	.fill_stack

.stack_filled:
	movb	224(%rdi), %al
	movb	OFFSET_NUM_SSE_USED(%rdi), %al

	movdqa	176(%rdi), %xmm7
	movdqa	160(%rdi), %xmm6
	movdqa	144(%rdi), %xmm5
	movdqa	128(%rdi), %xmm4
	movdqa	112(%rdi), %xmm3
	movdqa	96(%rdi), %xmm2
	movdqa	80(%rdi), %xmm1
	movdqa	64(%rdi), %xmm0
	movdqa	OFFSET_SSE_INOUT+112(%rdi), %xmm7
	movdqa	OFFSET_SSE_INOUT+96(%rdi), %xmm6
	movdqa	OFFSET_SSE_INOUT+80(%rdi), %xmm5
	movdqa	OFFSET_SSE_INOUT+64(%rdi), %xmm4
	movdqa	OFFSET_SSE_INOUT+48(%rdi), %xmm3
	movdqa	OFFSET_SSE_INOUT+32(%rdi), %xmm2
	movdqa	OFFSET_SSE_INOUT+16(%rdi), %xmm1
	movdqa	OFFSET_SSE_INOUT(%rdi), %xmm0

	movq	40(%rdi), %r9
	movq	32(%rdi), %r8
	movq	24(%rdi), %rcx
	movq	16(%rdi), %rdx
	movq	8(%rdi), %rsi
	movq	OFFSET_GPR_IN+40(%rdi), %r9
	movq	OFFSET_GPR_IN+32(%rdi), %r8
	movq	OFFSET_GPR_IN+24(%rdi), %rcx
	movq	OFFSET_GPR_IN+16(%rdi), %rdx
	movq	OFFSET_GPR_IN+8(%rdi), %rsi

	movb	225(%rdi), %r11b
	movq	0(%rdi), %rdi
	movb	OFFSET_RETURN_TYPE(%rdi), %r11b
	movq	OFFSET_GPR_IN(%rdi), %rdi

	cmpb	$RETURN_TYPE_JMP, %r11b
	je	.jmp_into_method
	cmpb	$RETURN_TYPE_JMP_STRET, %r11b
	je	.jmp_into_method

	movq	-16(%rbp), %r11
	call	*%r11

.after_send:
	movq	-8(%rbp), %rdi
	movq	%rax, 48(%rdi)
	movq	%rdx, 56(%rdi)
	movdqa	%xmm0, 64(%rdi)
	movdqa	%xmm1, 80(%rdi)
	movq	%rax, OFFSET_GPR_OUT(%rdi)
	movq	%rdx, OFFSET_GPR_OUT+8(%rdi)
	movdqa	%xmm0, OFFSET_SSE_INOUT(%rdi)
	movdqa	%xmm1, OFFSET_SSE_INOUT+16(%rdi)

	movb	225(%rdi), %r11b
	movb	OFFSET_RETURN_TYPE(%rdi), %r11b

	cmpb	$RETURN_TYPE_X87, %r11b
	je	.pop_long_double

	cmpb	$RETURN_TYPE_COMPLEX_X87, %r11b
	je	.pop_complex_long_double

.return:
	movq	%rbp, %rsp
	popq	%rbp

	ret

.fix_align:
	xorq	%r11, %r11
	pushq	%r11
	jmp	.fill_stack

.lookup_stret:
	movq	16(%rdi), %rsi
	movq	8(%rdi), %rdi
	movq	OFFSET_GPR_IN+16(%rdi), %rsi
	movq	OFFSET_GPR_IN+8(%rdi), %rdi
	call	objc_msg_lookup_stret@PLT

	jmp	.after_lookup

.jmp_into_method:
	movq	-16(%rbp), %r11
	jmp	*%r11

.pop_long_double:
	fstpt	192(%rdi)
	fstpt	OFFSET_X87_OUT(%rdi)
	jmp	.return

.pop_complex_long_double:
	fstpt	192(%rdi)
	fstpt	208(%rdi)
	fstpt	OFFSET_X87_OUT(%rdi)
	fstpt	OFFSET_X87_OUT+16(%rdi)
	jmp	.return

#ifdef OF_LINUX
.section .note.GNU-stack, "", %progbits
#endif