user: 请将以下的汇编代码转换成C语言代码：

```asm
<alloc1>:
  endbr64
  push   %r12
  push   %rbp
  movslq %edi,%rbp
  lea    D26(%rip),%rdi
  push   %rbx
  call   <puts@plt>
  lea    0x0(,%rbp,8),%rdi
  call   <malloc@plt>
  mov    %rax,%rdi
  mov    %rax,%r12
  xor    %eax,%eax
  call   <null_check@plt>
  mov    %ebp,%edi
  imul   %ebp,%edi
  movslq %edi,%rdi
  shl    $0x2,%rdi
  call   <malloc@plt>
  mov    %rax,(%r12)
  mov    %rax,%rdi
  xor    %eax,%eax
  call   <null_check@plt>
  cmp    $0x1,%ebp
  jle    L48
  lea    -0x2(%rbp),%edx
  mov    %rbp,%rbx
  cmp    $0x5,%edx
  jbe    L39
  lea    -0x1(%rbp),%ecx
  movdqa D22(%rip),%xmm2
  pxor   %xmm4,%xmm4
  movd   %ebp,%xmm7
  movdqa %xmm4,%xmm5
  pshufd $0x0,%xmm7,%xmm7
  lea    0x8(%r12),%rax
  mov    %ecx,%edx
  shr    $0x2,%edx
  movq   (%r12),%xmm6
  pcmpgtd %xmm2,%xmm5
  movdqa %xmm7,%xmm8
  sub    $0x1,%edx
  movdqa D0(%rip),%xmm3
  psrlq  $0x20,%xmm8
  shl    $0x5,%rdx
  punpcklqdq %xmm6,%xmm6
  lea    0x28(%r12,%rdx,1),%rdx
  nopl   0x0(%rax,%rax,1)
L47:
  movdqa %xmm3,%xmm1
  movdqa %xmm4,%xmm9
  paddd  %xmm2,%xmm3
  add    $0x20,%rax
  movdqa %xmm1,%xmm0
  psrlq  $0x20,%xmm1
  movdqa %xmm5,%xmm10
  pmuludq %xmm7,%xmm0
  pmuludq %xmm8,%xmm1
  pshufd $0x8,%xmm0,%xmm0
  pshufd $0x8,%xmm1,%xmm1
  punpckldq %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  punpckldq %xmm0,%xmm1
  punpckhdq %xmm0,%xmm0
  pcmpgtd %xmm1,%xmm9
  pmuludq %xmm1,%xmm10
  pmuludq %xmm2,%xmm1
  pmuludq %xmm2,%xmm9
  paddq  %xmm10,%xmm9
  psllq  $0x20,%xmm9
  paddq  %xmm9,%xmm1
  movdqa %xmm5,%xmm9
  paddq  %xmm6,%xmm1
  pmuludq %xmm0,%xmm9
  movups %xmm1,-0x20(%rax)
  movdqa %xmm4,%xmm1
  pcmpgtd %xmm0,%xmm1
  pmuludq %xmm2,%xmm0
  pmuludq %xmm2,%xmm1
  paddq  %xmm9,%xmm1
  psllq  $0x20,%xmm1
  paddq  %xmm1,%xmm0
  paddq  %xmm6,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rdx,%rax
  jne    L47
  mov    %ecx,%eax
  and    $0xfffffffc,%eax
  lea    0x1(%rax),%edx
  cmp    %eax,%ecx
  je     L48
  mov    %ebx,%ecx
  mov    (%r12),%rdi
  imul   %edx,%ecx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rsi
  movslq %ecx,%r8
  lea    (%rdi,%r8,4),%rdi
  mov    %rdi,(%r12,%rdx,8)
  lea    0x2(%rax),%edx
  cmp    %edx,%ebx
  jle    L48
  mov    (%r12),%rdx
  add    %ebx,%ecx
  add    $0x3,%eax
  movslq %ecx,%rdi
  lea    (%rdx,%rdi,4),%rdx
  mov    %rdx,0x8(%r12,%rsi,1)
  cmp    %eax,%ebx
  jle    L48
  mov    (%r12),%rax
  add    %ecx,%ebx
  movslq %ebx,%rbx
  lea    (%rax,%rbx,4),%rax
  mov    %rax,0x10(%r12,%rsi,1)
L48:
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L39:
  shl    $0x2,%rbp
  lea    0x10(%r12,%rdx,8),%rsi
  lea    0x8(%r12),%rax
  mov    %rbp,%rdx
  nopl   0x0(%rax)
L53:
  mov    (%r12),%rcx
  add    $0x8,%rax
  add    %rdx,%rcx
  add    %rbp,%rdx
  mov    %rcx,-0x8(%rax)
  cmp    %rsi,%rax
  jne    L53
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D26
datatype: string
name: extract_symbolic_data
arguments: tag: D22
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D0
datatype: byte[16]

tool: D26: * alloc1():

tool: {"D22": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D0": [0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

assistant: ```c
const int **alloc1(const int N) {
  printf("* alloc1():\n");
  const int **a = malloc(N * sizeof(int *));
  null_check(a);
  a[0] = malloc(N * N * sizeof(int));
  null_check(a[0]);
  for (int i = 1; i < N; i++) {
    a[i] = a[0] + (N * i);
  }
  return a;
}
```