25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
+
+
+
|
.globl objc_msg_lookup_super_stret
.section .text
.macro generate_lookup name not_found
\name:
beqz $a0, 0f
andi $t0, $a0, 1
bnez $t0, .Ltagged_pointer_\name
lw $t0, 0($a0)
lw $t0, 32($t0)
.Lmain_\name:
#ifdef OF_BIG_ENDIAN
# ifdef OF_SELUID24
lbu $t1, 1($a1)
|
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
addiu $gp, $gp, %lo(_gp_disp)
addu $gp, $gp, $t9
addiu $gp, $gp, 1b-\name
lw $t9, %call16(\not_found)($gp)
jr $t9
#endif
.Ltagged_pointer_\name:
#ifdef OF_PIC
0:
lui $gp, %hi(_gp_disp)
addiu $gp, $gp, %lo(_gp_disp)
addu $gp, $gp, $t9
addiu $gp, $gp, 0b-\name
lw $t0, %got(objc_tagged_pointer_secret)($gp)
#else
la $t0, objc_tagged_pointer_secret
#endif
lw $t0, 0($t0)
xor $t0, $a0, $t0
and $t0, $t0, 0xE
sll $t0, $t0, 1
#ifdef OF_PIC
lw $t1, %got(objc_tagged_pointer_classes)($gp)
#else
la $t1, objc_tagged_pointer_classes
#endif
addu $t0, $t1, $t0
ld $t0, ($t0)
ld $t0, 32($t0)
b .Lmain_\name
.type \name, %function
.size \name, .-\name
.endm
.macro generate_lookup_super name lookup
\name:
move $t0, $a0
|