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

```asm
<ibitmap_clip>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x8,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  mov    %r8,-0x78(%rbp)
  mov    %r9d,-0x7c(%rbp)
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x70(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x78(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x78(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x78(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x78(%rbp),%rax
  mov    0xc(%rax),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x7c(%rbp),%eax
  sar    %eax
  and    $0x1,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x7c(%rbp),%eax
  sar    $0x2,%eax
  and    $0x1,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x2c(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L84
  mov    -0x28(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jle    L84
  mov    -0x1c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jle    L84
  mov    -0x18(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jg     L170
L84:
  mov    $0xffffffff,%eax
  jmp    L213
L170:
  mov    -0x3c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jle    L313
  mov    -0x38(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jle    L313
  mov    -0x44(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jge    L313
  mov    -0x40(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jl     L195
L313:
  mov    $0xfffffffe,%eax
  jmp    L213
L195:
  mov    -0x4c(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jge    L355
  mov    -0x34(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jne    L69
  mov    -0xc(%rbp),%eax
  add    %eax,-0x44(%rbp)
  jmp    L355
L69:
  mov    -0xc(%rbp),%eax
  sub    %eax,-0x3c(%rbp)
L355:
  mov    -0x48(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jge    L81
  mov    -0x30(%rbp),%eax
  sub    -0x48(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  jne    L83
  mov    -0xc(%rbp),%eax
  add    %eax,-0x40(%rbp)
  jmp    L81
L83:
  mov    -0xc(%rbp),%eax
  sub    %eax,-0x38(%rbp)
L81:
  mov    -0x3c(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x40(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  js     L99
  cmpl   $0x0,-0x4(%rbp)
  jns    L22
L99:
  mov    $0xfffffffd,%eax
  jmp    L213
L22:
  mov    -0x4c(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x2c(%rbp)
  jge    L234
  mov    -0x4c(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  sub    -0x2c(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jne    L112
  mov    -0xc(%rbp),%eax
  sub    %eax,-0x3c(%rbp)
  jmp    L234
L112:
  mov    -0xc(%rbp),%eax
  add    %eax,-0x44(%rbp)
L234:
  mov    -0x48(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x28(%rbp)
  jge    L26
  mov    -0x48(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  jne    L191
  mov    -0xc(%rbp),%eax
  sub    %eax,-0x38(%rbp)
  jmp    L26
L191:
  mov    -0xc(%rbp),%eax
  add    %eax,-0x40(%rbp)
L26:
  mov    -0x44(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jge    L329
  mov    -0x40(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jl     L385
L329:
  mov    $0xfffffffc,%eax
  jmp    L213
L385:
  mov    -0x44(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jge    L316
  mov    -0x24(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jne    L316
  mov    -0xc(%rbp),%eax
  add    %eax,-0x4c(%rbp)
L316:
  mov    -0x40(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jge    L15
  mov    -0x20(%rbp),%eax
  sub    -0x40(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x20(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  jne    L15
  mov    -0xc(%rbp),%eax
  add    %eax,-0x48(%rbp)
L15:
  mov    -0x44(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jge    L119
  mov    -0x40(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jl     L4
L119:
  mov    $0xfffffffb,%eax
  jmp    L213
L4:
  mov    -0x3c(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jle    L227
  mov    -0x3c(%rbp),%eax
  sub    -0x1c(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  je     L227
  mov    -0xc(%rbp),%eax
  add    %eax,-0x4c(%rbp)
L227:
  mov    -0x38(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jle    L262
  mov    -0x38(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x18(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L262
  mov    -0xc(%rbp),%eax
  add    %eax,-0x48(%rbp)
L262:
  mov    -0x44(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jge    L247
  mov    -0x40(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jl     L109
L247:
  mov    $0xfffffffa,%eax
  jmp    L213
L109:
  mov    -0x68(%rbp),%rax
  mov    -0x4c(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x70(%rbp),%rax
  mov    -0x48(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x78(%rbp),%rax
  mov    -0x44(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x78(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    -0x40(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x78(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x3c(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x78(%rbp),%rax
  lea    0xc(%rax),%rdx
  mov    -0x38(%rbp),%eax
  mov    %eax,(%rdx)
  mov    $0x0,%eax
L213:
  leave
  ret
```

assistant: ```c
int ibitmap_clip(const int *clipdst, const int *clipsrc, int *x, int *y, int *rectsrc, int clip) {
  int dcl = clipdst[0];
  int dct = clipdst[1];
  int dcr = clipdst[2];
  int dcb = clipdst[3];
  int scl = clipsrc[0];
  int sct = clipsrc[1];
  int scr = clipsrc[2];
  int scb = clipsrc[3];
  int dx = *x;
  int dy = *y;
  int sl = rectsrc[0];
  int st = rectsrc[1];
  int sr = rectsrc[2];
  int sb = rectsrc[3];
  int hflip, vflip;
  int w, h, d;
  hflip = (clip & 2) ? 1 : 0;
  vflip = (clip & 4) ? 1 : 0;
  if (dcr <= dcl || dcb <= dct || scr <= scl || scb <= sct)
    return -1;
  if (sr <= scl || sb <= sct || sl >= scr || st >= scb)
    return -2;
  if (dx < dcl) {
    d = dcl - dx;
    dx = dcl;
    if (!hflip)
      sl += d;
    else
      sr -= d;
  }
  if (dy < dct) {
    d = dct - dy;
    dy = dct;
    if (!vflip)
      st += d;
    else
      sb -= d;
  }
  w = sr - sl;
  h = sb - st;
  if (w < 0 || h < 0)
    return -3;
  if (dx + w > dcr) {
    d = dx + w - dcr;
    if (!hflip)
      sr -= d;
    else
      sl += d;
  }
  if (dy + h > dcb) {
    d = dy + h - dcb;
    if (!vflip)
      sb -= d;
    else
      st += d;
  }
  if (sl >= sr || st >= sb)
    return -4;
  if (sl < scl) {
    d = scl - sl;
    sl = scl;
    if (!hflip)
      dx += d;
  }
  if (st < sct) {
    d = sct - st;
    st = sct;
    if (!vflip)
      dy += d;
  }
  if (sl >= sr || st >= sb)
    return -5;
  if (sr > scr) {
    d = sr - scr;
    sr = scr;
    if (hflip)
      dx += d;
  }
  if (sb > scb) {
    d = sb - scb;
    sb = scb;
    if (vflip)
      dy += d;
  }
  if (sl >= sr || st >= sb)
    return -6;
  *x = dx;
  *y = dy;
  rectsrc[0] = sl;
  rectsrc[1] = st;
  rectsrc[2] = sr;
  rectsrc[3] = sb;
  return 0;
}
```