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

```asm
<unir_cuatro_imagenes>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r12
  mov    %rsi,%r13
  mov    %rdx,%r14
  mov    %rcx,%r15
  mov    %r8d,%ebp
  mov    %r9d,%ebx
  lea    (%r8,%r8,1),%edi
  lea    (%r9,%r9,1),%eax
  imul   %eax,%edi
  shl    $0x2,%edi
  call   <malloc@plt>
  mov    %rax,%r9
  mov    %ebp,%r11d
  imul   %ebx,%r11d
  test   %ebp,%ebp
  jle    L156
  movslq %ebp,%rdx
  shl    $0x2,%rdx
  lea    0x0(%rbp,%rbp,1),%eax
  cltq
  shl    $0x2,%rax
  mov    %r14,%rdi
  mov    $0x0,%r8d
  mov    %r9,%r10
  sub    %r14,%r10
  jmp    L169
L83:
  movss  (%rsi),%xmm0
  movss  %xmm0,(%r14)
  add    $0x1,%ecx
  add    %rdx,%rsi
  add    %rax,%r14
  cmp    %ecx,%ebx
  jne    L83
L155:
  lea    0x1(%r8),%ecx
  add    $0x4,%rdi
  cmp    %ecx,%ebp
  je     L146
  mov    %ecx,%r8d
L169:
  lea    (%r10,%rdi,1),%r14
  mov    %rdi,%rsi
  mov    $0x0,%ecx
  test   %ebx,%ebx
  jg     L83
  jmp    L155
L146:
  mov    %r15,%rbp
  movslq %ecx,%r10
  mov    %rdx,%rcx
  sub    %r15,%rcx
  lea    (%rcx,%r9,1),%r15
  mov    $0x0,%r14d
  jmp    L50
L179:
  movss  (%rsi),%xmm0
  movss  %xmm0,(%rdi)
  add    $0x1,%ecx
  add    %rdx,%rsi
  add    %rax,%rdi
  cmp    %ecx,%ebx
  jne    L179
L86:
  lea    0x1(%r14),%ecx
  add    $0x4,%rbp
  cmp    %r14d,%r8d
  je     L14
  mov    %ecx,%r14d
L50:
  lea    0x0(%rbp,%r15,1),%rdi
  mov    %rbp,%rsi
  mov    $0x0,%ecx
  test   %ebx,%ebx
  jg     L179
  jmp    L86
L154:
  movss  (%rsi),%xmm0
  movss  %xmm0,(%rdi)
  add    $0x1,%ecx
  add    %rdx,%rsi
  add    %rax,%rdi
  cmp    %ecx,%ebx
  jne    L154
L111:
  lea    0x1(%r11),%ecx
  add    $0x4,%rbp
  cmp    %r11d,%r8d
  je     L194
  mov    %ecx,%r11d
L60:
  lea    0x0(%rbp,%r12,1),%rdi
  mov    %rbp,%rsi
  mov    $0x0,%ecx
  test   %ebx,%ebx
  jg     L154
  jmp    L111
L194:
  mov    %r13,%r11
  lea    (%r14,%r10,1),%rbp
  shl    $0x2,%rbp
  sub    %r13,%rbp
  add    %r9,%rbp
  mov    $0x0,%r10d
  jmp    L23
L14:
  mov    %r12,%rbp
  add    %r11d,%r11d
  movslq %r11d,%r14
  lea    0x0(,%r14,4),%rcx
  sub    %r12,%rcx
  lea    (%rcx,%r9,1),%r12
  mov    $0x0,%r11d
  jmp    L60
L187:
  movss  (%rsi),%xmm0
  movss  %xmm0,(%rdi)
  add    $0x1,%ecx
  add    %rdx,%rsi
  add    %rax,%rdi
  cmp    %ecx,%ebx
  jne    L187
L52:
  lea    0x1(%r10),%ecx
  add    $0x4,%r11
  cmp    %r10d,%r8d
  je     L156
  mov    %ecx,%r10d
L23:
  lea    (%r11,%rbp,1),%rdi
  mov    %r11,%rsi
  mov    $0x0,%ecx
  test   %ebx,%ebx
  jg     L187
  jmp    L52
L156:
  mov    %r9,%rax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
float *unir_cuatro_imagenes(float *a, float *b, float *c, float *d, int width, int height) {
  int i, j;
  float *output = (float *)malloc(sizeof(float) * (width * 2) * (height * 2));
  float *tmp = output + (width * 2) * height;
  for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
      int index = (width * 2) * j + i;
      output[index] = c[width * j + i];
    }
  }
  for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
      int index = (width * 2) * j + i + width;
      output[index] = d[width * j + i];
    }
  }
  for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
      int index = (height * width * 2) + (width * 2) * j + i;
      output[index] = a[width * j + i];
    }
  }
  for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
      int index = (height * width * 2) + (width * 2) * j + i + width;
      output[index] = b[width * j + i];
    }
  }
  return output;
}
```