user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<populate2Dmatrix>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  lea    0x0(,%rbx,8),%eax
  mov    %eax,%edi
  sub    $0x38,%rsp
  mov    %eax,0x1c(%rsp)
  call   <malloc@plt>
  mov    %rax,(%rsp)
  test   %ebx,%ebx
  jle    L12
  lea    -0x1(%rbx),%eax
  pxor   %xmm2,%xmm2
  xor    %ebp,%ebp
  mov    $0x1,%r13d
  mov    %rax,0x28(%rsp)
  cvtsi2sd %ebx,%xmm2
  add    $0x2,%rax
  mov    %rax,0x20(%rsp)
  cs nopw 0x0(%rax,%rax,1)
L27:
  mov    0x1c(%rsp),%edi
  movsd  %xmm2,0x8(%rsp)
  call   <malloc@plt>
  mov    (%rsp),%rdi
  movsd  0x8(%rsp),%xmm2
  xor    %esi,%esi
  mov    %rax,0x0(%rbp,%rdi,1)
  mov    D9(%rip),%rax
  mov    %rdi,%r14
  mov    (%r12,%rbp,1),%r15
  movq   %rax,%xmm1
  nopl   0x0(%rax,%rax,1)
L77:
  mov    %esi,%eax
  pxor   %xmm0,%xmm0
  neg    %eax
  cltd
  idiv   %ebx
  cvtsi2sd %edx,%xmm0
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%r15,%rsi,8)
  add    $0x1,%rsi
  cmp    %r13,%rsi
  jne    L77
  movsd  %xmm2,0x8(%rsp)
  add    $0x1,%r13
  lea    0x8(%rbp),%r11
  cmp    0x20(%rsp),%r13
  je     L30
  mov    %ebx,%eax
  lea    (%r15,%r11,1),%rdi
  xor    %esi,%esi
  mov    %r11,0x10(%rsp)
  sub    %r13d,%eax
  lea    0x8(,%rax,8),%rdx
  call   <memset@plt>
  mov    D9(%rip),%rax
  movsd  0x8(%rsp),%xmm2
  mov    %rax,(%r15,%rbp,1)
  mov    0x10(%rsp),%rbp
  jmp    L27
L30:
  mov    0x28(%rsp),%rax
  mov    (%rsp),%rcx
  movsd  %xmm1,(%r15,%rax,8)
  lea    0x8(%rcx,%rax,8),%r13
  lea    0x0(,%rbx,8),%r15
  nopw   0x0(%rax,%rax,1)
L7:
  mov    (%rcx),%rdi
  mov    %r15,%rdx
  xor    %esi,%esi
  mov    %rcx,0x8(%rsp)
  call   <memset@plt>
  mov    0x8(%rsp),%rcx
  add    $0x8,%rcx
  cmp    %rcx,%r13
  jne    L7
  mov    %r12,%r8
  xor    %ecx,%ecx
  sub    (%rsp),%r8
  nopl   0x0(%rax)
L49:
  mov    (%rsp),%rdi
  nopl   0x0(%rax)
L14:
  mov    (%r8,%rdi,1),%rsi
  mov    (%rdi),%rdx
  xor    %eax,%eax
  add    %rcx,%rsi
  nopl   0x0(%rax)
L51:
  mov    (%r12,%rax,8),%r9
  movsd  (%r9,%rcx,1),%xmm0
  mulsd  (%rsi),%xmm0
  addsd  (%rdx,%rax,8),%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rbx,%rax
  jne    L51
  add    $0x8,%rdi
  cmp    %rdi,%r13
  jne    L14
  add    $0x8,%rcx
  cmp    %r15,%rcx
  jne    L49
  nopl   0x0(%rax,%rax,1)
L8:
  mov    (%r14),%rcx
  mov    (%r8,%r14,1),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L46:
  movsd  (%rcx,%rax,8),%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %rbx,%rax
  jne    L46
  add    $0x8,%r14
  cmp    %r14,%r13
  jne    L8
L12:
  mov    (%rsp),%rdi
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <free2D@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D9
type: byte[8]

tool: {"D9": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
void populate2Dmatrix(double **m, int size) {
  int i, j;
  double **aux;
  aux = (double **)malloc(size * sizeof(double *));
  for (i = 0; i < size; i++) {
    aux[i] = (double *)malloc(size * sizeof(double));
    for (j = 0; j <= i; j++) {
      m[i][j] = (double)(-j % size) / size + 1;
    }
    for (j = i + 1; j < size; j++) {
      m[i][j] = 0;
    }
    m[i][i] = 1;
  }
  int r, s, t;
  for (r = 0; r < size; ++r)
    for (s = 0; s < size; ++s)
      aux[r][s] = 0;
  for (t = 0; t < size; ++t)
    for (r = 0; r < size; ++r)
      for (s = 0; s < size; ++s)
        aux[r][s] += m[r][t] * m[s][t];
  for (r = 0; r < size; ++r)
    for (s = 0; s < size; ++s) {
      m[r][s] = aux[r][s];
    }
  free2D(aux);
}
```