user: 请从给定的汇编指令推导出C源代码:

```asm
<sklansky>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    $0x100,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x20(%rbp)
  jmp    L148
L26:
  mov    -0x20(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jg     L188
  mov    -0x24(%rbp),%eax
  shl    $0x5,%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%eax
  cltq
  mov    %eax,%eax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L62
L188:
  mov    -0x24(%rbp),%eax
  shl    $0x5,%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%eax
  cltq
  mov    %eax,%eax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x24(%rbp),%eax
  shl    $0x5,%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%eax
  cltq
  and    $0xfffffffe,%eax
  add    %rcx,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
L62:
  mov    -0x20(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,(%rdx)
  addl   $0x1,-0x20(%rbp)
L148:
  cmpl   $0x1f,-0x20(%rbp)
  jle    L26
  movl   $0x0,-0x1c(%rbp)
  jmp    L85
L67:
  mov    -0x1c(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  jne    L48
  mov    -0x1c(%rbp),%eax
  cltq
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L76
L48:
  mov    -0x1c(%rbp),%eax
  cltq
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x1c(%rbp),%eax
  cltq
  and    $0xfffffffc,%eax
  or     $0x1,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
L76:
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  add    $0x20,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,(%rdx)
  addl   $0x1,-0x1c(%rbp)
L85:
  cmpl   $0x1f,-0x1c(%rbp)
  jle    L67
  movl   $0x0,-0x18(%rbp)
  jmp    L212
L193:
  mov    -0x18(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  jne    L95
  mov    -0x18(%rbp),%eax
  cltq
  mov    %eax,%eax
  add    $0x20,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L65
L95:
  mov    -0x18(%rbp),%eax
  cltq
  mov    %eax,%eax
  add    $0x20,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%eax
  cltq
  and    $0xfffffff8,%eax
  or     $0x3,%rax
  add    $0x20,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
L65:
  mov    -0x18(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,(%rdx)
  addl   $0x1,-0x18(%rbp)
L212:
  cmpl   $0x1f,-0x18(%rbp)
  jle    L193
  movl   $0x0,-0x14(%rbp)
  jmp    L112
L7:
  mov    -0x14(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  jne    L119
  mov    -0x14(%rbp),%eax
  cltq
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L205
L119:
  mov    -0x14(%rbp),%eax
  cltq
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x14(%rbp),%eax
  cltq
  and    $0xfffffff0,%eax
  or     $0x7,%rax
  lea    0x0(,%rax,4),%rcx
  mov    -0x8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
L205:
  mov    -0x14(%rbp),%edx
  movslq %edx,%rdx
  add    $0x20,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,(%rdx)
  addl   $0x1,-0x14(%rbp)
L112:
  cmpl   $0x1f,-0x14(%rbp)
  jle    L7
  movl   $0x0,-0x10(%rbp)
  jmp    L131
L92:
  cmpl   $0xf,-0x10(%rbp)
  jg     L206
  mov    -0x10(%rbp),%eax
  cltq
  add    $0x20,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L24
L206:
  mov    -0x10(%rbp),%eax
  sub    $0x10,%eax
  cltq
  add    $0x30,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xbc,%rax
  mov    (%rax),%eax
  add    %edx,%eax
L24:
  mov    -0x10(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,(%rdx)
  addl   $0x1,-0x10(%rbp)
L131:
  cmpl   $0x1f,-0x10(%rbp)
  jle    L92
  movl   $0x0,-0xc(%rbp)
  jmp    L90
L196:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    -0x24(%rbp),%edx
  mov    %edx,%ecx
  shl    $0x5,%ecx
  mov    -0xc(%rbp),%edx
  add    %ecx,%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x38(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0xc(%rbp)
L90:
  cmpl   $0x1f,-0xc(%rbp)
  jle    L196
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  nop
  leave
  ret
```

assistant: ```c
void sklansky(uint32_t bid, uint32_t *input0, uint32_t *result0) {
  unsigned char *sbase;
  sbase = (unsigned char *)malloc(256);
  for (uint32_t tid = 0; tid < 32; ++tid) {
    ((uint32_t *)sbase)[tid] = ((tid & 1) < 1) ? input0[((bid * 32) + ((tid & 4294967294) | (tid & 1)))] : (input0[((bid * 32) + ((tid & 4294967294) | (((tid & 1) - 1) + 1)))] + input0[((bid * 32) + ((tid & 4294967294) | 0))]);
  }
  for (uint32_t tid = 0; tid < 32; ++tid) {
    ((uint32_t *)(sbase + 128))[tid] = ((tid & 3) < 2) ? ((uint32_t *)sbase)[((tid & 4294967292) | (tid & 3))] : (((uint32_t *)sbase)[((tid & 4294967292) | (((tid & 3) - 2) + 2))] + ((uint32_t *)sbase)[((tid & 4294967292) | 1)]);
  }
  for (uint32_t tid = 0; tid < 32; ++tid) {
    ((uint32_t *)sbase)[tid] = ((tid & 7) < 4) ? ((uint32_t *)(sbase + 128))[((tid & 4294967288) | (tid & 7))] : (((uint32_t *)(sbase + 128))[((tid & 4294967288) | (((tid & 7) - 4) + 4))] + ((uint32_t *)(sbase + 128))[((tid & 4294967288) | 3)]);
  }
  for (uint32_t tid = 0; tid < 32; ++tid) {
    ((uint32_t *)(sbase + 128))[tid] = ((tid & 15) < 8) ? ((uint32_t *)sbase)[((tid & 4294967280) | (tid & 15))] : (((uint32_t *)sbase)[((tid & 4294967280) | (((tid & 15) - 8) + 8))] + ((uint32_t *)sbase)[((tid & 4294967280) | 7)]);
  }
  for (uint32_t tid = 0; tid < 32; ++tid) {
    ((uint32_t *)sbase)[tid] = (tid < 16) ? ((uint32_t *)(sbase + 128))[tid] : (((uint32_t *)(sbase + 128))[((tid - 16) + 16)] + ((uint32_t *)(sbase + 128))[15]);
  }
  for (uint32_t tid = 0; tid < 32; ++tid) {
    result0[((bid * 32) + tid)] = ((uint32_t *)sbase)[tid];
  }
  free(sbase);
}
```