// size_t __tlsdesc_static(size_t *a)
// {
// 	return a[1];
// }
.global __tlsdesc_static
.hidden __tlsdesc_static
.type __tlsdesc_static,@function
__tlsdesc_static:
	ldr x0,[x0,#8]
	ret

.hidden __tls_get_new

// size_t __tlsdesc_dynamic(size_t *a)
// {
// 	struct {size_t modidx,off;} *p = (void*)a[1];
// 	size_t *dtv = *(size_t**)(tp + 16 - 8);
// 	if (p->modidx <= dtv[0])
// 		return dtv[p->modidx] + p->off - tp;
// 	return __tls_get_new(p) - tp;
// }
.global __tlsdesc_dynamic
.hidden __tlsdesc_dynamic
.type __tlsdesc_dynamic,@function
__tlsdesc_dynamic:
	stp x1,x2,[sp,#-32]!
	stp x3,x4,[sp,#16]
	mrs x1,tpidr_el0      // tp
	ldr x0,[x0,#8]        // p
	ldr x2,[x0]           // p->modidx
	add x3,x1,#8
	ldr x3,[x3]           // dtv
	ldr x4,[x3]           // dtv[0]
	cmp x2,x4
	b.hi 1f
	ldr x2,[x3,x2,lsl #3] // dtv[p->modidx]
	ldr x0,[x0,#8]        // p->off
	add x0,x0,x2
2:	sub x0,x0,x1
	ldp x3,x4,[sp,#16]
	ldp x1,x2,[sp],#32
	ret

	// save all registers __tls_get_new may clobber
	// update sp in two steps because offset must be in [-512,509]
1:	stp x29,x30,[sp,#-160]!
	stp x5,x6,[sp,#16]
	stp x7,x8,[sp,#32]
	stp x9,x10,[sp,#48]
	stp x11,x12,[sp,#64]
	stp x13,x14,[sp,#80]
	stp x15,x16,[sp,#96]
	stp x17,x18,[sp,#112]
	stp q0,q1,[sp,#128]
	stp q2,q3,[sp,#-480]!
	stp q4,q5,[sp,#32]
	stp q6,q7,[sp,#64]
	stp q8,q9,[sp,#96]
	stp q10,q11,[sp,#128]
	stp q12,q13,[sp,#160]
	stp q14,q15,[sp,#192]
	stp q16,q17,[sp,#224]
	stp q18,q19,[sp,#256]
	stp q20,q21,[sp,#288]
	stp q22,q23,[sp,#320]
	stp q24,q25,[sp,#352]
	stp q26,q27,[sp,#384]
	stp q28,q29,[sp,#416]
	stp q30,q31,[sp,#448]
	bl __tls_get_new
	mrs x1,tpidr_el0
	ldp q4,q5,[sp,#32]
	ldp q6,q7,[sp,#64]
	ldp q8,q9,[sp,#96]
	ldp q10,q11,[sp,#128]
	ldp q12,q13,[sp,#160]
	ldp q14,q15,[sp,#192]
	ldp q16,q17,[sp,#224]
	ldp q18,q19,[sp,#256]
	ldp q20,q21,[sp,#288]
	ldp q22,q23,[sp,#320]
	ldp q24,q25,[sp,#352]
	ldp q26,q27,[sp,#384]
	ldp q28,q29,[sp,#416]
	ldp q30,q31,[sp,#448]
	ldp q2,q3,[sp],#480
	ldp x5,x6,[sp,#16]
	ldp x7,x8,[sp,#32]
	ldp x9,x10,[sp,#48]
	ldp x11,x12,[sp,#64]
	ldp x13,x14,[sp,#80]
	ldp x15,x16,[sp,#96]
	ldp x17,x18,[sp,#112]
	ldp q0,q1,[sp,#128]
	ldp x29,x30,[sp],#160
	b 2b
