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