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

```asm
<poll>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    %edx,-0x94(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x78(%rbp)
  mov    D166(%rip),%eax
  test   %eax,%eax
  jne    L327
  mov    $0x0,%eax
  call   <getdtablesize@plt>
  mov    %eax,D312(%rip)
L327:
  mov    D312(%rip),%rax
  mov    (%rax),%edx
  mov    D312(%rip),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <howmany@plt>
  mov    %eax,-0x74(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x68(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x60(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x74(%rbp),%edx
  mov    -0x68(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x60(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x88(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  jmp    L210
L237:
  mov    -0x50(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  test   %eax,%eax
  js     L225
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%edx
  mov    D312(%rip),%eax
  cmp    %eax,%edx
  jl     L62
  mov    D312(%rip),%rax
  mov    (%rax),%edx
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <roundup@plt>
  mov    %eax,D2(%rip)
  mov    D312(%rip),%rax
  mov    (%rax),%edx
  mov    D2(%rip),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <howmany@plt>
  mov    %eax,-0x6c(%rbp)
  mov    -0x6c(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x6c(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x6c(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x6c(%rbp),%eax
  sub    -0x74(%rbp),%eax
  mov    -0x74(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x30(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <bzero@plt>
  mov    -0x6c(%rbp),%eax
  sub    -0x74(%rbp),%eax
  mov    -0x74(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x28(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <bzero@plt>
  mov    -0x6c(%rbp),%eax
  sub    -0x74(%rbp),%eax
  mov    -0x74(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x20(%rbp),%rdx
  add    %rcx,%rdx
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x68(%rbp),%rcx
  mov    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    %rax,-0x68(%rbp)
  mov    -0x74(%rbp),%edx
  mov    -0x60(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    %rax,-0x60(%rbp)
  mov    -0x74(%rbp),%edx
  mov    -0x58(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x6c(%rbp),%eax
  mov    %eax,-0x74(%rbp)
L62:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D2(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L28
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x68(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L28:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D318(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L363
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x60(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L363:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D221(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L97
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x58(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L97:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  cmp    %eax,-0x78(%rbp)
  jge    L225
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D2(%rip),%rax
  mov    (%rax),%ecx
  mov    D318(%rip),%rax
  mov    (%rax),%eax
  or     %eax,%ecx
  mov    D221(%rip),%rax
  mov    (%rax),%eax
  or     %ecx,%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L225
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x78(%rbp)
L225:
  addq   $0xc,-0x50(%rbp)
L210:
  mov    -0x90(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  cmp    %rax,-0x50(%rbp)
  jb     L237
  mov    -0x94(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x6,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x94(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x6,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x3e8,%edx,%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  imul   $0x3e8,%edx,%eax
  mov    %eax,-0x14(%rbp)
L185:
  cmpl   $0xffffffff,-0x94(%rbp)
  je     L84
  lea    -0x18(%rbp),%rsi
  jmp    L335
L84:
  mov    $0x0,%esi
L335:
  mov    -0x78(%rbp),%eax
  lea    0x1(%rax),%edi
  mov    -0x58(%rbp),%rcx
  mov    -0x60(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  mov    %rsi,%r8
  mov    %rax,%rsi
  call   <select@plt>
  mov    %eax,-0x7c(%rbp)
  cmpl   $0xffffffff,-0x7c(%rbp)
  jne    L271
  mov    D49(%rip),%rax
  mov    (%rax),%rdx
  mov    D70(%rip),%rax
  mov    (%rax),%rax
  cmp    %rax,%rdx
  jne    L271
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x48(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x40(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <alloca@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x74(%rbp),%edx
  mov    -0x68(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x60(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0xffffffff,-0x78(%rbp)
  movl   $0x0,-0x7c(%rbp)
  mov    -0x88(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  jmp    L320
L78:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  cmp    $0xffffffff,%eax
  je     L102
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D2(%rip),%rax
  mov    (%rax),%ecx
  mov    D318(%rip),%rax
  mov    (%rax),%eax
  or     %eax,%ecx
  mov    D221(%rip),%rax
  mov    (%rax),%eax
  or     %ecx,%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L102
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    D157(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  jne    L102
  mov    -0x74(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D2(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L156
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x48(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L156:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D318(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L333
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x40(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L333:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D221(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L244
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x38(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L244:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  lea    0x1(%rax),%edi
  lea    -0x10(%rbp),%rsi
  mov    -0x38(%rbp),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rsi,%r8
  mov    %rax,%rsi
  call   <select@plt>
  mov    %eax,-0x70(%rbp)
  cmpl   $0xffffffff,-0x70(%rbp)
  je     L130
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D2(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L196
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x68(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L196:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D318(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L26
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x60(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L26:
  mov    -0x50(%rbp),%rax
  mov    0x8(%rax),%edx
  mov    D221(%rip),%rax
  mov    (%rax),%eax
  and    %edx,%eax
  test   %eax,%eax
  je     L188
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x58(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_SET@plt>
L188:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  cmp    %eax,-0x78(%rbp)
  jge    L349
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x78(%rbp)
L349:
  cmpl   $0x0,-0x70(%rbp)
  jle    L102
  addl   $0x1,-0x7c(%rbp)
  jmp    L102
L130:
  mov    D49(%rip),%rax
  mov    (%rax),%rdx
  mov    D70(%rip),%rax
  mov    (%rax),%rax
  cmp    %rax,%rdx
  jne    L102
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    D157(%rip),%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
L102:
  addq   $0xc,-0x50(%rbp)
L320:
  mov    -0x90(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  cmp    %rax,-0x50(%rbp)
  jb     L78
  nop
  jmp    L185
L271:
  nop
  cmpl   $0x0,-0x7c(%rbp)
  jle    L334
  mov    -0x88(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  jmp    L131
L128:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  test   %eax,%eax
  js     L262
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x68(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_ISSET@plt>
  test   %rax,%rax
  je     L269
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    D2(%rip),%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
L269:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x60(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_ISSET@plt>
  test   %rax,%rax
  je     L9
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    D318(%rip),%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
L9:
  mov    -0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    -0x58(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <FD_ISSET@plt>
  test   %rax,%rax
  je     L262
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    D221(%rip),%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
L262:
  addq   $0xc,-0x50(%rbp)
L131:
  mov    -0x90(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  cmp    %rax,-0x50(%rbp)
  jb     L128
L334:
  mov    -0x7c(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  leave
  ret
```

assistant: ```c
int poll(struct pollfd *fds, nfds_t nfds, int timeout) {
  static int max_fd_size;
  struct timeval tv;
  fd_set *rset, *wset, *xset;
  struct pollfd *f;
  int ready;
  int maxfd = 0;
  int bytes;
  if (!max_fd_size)
    max_fd_size = getdtablesize();
  bytes = howmany(max_fd_size, __NFDBITS);
  rset = alloca(bytes);
  wset = alloca(bytes);
  xset = alloca(bytes);
  bzero(rset, bytes);
  bzero(wset, bytes);
  bzero(xset, bytes);
  for (f = fds; f < &fds[nfds]; ++f) {
    f->revents = 0;
    if (f->fd >= 0) {
      if (f->fd >= max_fd_size) {
        fd_set *nrset, *nwset, *nxset;
        int nbytes;
        max_fd_size = roundup(f->fd, __NFDBITS);
        nbytes = howmany(max_fd_size, __NFDBITS);
        nrset = alloca(nbytes);
        nwset = alloca(nbytes);
        nxset = alloca(nbytes);
        bzero((char *)nrset + bytes, nbytes - bytes);
        bzero((char *)nwset + bytes, nbytes - bytes);
        bzero((char *)nxset + bytes, nbytes - bytes);
        rset = memcpy(nrset, rset, bytes);
        wset = memcpy(nwset, wset, bytes);
        xset = memcpy(nxset, xset, bytes);
        bytes = nbytes;
      }
      if (f->events & POLLIN)
        FD_SET(f->fd, rset);
      if (f->events & POLLOUT)
        FD_SET(f->fd, wset);
      if (f->events & POLLPRI)
        FD_SET(f->fd, xset);
      if (f->fd > maxfd && (f->events & (POLLIN | POLLOUT | POLLPRI)))
        maxfd = f->fd;
    }
  }
  tv.tv_sec = timeout / 1000;
  tv.tv_usec = (timeout % 1000) * 1000;
  while (1) {
    ready = select(maxfd + 1, rset, wset, xset, timeout == -1 ? NULL : &tv);
    if (ready == -1 && errno == EBADF) {
      fd_set *sngl_rset = alloca(bytes);
      fd_set *sngl_wset = alloca(bytes);
      fd_set *sngl_xset = alloca(bytes);
      struct timeval sngl_tv;
      bzero(rset, bytes);
      bzero(wset, bytes);
      bzero(xset, bytes);
      sngl_tv.tv_sec = 0;
      sngl_tv.tv_usec = 0;
      maxfd = -1;
      ready = 0;
      for (f = fds; f < &fds[nfds]; ++f)
        if (f->fd != -1 && (f->events & (POLLIN | POLLOUT | POLLPRI)) && (f->revents & POLLNVAL) == 0) {
          int n;
          bzero(sngl_rset, bytes);
          bzero(sngl_wset, bytes);
          bzero(sngl_xset, bytes);
          if (f->events & POLLIN)
            FD_SET(f->fd, sngl_rset);
          if (f->events & POLLOUT)
            FD_SET(f->fd, sngl_wset);
          if (f->events & POLLPRI)
            FD_SET(f->fd, sngl_xset);
          n = select(f->fd + 1, sngl_rset, sngl_wset, sngl_xset, &sngl_tv);
          if (n != -1) {
            if (f->events & POLLIN)
              FD_SET(f->fd, rset);
            if (f->events & POLLOUT)
              FD_SET(f->fd, wset);
            if (f->events & POLLPRI)
              FD_SET(f->fd, xset);
            if (f->fd > maxfd)
              maxfd = f->fd;
            if (n > 0)
              ++ready;
          } else if (errno == EBADF)
            f->revents |= POLLNVAL;
        }
      continue;
    }
    break;
  }
  if (ready > 0)
    for (f = fds; f < &fds[nfds]; ++f) {
      if (f->fd >= 0) {
        if (FD_ISSET(f->fd, rset))
          f->revents |= POLLIN;
        if (FD_ISSET(f->fd, wset))
          f->revents |= POLLOUT;
        if (FD_ISSET(f->fd, xset))
          f->revents |= POLLPRI;
      }
    }
  return ready;
}
```