user: What is the c source code of the assembly code below?

```asm
<dtrsl_>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rcx,%r12
  mov    %rdi,%rcx
  push   %rbp
  lea    0x1(%rsi),%ebp
  push   %rbx
  movslq %ebp,%rbp
  mov    %edx,%ebx
  shl    $0x3,%rbp
  sub    %rbp,%rcx
  sub    $0x28,%rsp
  test   %edx,%edx
  jle    L100
  mov    %rdi,%rdx
  mov    $0x1,%eax
  pxor   %xmm0,%xmm0
  jmp    L26
  nopl   0x0(%rax)
L79:
  add    $0x1,%eax
  add    %rbp,%rdx
  cmp    %eax,%ebx
  jl     L100
L26:
  ucomisd (%rdx),%xmm0
  jp     L79
  jne    L79
  mov    %eax,(%r9)
L54:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L100:
  movl   $0x0,(%r9)
  cmp    $0x1,%r8d
  je     L53
  mov    %esi,%eax
  movslq %ebx,%rdi
  imul   %ebx,%eax
  lea    0x0(,%rdi,8),%rbp
  lea    -0x8(%r12,%rbp,1),%r8
  movsd  (%r8),%xmm0
  lea    (%rax,%rbx,1),%edx
  movslq %edx,%rdx
  divsd  (%rcx,%rdx,8),%xmm0
  movsd  %xmm0,(%r8)
  cmp    $0x1,%ebx
  jle    L54
  mov    %esi,%r14d
  mov    %esi,%r13d
  add    %r12,%rbp
  mov    $0x2,%r15d
  neg    %r14d
  not    %r13d
  movslq %r14d,%r14
  movslq %r13d,%r13
  lea    0x0(,%r14,8),%rdx
  mov    %rdx,0x10(%rsp)
  movslq %eax,%rdx
  sub    %esi,%eax
  cltq
  lea    0x8(%rcx,%rdx,8),%r14
  lea    0x0(,%r13,8),%rdx
  add    %rdi,%rax
  mov    %rdx,0x8(%rsp)
  lea    (%rcx,%rax,8),%r13
  lea    0x1(%rbx),%eax
  mov    %eax,0x1c(%rsp)
  nopw   0x0(%rax,%rax,1)
L108:
  mov    0x1c(%rsp),%edi
  movsd  -0x8(%rbp),%xmm0
  mov    %r14,%rsi
  mov    %r12,%rdx
  xorpd  D9(%rip),%xmm0
  sub    $0x8,%rbp
  sub    %r15d,%edi
  add    $0x1,%r15d
  call   <daxpy_@plt>
  movsd  -0x8(%rbp),%xmm0
  add    0x10(%rsp),%r14
  divsd  -0x8(%r13),%xmm0
  add    0x8(%rsp),%r13
  movsd  %xmm0,-0x8(%rbp)
  cmp    %r15d,%ebx
  jge    L108
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L53:
  movsd  (%r12),%xmm0
  divsd  (%rdi),%xmm0
  movsd  %xmm0,(%r12)
  cmp    $0x1,%ebx
  jle    L54
  lea    -0x8(%rbp),%rax
  add    %esi,%esi
  mov    $0x2,%r13d
  mov    %rax,0x8(%rsp)
  movslq %esi,%rax
  add    $0x2,%esi
  lea    0x8(%rcx,%rax,8),%r14
  movslq %esi,%rax
  lea    (%rcx,%rax,8),%r15
  nopl   0x0(%rax)
L33:
  lea    -0x1(%r13),%edi
  mov    %r14,%rsi
  mov    %r12,%rdx
  call   <ddot_@plt>
  pxor   %xmm1,%xmm1
  add    0x8(%rsp),%r14
  movsd  -0x8(%r12,%r13,8),%xmm0
  cvtsi2sd %rax,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%r12,%r13,8)
  divsd  (%r15),%xmm0
  add    %rbp,%r15
  movsd  %xmm0,-0x8(%r12,%r13,8)
  add    $0x1,%r13
  cmp    %r13d,%ebx
  jge    L33
  jmp    L54
```

tool_calls: name: unpack_data
arguments: data_label: D9
data_type: f32[4]

tool: {"D9": [0.0,-0.0,0.0,0.0]}

assistant: ```c
void dtrsl_(double *t, int ldt, int n, double *b, int transp, int *info) {
  int t_offset, i2;
  int j, jj;
  double temp;
  t_offset = 1 + ldt;
  t -= t_offset;
  --b;
  for (j = 1; j <= n; ++j) {
    if (t[j + j * ldt] == 0.0) {
      *info = j;
      return;
    }
  }
  *info = 0;
  if (transp == 1) {
    b[1] /= t[ldt + 1];
    if (n > 1) {
      for (j = 2; j <= n; ++j) {
        i2 = j - 1;
        b[j] -= ddot_(i2, &t[j * ldt + 1], &b[1]);
        b[j] /= t[j + j * ldt];
      }
    }
  } else {
    b[n] /= t[n + n * ldt];
    if (n > 1) {
      for (jj = 2; jj <= n; ++jj) {
        j = n - jj + 1;
        temp = -b[j + 1];
        daxpy_(j, temp, &t[(j + 1) * ldt + 1], &b[1]);
        b[j] /= t[j + j * ldt];
      }
    }
  }
}
```