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

```asm
<jerasure_schedule_encode>:
  endbr64
  push   %r15
  mov    %esi,%r15d
  push   %r14
  push   %r13
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %edi,%ebp
  push   %rbx
  lea    (%rdi,%rsi,1),%ebx
  lea    0x0(,%rbx,8),%edi
  sub    $0x28,%rsp
  mov    0x60(%rsp),%eax
  mov    0x68(%rsp),%r14d
  mov    %r8,0x18(%rsp)
  mov    %r9,0x10(%rsp)
  mov    %rcx,0x8(%rsp)
  mov    %eax,0x4(%rsp)
  call   <malloc@plt>
  test   %ebp,%ebp
  mov    0x10(%rsp),%r9
  mov    0x18(%rsp),%r8
  mov    %rax,%r13
  jle    L88
  lea    -0x1(%rbp),%eax
  cmp    $0x2,%eax
  jbe    L21
  lea    0x8(%r8),%rax
  cmp    %r13,%rax
  je     L21
  mov    %ebp,%edx
  mov    %r8,%rcx
  mov    %r13,%rax
  shr    %edx
  sub    %r13,%rcx
  shl    $0x4,%rdx
  add    %r13,%rdx
  nopl   0x0(%rax,%rax,1)
L2:
  movdqu (%rax,%rcx,1),%xmm2
  add    $0x10,%rax
  movups %xmm2,-0x10(%rax)
  cmp    %rdx,%rax
  jne    L2
  mov    %ebp,%eax
  and    $0xfffffffe,%eax
  test   $0x1,%bpl
  je     L88
  mov    (%r8,%rax,8),%rdx
  mov    %rdx,0x0(%r13,%rax,8)
L88:
  test   %r15d,%r15d
  jle    L84
  movslq %ebp,%r8
  lea    0x8(%r9),%r11
  lea    -0x1(%r15),%ecx
  lea    0x0(,%r8,8),%rsi
  lea    (%rsi,%r13,1),%rdx
  mov    %rdx,%rax
  cmp    %r11,%rdx
  je     L64
  cmp    $0x2,%ecx
  jbe    L64
  mov    %r15d,%edx
  mov    %r9,%rcx
  shr    %edx
  sub    %rax,%rcx
  shl    $0x4,%rdx
  add    %rax,%rdx
  nopl   0x0(%rax)
L119:
  movdqu (%rax,%rcx,1),%xmm3
  add    $0x10,%rax
  movups %xmm3,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L119
  mov    %r15d,%eax
  and    $0xfffffffe,%eax
  and    $0x1,%r15d
  je     L84
  mov    %eax,%edx
  add    %eax,%ebp
  mov    (%r9,%rdx,8),%rdx
  movslq %ebp,%rbp
  mov    %rdx,0x0(%r13,%rbp,8)
L84:
  mov    0x4(%rsp),%eax
  test   %eax,%eax
  jle    L133
  mov    %ebx,%eax
  imul   %r14d,%r12d
  xor    %ebp,%ebp
  shr    %eax
  lea    -0x1(%rax),%ecx
  mov    %ebx,%eax
  and    $0xfffffffe,%eax
  add    $0x1,%rcx
  mov    %r12d,0x10(%rsp)
  movslq %r12d,%r15
  mov    %eax,0x18(%rsp)
  shl    $0x4,%rcx
  lea    (%rcx,%r13,1),%r12
  nopl   0x0(%rax)
L153:
  mov    0x8(%rsp),%rsi
  mov    %r14d,%edx
  mov    %r13,%rdi
  call   <jerasure_do_scheduled_operations@plt>
  test   %ebx,%ebx
  jle    L134
  cmp    $0x1,%ebx
  je     L175
  movq   %r15,%xmm1
  mov    %r13,%rax
  punpcklqdq %xmm1,%xmm1
  nopl   (%rax)
L114:
  movdqu (%rax),%xmm0
  add    $0x10,%rax
  paddq  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rax,%r12
  jne    L114
  movslq 0x18(%rsp),%rax
  cmp    %eax,%ebx
  je     L134
L107:
  add    %r15,0x0(%r13,%rax,8)
L134:
  add    0x10(%rsp),%ebp
  cmp    %ebp,0x4(%rsp)
  jg     L153
L133:
  add    $0x28,%rsp
  mov    %r13,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1070 <free@plt>
L175:
  xor    %eax,%eax
  jmp    L107
L21:
  mov    %ebp,%eax
  sub    %r13,%r8
  lea    0x0(%r13,%rax,8),%rcx
  mov    %r13,%rax
  nopl   0x0(%rax)
L71:
  mov    (%r8,%rax,1),%rdx
  add    $0x8,%rax
  mov    %rdx,-0x8(%rax)
  cmp    %rcx,%rax
  jne    L71
  jmp    L88
L64:
  lea    0x1(%r8,%rcx,1),%rax
  sub    %r13,%r9
  lea    0x0(%r13,%rax,8),%rcx
  sub    %rsi,%r9
  cs nopw 0x0(%rax,%rax,1)
L193:
  mov    (%r9,%rdx,1),%rax
  add    $0x8,%rdx
  mov    %rax,-0x8(%rdx)
  cmp    %rdx,%rcx
  jne    L193
  jmp    L84
```

assistant: ```c
void jerasure_schedule_encode(int k, int m, int w, int **schedule, char **data_ptrs, char **coding_ptrs, int size, int packetsize) {
  char **ptr_copy;
  int i, tdone;
  ptr_copy = (char **)malloc(sizeof(char *) * ((k + m)));
  for (i = 0; i < k; i++)
    ptr_copy[i] = data_ptrs[i];
  for (i = 0; i < m; i++)
    ptr_copy[i + k] = coding_ptrs[i];
  for (tdone = 0; tdone < size; tdone += packetsize * w) {
    jerasure_do_scheduled_operations(ptr_copy, schedule, packetsize);
    for (i = 0; i < k + m; i++)
      ptr_copy[i] += (packetsize * w);
  }
  free(ptr_copy);
}
```