user: 下面的汇编指令对应的C源代码是什么:

```asm
<get_downleftleft_pred>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x340,%rsp
  mov    %rdi,-0x328(%rbp)
  mov    %esi,-0x32c(%rbp)
  mov    %edx,-0x330(%rbp)
  mov    %ecx,-0x334(%rbp)
  mov    %r8d,-0x338(%rbp)
  mov    %r9,-0x340(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x0,-0x330(%rbp)
  jle    L126
  movl   $0x0,-0x31c(%rbp)
  jmp    L21
L85:
  mov    -0x32c(%rbp),%edx
  mov    -0x31c(%rbp),%eax
  add    %edx,%eax
  imul   -0x334(%rbp),%eax
  mov    %eax,%edx
  mov    -0x330(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x328(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x31c(%rbp),%eax
  cltq
  mov    %edx,-0x310(%rbp,%rax,4)
  addl   $0x1,-0x31c(%rbp)
L21:
  mov    -0x31c(%rbp),%eax
  cmp    -0x338(%rbp),%eax
  jl     L85
  jmp    L168
L126:
  movl   $0x0,-0x31c(%rbp)
  jmp    L17
L50:
  mov    -0x31c(%rbp),%eax
  cltq
  movl   $0x80,-0x310(%rbp,%rax,4)
  addl   $0x1,-0x31c(%rbp)
L17:
  mov    -0x31c(%rbp),%eax
  cmp    -0x338(%rbp),%eax
  jl     L50
L168:
  mov    -0x310(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %eax,%edx
  mov    -0x30c(%rbp),%eax
  add    %edx,%eax
  add    $0x2,%eax
  sar    $0x2,%eax
  mov    %eax,-0x210(%rbp)
  movl   $0x1,-0x318(%rbp)
  jmp    L152
L157:
  mov    -0x318(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x310(%rbp,%rax,4),%edx
  mov    -0x318(%rbp),%eax
  cltq
  mov    -0x310(%rbp,%rax,4),%eax
  add    %eax,%eax
  add    %eax,%edx
  mov    -0x318(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x310(%rbp,%rax,4),%eax
  add    %edx,%eax
  add    $0x2,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    -0x318(%rbp),%eax
  cltq
  mov    %edx,-0x210(%rbp,%rax,4)
  addl   $0x1,-0x318(%rbp)
L152:
  mov    -0x338(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x318(%rbp)
  jl     L157
  mov    -0x338(%rbp),%eax
  sub    $0x2,%eax
  cltq
  mov    -0x310(%rbp,%rax,4),%edx
  mov    -0x338(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x310(%rbp,%rax,4),%eax
  add    %eax,%eax
  add    %eax,%edx
  mov    -0x338(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x310(%rbp,%rax,4),%eax
  add    %edx,%eax
  lea    0x2(%rax),%edx
  mov    -0x338(%rbp),%eax
  sub    $0x1,%eax
  sar    $0x2,%edx
  cltq
  mov    %edx,-0x210(%rbp,%rax,4)
  mov    -0x338(%rbp),%eax
  mov    %eax,-0x318(%rbp)
  jmp    L84
L55:
  mov    -0x338(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x210(%rbp,%rax,4),%edx
  mov    -0x318(%rbp),%eax
  cltq
  mov    %edx,-0x210(%rbp,%rax,4)
  addl   $0x1,-0x318(%rbp)
L84:
  mov    -0x338(%rbp),%eax
  add    %eax,%eax
  sub    $0x1,%eax
  cmp    %eax,-0x318(%rbp)
  jl     L55
  movl   $0x0,-0x31c(%rbp)
  jmp    L134
L121:
  movl   $0x0,-0x318(%rbp)
  jmp    L115
L75:
  mov    -0x31c(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x318(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x314(%rbp)
  mov    -0x314(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L40
  mov    -0x314(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x31c(%rbp),%eax
  imul   -0x338(%rbp),%eax
  mov    %eax,%edx
  mov    -0x318(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x340(%rbp),%rax
  add    %rax,%rdx
  movslq %ecx,%rax
  mov    -0x210(%rbp,%rax,4),%eax
  mov    %eax,(%rdx)
  jmp    L132
L40:
  mov    -0x314(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cltq
  mov    -0x210(%rbp,%rax,4),%edx
  mov    -0x314(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    $0x1,%eax
  cltq
  mov    -0x210(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x31c(%rbp),%eax
  imul   -0x338(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x318(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x340(%rbp),%rax
  add    %rcx,%rax
  sar    %edx
  mov    %edx,(%rax)
L132:
  addl   $0x1,-0x318(%rbp)
L115:
  mov    -0x318(%rbp),%eax
  cmp    -0x338(%rbp),%eax
  jl     L75
  addl   $0x1,-0x31c(%rbp)
L134:
  mov    -0x31c(%rbp),%eax
  cmp    -0x338(%rbp),%eax
  jl     L121
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L11
  call   <__stack_chk_fail@plt>
L11:
  leave
  ret
```

assistant: ```c
void get_downleftleft_pred(uint8_t *rec, int ypos, int xpos, int stride, int size, uint8_t *pblock) {
  int i, j, diag;
  uint16_t hor[64];
  uint8_t horF[2 * 64];
  if (xpos > 0) {
    for (i = 0; i < size; i++) {
      hor[i] = rec[(ypos + i) * stride + xpos - 1];
    }
  } else {
    for (i = 0; i < size; i++) {
      hor[i] = 128;
    }
  }
  horF[0] = (uint8_t)((hor[0] + 2 * hor[0] + hor[1] + 2) >> 2);
  for (j = 1; j < size - 1; j++) {
    horF[j] = (uint8_t)((hor[j - 1] + 2 * hor[j] + hor[j + 1] + 2) >> 2);
  }
  horF[size - 1] = (uint8_t)((hor[size - 2] + 2 * hor[size - 1] + hor[size - 1] + 2) >> 2);
  for (j = size; j < 2 * size - 1; j++) {
    horF[j] = horF[size - 1];
  }
  for (i = 0; i < size; i++) {
    for (j = 0; j < size; j++) {
      diag = 2 * i + j;
      if (diag & 1)
        pblock[i * size + j] = horF[(diag + 1) / 2];
      else
        pblock[i * size + j] = (horF[diag / 2] + horF[diag / 2 + 1]) >> 1;
    }
  }
}
```