• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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