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