1.syntax unified
2
3.text
4.global __tlsdesc_static
5.hidden __tlsdesc_static
6.type __tlsdesc_static,%function
7__tlsdesc_static:
8	ldr r0,[r0]
9	bx lr
10
11.hidden __tls_get_new
12
13.global __tlsdesc_dynamic
14.hidden __tlsdesc_dynamic
15.type __tlsdesc_dynamic,%function
16__tlsdesc_dynamic:
17	push {r2,r3,ip,lr}
18	ldr r1,[r0]
19	ldr r2,[r1,#4]  // r2 = offset
20	ldr r1,[r1]     // r1 = modid
21
22#if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
23 || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
24	mrc p15,0,r0,c13,c0,3
25#else
26	ldr r0,1f
27	add r0,r0,pc
28	ldr r0,[r0]
292:
30#if __ARM_ARCH >= 5
31	blx r0          // r0 = tp
32#else
33	mov lr,pc
34	bx r0
35#endif
36#endif
37	ldr r3,[r0,#-4] // r3 = dtv
38	ldr ip,[r3,r1,LSL #2]
39	sub r0,ip,r0
40	add r0,r0,r2    // r0 = r3[r1]-r0+r2
41#if __ARM_ARCH >= 5
42	pop {r2,r3,ip,pc}
43#else
44	pop {r2,r3,ip,lr}
45	bx lr
46#endif
47
48#if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
49 || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
50#else
51	.align 2
521:	.word __a_gettp_ptr - 2b
53#endif
54