ObjFW  Check-in [a0e61a4760]

Overview
Comment:lookup-asm-powerpc-elf.S: Support tagged pointers
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | tagged-pointers
Files: files | file ages | folders
SHA3-256: a0e61a47608ae351f9b54dfbee4d0645ff03abd482bf98dff324d95fe3ca43c5
User & Date: js on 2020-07-08 19:52:02
Other Links: branch diff | manifest | tags
Context
2020-07-09
00:11
lookup-asm-arm-elf.S: Support tagged pointers check-in: eb007abba9 user: js tags: tagged-pointers
2020-07-08
19:52
lookup-asm-powerpc-elf.S: Support tagged pointers check-in: a0e61a4760 user: js tags: tagged-pointers
00:17
Merge trunk into branch "tagged-pointers" check-in: 3e57593e8d user: js tags: tagged-pointers
Changes

Modified src/runtime/lookup-asm/lookup-asm-powerpc-elf.S from [5f9a77b0a0] to [022ff654de].

26
27
28
29
30
31
32



33
34
35
36
37
38
39
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42







+
+
+








.section .text
.macro generate_lookup name not_found
\name:
	cmpwi	%r3, 0
	beq-	ret_nil

	andi.	%r0, %r3, 1
	bne-	.Ltagged_pointer_\name

	lwz	%r5, 0(%r3)
	lwz	%r5, 32(%r5)

.Lmain_\name:
	lwz	%r8, 0(%r4)
#ifdef OF_SELUID24
	rlwinm	%r6, %r8, 18, 0x3FC
50
51
52
53
54
55
56




57

































58
59
60
61
62
63
64
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







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







	cmpwi	%r5, 0
	beq-	0f

	mr	%r3, %r5
	blr

0:
	stwu	%r1, -16(%r1)
	mflr	%r0	
	stw	%r0, 20(%r1)
	stw	%r30, 8(%r1)
	b	\not_found@plt

	bl	0f
0:
	mflr	%r30
	addis	%r30, %r30, .Lbiased_got2-0b@ha
	addi	%r30, %r30, .Lbiased_got2-0b@l

	lwz	%r0, .Lgot_\not_found-.Lbiased_got2(%r30)
	mtctr	%r0

	lwz	%r30, 8(%r1)
	lwz	%r0, 20(%r1)
	addi	%r1, %r1, 16
	mtlr	%r0

	bctr

.Ltagged_pointer_\name:
	mflr	%r7
	bl	0f
0:
	mflr	%r6
	mtlr	%r7
	addis	%r6, %r6, .Lbiased_got2-0b@ha
	addi	%r6, %r6, .Lbiased_got2-0b@l

	rlwinm	%r5, %r3, 1, 0x1C

	lwz	%r6, .Lgot_objc_tagged_pointer_classes-.Lbiased_got2(%r6)
	lwzx	%r5, %r6, %r5
	lwz	%r5, 32(%r5)

	b	.Lmain_\name
.type \name, @function
.size \name, .-\name
.endm

.macro generate_lookup_super name lookup
\name:
	mr	%r5, %r3
91
92
93
94
95
96
97









98
99
100
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148







+
+
+
+
+
+
+
+
+



	li	%r3, 0
	blr

get_pc:
	mflr	%r3
	blr

.section .got2, "aw"
.Lbiased_got2 = .+0x8000
.Lgot_objc_method_not_found:
	.long objc_method_not_found
.Lgot_objc_method_not_found_stret:
	.long objc_method_not_found_stret
.Lgot_objc_tagged_pointer_classes:
	.long objc_tagged_pointer_classes

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