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
	pushq	%rbp
	movq	%rsp, %rbp

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

	movb	225(%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
	call	objc_msg_lookup@PLT

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

	leaq	240(%rdi), %rdx
	movq	232(%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

	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

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

	movb	225(%rdi), %r11b
	movq	0(%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)

	movb	225(%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
	call	objc_msg_lookup_stret@PLT

	jmp	.after_lookup

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

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

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

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







|





|
|






|
|















|

|
|
|
|
|
|
|
|

|
|
|
|
|

|
|











|
|
|
|

|



















|
|









|



|
|





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	OFFSET_RETURN_TYPE(%rdi), %r11b
	cmpb	$RETURN_TYPE_STRET, %r11b
	je	.lookup_stret
	cmpb	$RETURN_TYPE_JMP_STRET, %r11b
	je	.lookup_stret

	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	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	OFFSET_NUM_SSE_USED(%rdi), %al

	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	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	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, 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	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	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	OFFSET_X87_OUT(%rdi)
	jmp	.return

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

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