ObjFW  Check-in [8e95cb1c77]

Overview
Comment:forwarding: Don't grow the stack twice on ARM64
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 8e95cb1c77624641a36b737f3b660a7c4e8fe2bdf17c4109146978b892fe35ba
User & Date: js on 2024-04-17 20:45:01
Other Links: manifest | tags
Context
2024-04-17
20:50
Add missing endbr / bti check-in: 171615d20a user: js tags: trunk
20:45
forwarding: Don't grow the stack twice on ARM64 check-in: 8e95cb1c77 user: js tags: trunk
2024-04-16
23:50
Don't use readdir_r check-in: c615b62ed8 user: js tags: trunk
Changes

Modified src/forwarding/apple-forwarding-arm64.S from [2d0bee101c] to [78c7e0a619].

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







-
+

-


-
-
-
-
-
+
+
+
+
+


-
-
-
-
+
+
+
+












-
+




-
+




-
-
-
-
-
+
+
+
+
+


-
-
-
-
+
+
+
+


-
+




-
-
+
+


-
+


.align 2
_OFForward:
_OFForward_stret:
#ifdef HAVE_BTI
	bti	c
#endif

	stp	fp, lr, [sp, #-208]!
	stp	fp, lr, [sp, #-224]!
	mov	fp, sp
	sub	sp, sp, #208

	/* Save all arguments, x8 and x19 */
	stp	x0, x1, [sp]
	stp	x2, x3, [sp, #16]
	stp	x4, x5, [sp, #32]
	stp	x6, x7, [sp, #48]
	stp	x8, x19, [sp, #64]
	stp	x0, x1, [sp, #16]
	stp	x2, x3, [sp, #32]
	stp	x4, x5, [sp, #48]
	stp	x6, x7, [sp, #64]
	stp	x8, x19, [sp, #80]

	/* Save all foating point arguments */
	stp	q0, q1, [sp, #80]
	stp	q2, q3, [sp, #112]
	stp	q4, q5, [sp, #144]
	stp	q6, q7, [sp, #176]
	stp	q0, q1, [sp, #96]
	stp	q2, q3, [sp, #128]
	stp	q4, q5, [sp, #160]
	stp	q6, q7, [sp, #192]

	bl	_object_getClass

	adrp	x19, Lsel_forwardingTargetForSelector_@PAGE
	add	x19, x19, Lsel_forwardingTargetForSelector_@PAGEOFF
	ldr	x19, [x19]

	mov	x1, x19
	bl	_class_respondsToSelector

	cbz	x0, 0f

	ldp	x0, x2, [sp]
	ldp	x0, x2, [sp, #16]
	mov	x1, x19
	bl	_objc_msgSend

	cbz	x0, 0f
	ldr	x1, [sp]
	ldr	x1, [sp, #16]
	cmp	x0, x1
	b.eq	0f

	/* Restore all arguments, x8 and x19, but not x0 */
	ldr	x1, [sp, #8]
	ldp	x2, x3, [sp, #16]
	ldp	x4, x5, [sp, #32]
	ldp	x6, x7, [sp, #48]
	ldp	x8, x19, [sp, #64]
	ldr	x1, [sp, #24]
	ldp	x2, x3, [sp, #32]
	ldp	x4, x5, [sp, #48]
	ldp	x6, x7, [sp, #64]
	ldp	x8, x19, [sp, #80]

	/* Restore all foating point arguments */
	ldp	q0, q1, [sp, #80]
	ldp	q2, q3, [sp, #112]
	ldp	q4, q5, [sp, #144]
	ldp	q6, q7, [sp, #176]
	ldp	q0, q1, [sp, #96]
	ldp	q2, q3, [sp, #128]
	ldp	q4, q5, [sp, #160]
	ldp	q6, q7, [sp, #192]

	mov	sp, fp
	ldp	fp, lr, [sp], #208
	ldp	fp, lr, [sp], #224

	b	_objc_msgSend

0:
	ldp	x0, x1, [sp]
	ldr	x19, [sp, #72]
	ldp	x0, x1, [sp, #16]
	ldr	x19, [sp, #88]

	mov	sp, fp
	ldp	fp, lr, [sp], #208
	ldp	fp, lr, [sp], #224

	b	_OFMethodNotFound

Modified src/forwarding/forwarding-arm64-elf.S from [8f1d6be95f] to [33f2532f58].

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







-
+

-


-
-
-
-
-
+
+
+
+
+


-
-
-
-
+
+
+
+











-
+





-
+



-
+




-
+






-
-
-
-
-
+
+
+
+
+


-
-
-
-
+
+
+
+


-
+




-
-
+
+


-
+







.section .text
OFForward:
OFForward_stret:
#ifdef HAVE_BTI
	bti	c
#endif

	stp	fp, lr, [sp, #-208]!
	stp	fp, lr, [sp, #-224]!
	mov	fp, sp
	sub	sp, sp, #208

	/* Save all arguments, x8 and x19 */
	stp	x0, x1, [sp]
	stp	x2, x3, [sp, #16]
	stp	x4, x5, [sp, #32]
	stp	x6, x7, [sp, #48]
	stp	x8, x19, [sp, #64]
	stp	x0, x1, [sp, #16]
	stp	x2, x3, [sp, #32]
	stp	x4, x5, [sp, #48]
	stp	x6, x7, [sp, #64]
	stp	x8, x19, [sp, #80]

	/* Save all foating point arguments */
	stp	q0, q1, [sp, #80]
	stp	q2, q3, [sp, #112]
	stp	q4, q5, [sp, #144]
	stp	q6, q7, [sp, #176]
	stp	q0, q1, [sp, #96]
	stp	q2, q3, [sp, #128]
	stp	q4, q5, [sp, #160]
	stp	q6, q7, [sp, #192]

	bl	object_getClass

	adrp	x19, .Lsel_forwardingTargetForSelector_
	add	x19, x19, :lo12:.Lsel_forwardingTargetForSelector_

	mov	x1, x19
	bl	class_respondsToSelector

	cbz	x0, 0f

	ldr	x0, [sp]
	ldr	x0, [sp, #16]
	mov	x1, x19
	bl	objc_msg_lookup

	mov	x1, x19
	mov	x19, x0
	ldp	x0, x2, [sp]
	ldp	x0, x2, [sp, #16]
	blr	x19

	cbz	x0, 0f
	ldr	x1, [sp]
	ldr	x1, [sp, #16]
	cmp	x0, x1
	b.eq	0f

	mov	x19, x0
	ldr	x1, [sp, #8]
	ldr	x1, [sp, #24]
	bl	objc_msg_lookup

	mov	x16, x0
	mov	x0, x19

	/* Restore all arguments, x8 and x19, but not x0 */
	ldr	x1, [sp, #8]
	ldp	x2, x3, [sp, #16]
	ldp	x4, x5, [sp, #32]
	ldp	x6, x7, [sp, #48]
	ldp	x8, x19, [sp, #64]
	ldr	x1, [sp, #24]
	ldp	x2, x3, [sp, #32]
	ldp	x4, x5, [sp, #48]
	ldp	x6, x7, [sp, #64]
	ldp	x8, x19, [sp, #80]

	/* Restore all foating point arguments */
	ldp	q0, q1, [sp, #80]
	ldp	q2, q3, [sp, #112]
	ldp	q4, q5, [sp, #144]
	ldp	q6, q7, [sp, #176]
	ldp	q0, q1, [sp, #96]
	ldp	q2, q3, [sp, #128]
	ldp	q4, q5, [sp, #160]
	ldp	q6, q7, [sp, #192]

	mov	sp, fp
	ldp	fp, lr, [sp], #208
	ldp	fp, lr, [sp], #224

	br	x16

0:
	ldp	x0, x1, [sp]
	ldr	x19, [sp, #72]
	ldp	x0, x1, [sp, #16]
	ldr	x19, [sp, #88]

	mov	sp, fp
	ldp	fp, lr, [sp], #208
	ldp	fp, lr, [sp], #224

	b	OFMethodNotFound
.type OFForward, %function
.size OFForward, .-OFForward
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret