1# size_t __tlsdesc_static(size_t *a) 2# { 3# return a[1]; 4# } 5.text 6.global __tlsdesc_static 7.hidden __tlsdesc_static 8.type __tlsdesc_static,%function 9__tlsdesc_static: 10 ld.d $a0, $a0, 8 11 jr $ra 12 13# size_t __tlsdesc_dynamic(size_t *a) 14# { 15# struct {size_t modidx,off;} *p = (void*)a[1]; 16# size_t *dtv = *(size_t**)(tp - 8); 17# return dtv[p->modidx] + p->off - tp; 18# } 19.global __tlsdesc_dynamic 20.hidden __tlsdesc_dynamic 21.type __tlsdesc_dynamic,%function 22__tlsdesc_dynamic: 23 addi.d $sp, $sp, -16 24 st.d $t1, $sp, 0 25 st.d $t2, $sp, 8 26 ld.d $t2, $tp, -8 # t2=dtv 27 ld.d $a0, $a0, 8 # a0=&{modidx,off} 28 ld.d $t1, $a0, 8 # t1=off 29 ld.d $a0, $a0, 0 # a0=modidx 30 slli.d $a0, $a0, 3 # a0=8*modidx 31 add.d $a0, $a0, $t2 # a0=dtv+8*modidx 32 ld.d $a0, $a0, 0 # a0=dtv[modidx] 33 add.d $a0, $a0, $t1 # a0=dtv[modidx]+off 34 sub.d $a0, $a1, $tp 35 ld.d $t1, $sp, 0 36 ld.d $t2, $sp, 8 37 addi.d $sp, $sp, 16 38 jr $ra 39