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

```asm
<SHA1_Update>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x60,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  cmpq   $0x0,-0x68(%rbp)
  jne    L67
  mov    $0x1,%eax
  jmp    L448
L67:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x68(%rbp),%rax
  shl    $0x3,%eax
  lea    (%rdx,%rax,1),%ebx
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%ebx
  jae    L74
  mov    -0x58(%rbp),%rax
  mov    0x10(%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x58(%rbp),%rax
  mov    %rdx,0x10(%rax)
L74:
  mov    -0x58(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  shr    $0x1d,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  mov    %rdx,0x10(%rax)
  mov    -0x58(%rbp),%rax
  mov    %ebx,(%rax)
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  test   %eax,%eax
  je     L334
  mov    -0x58(%rbp),%rax
  mov    0x8(%rax),%r12
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  sar    $0x2,%eax
  cltq
  mov    %rax,-0x30(%rbp)
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,-0x20(%rbp)
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  cmp    $0x3f,%rax
  jbe    L125
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    (%rax),%ebx
  cmpq   $0x3,-0x20(%rbp)
  je     L65
  cmpq   $0x3,-0x20(%rbp)
  ja     L493
  cmpq   $0x2,-0x20(%rbp)
  je     L300
  cmpq   $0x2,-0x20(%rbp)
  ja     L493
  cmpq   $0x0,-0x20(%rbp)
  je     L426
  cmpq   $0x1,-0x20(%rbp)
  je     L401
  jmp    L493
L426:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%eax
  mov    %eax,%ebx
L401:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %eax,%ebx
L300:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%rax
  or     %eax,%ebx
L65:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %eax,%ebx
L493:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  shl    $0x2,%rax
  add    %r12,%rax
  mov    %ebx,(%rax)
  jmp    L342
L415:
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x40(%rbp),%eax
  bswap  %eax
  mov    %eax,-0x40(%rbp)
  addq   $0x4,-0x38(%rbp)
  mov    -0x40(%rbp),%ebx
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    %ebx,(%rax)
  addq   $0x1,-0x30(%rbp)
L342:
  cmpq   $0xf,-0x30(%rbp)
  jbe    L415
  mov    -0x58(%rbp),%rax
  mov    $0x1,%edx
  mov    %r12,%rsi
  mov    %rax,%rdi
  call   <sha1_block_host_order@plt>
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%edx
  mov    $0x40,%eax
  sub    %edx,%eax
  cltq
  sub    %rax,-0x68(%rbp)
  mov    -0x58(%rbp),%rax
  movl   $0x0,0x4(%rax)
  jmp    L334
L125:
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,%edx
  mov    -0x68(%rbp),%rax
  add    %edx,%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,0x4(%rax)
  mov    -0x20(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  cmp    $0x3,%rax
  ja     L248
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    (%rax),%ebx
  cmpq   $0x2,-0x20(%rbp)
  je     L346
  cmpq   $0x2,-0x20(%rbp)
  ja     L350
  cmpq   $0x0,-0x20(%rbp)
  je     L450
  cmpq   $0x1,-0x20(%rbp)
  je     L284
  jmp    L350
L450:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%eax
  mov    %eax,%ebx
  subq   $0x1,-0x68(%rbp)
  cmpq   $0x0,-0x68(%rbp)
  je     L363
L284:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %eax,%ebx
  subq   $0x1,-0x68(%rbp)
  cmpq   $0x0,-0x68(%rbp)
  je     L255
L346:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%rax
  or     %eax,%ebx
  jmp    L350
L363:
  nop
  jmp    L350
L255:
  nop
L350:
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    %ebx,(%rax)
  jmp    L514
L248:
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  sar    $0x2,%eax
  cltq
  mov    %rax,-0x28(%rbp)
  mov    -0x58(%rbp),%rax
  mov    0x4(%rax),%eax
  cltq
  and    $0x3,%eax
  mov    %rax,-0x18(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  je     L227
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    (%rax),%ebx
L227:
  cmpq   $0x3,-0x20(%rbp)
  je     L59
  cmpq   $0x3,-0x20(%rbp)
  ja     L277
  cmpq   $0x2,-0x20(%rbp)
  je     L52
  cmpq   $0x2,-0x20(%rbp)
  ja     L277
  cmpq   $0x0,-0x20(%rbp)
  je     L411
  cmpq   $0x1,-0x20(%rbp)
  je     L121
  jmp    L277
L411:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%eax
  mov    %eax,%ebx
L121:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %eax,%ebx
L52:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%rax
  or     %eax,%ebx
L59:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %eax,%ebx
L277:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  shl    $0x2,%rax
  add    %r12,%rax
  mov    %ebx,(%rax)
  jmp    L288
L327:
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  bswap  %eax
  mov    %eax,-0x44(%rbp)
  addq   $0x4,-0x38(%rbp)
  mov    -0x44(%rbp),%ebx
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    %ebx,(%rax)
  addq   $0x1,-0x30(%rbp)
L288:
  mov    -0x30(%rbp),%rax
  cmp    -0x28(%rbp),%rax
  jb     L327
  cmpq   $0x0,-0x18(%rbp)
  je     L514
  mov    $0x0,%ebx
  mov    -0x18(%rbp),%rax
  add    %rax,-0x38(%rbp)
  cmpq   $0x3,-0x18(%rbp)
  je     L31
  cmpq   $0x3,-0x18(%rbp)
  ja     L156
  cmpq   $0x1,-0x18(%rbp)
  je     L381
  cmpq   $0x2,-0x18(%rbp)
  je     L230
  jmp    L156
L31:
  subq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%ebx
L230:
  subq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %eax,%ebx
L381:
  subq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%rax
  or     %eax,%ebx
L156:
  mov    -0x30(%rbp),%rax
  shl    $0x2,%rax
  add    %r12,%rax
  mov    %ebx,(%rax)
L514:
  mov    $0x1,%eax
  jmp    L448
L334:
  mov    -0x68(%rbp),%rax
  shr    $0x6,%rax
  mov    %rax,-0x30(%rbp)
  cmpq   $0x0,-0x30(%rbp)
  je     L463
  mov    -0x30(%rbp),%rdx
  mov    -0x38(%rbp),%rcx
  mov    -0x58(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sha1_block_data_order@plt>
  shlq   $0x6,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  add    %rax,-0x38(%rbp)
  mov    -0x30(%rbp),%rax
  sub    %rax,-0x68(%rbp)
L463:
  cmpq   $0x0,-0x68(%rbp)
  je     L425
  mov    -0x58(%rbp),%rax
  mov    0x8(%rax),%r12
  mov    -0x68(%rbp),%rax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,0x4(%rax)
  mov    -0x68(%rbp),%rax
  shr    $0x2,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x68(%rbp),%rax
  and    $0x3,%eax
  mov    %rax,-0x18(%rbp)
  jmp    L304
L371:
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  bswap  %eax
  mov    %eax,-0x3c(%rbp)
  addq   $0x4,-0x38(%rbp)
  mov    -0x3c(%rbp),%ebx
  mov    %ebx,(%r12)
  subq   $0x1,-0x28(%rbp)
  add    $0x4,%r12
L304:
  cmpq   $0x0,-0x28(%rbp)
  jne    L371
  mov    $0x0,%ebx
  mov    -0x18(%rbp),%rax
  add    %rax,-0x38(%rbp)
  cmpq   $0x3,-0x18(%rbp)
  je     L190
  cmpq   $0x3,-0x18(%rbp)
  ja     L518
  cmpq   $0x1,-0x18(%rbp)
  je     L343
  cmpq   $0x2,-0x18(%rbp)
  je     L144
  jmp    L518
L190:
  subq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%ebx
L144:
  subq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %eax,%ebx
L343:
  subq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%rax
  or     %eax,%ebx
L518:
  mov    %ebx,(%r12)
L425:
  mov    $0x1,%eax
L448:
  add    $0x60,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

assistant: ```c
int SHA1_Update(SHA_CTX *c, const void *data_, size_t len) {
  const unsigned char *data = (const unsigned char *)data_;
  register unsigned int *p;
  register unsigned int l;
  size_t sw, sc, ew, ec;
  if (len == 0) {
    return 1;
  }
  l = (c->Nl + (((unsigned int)len) << 3)) & 0xffffffffUL;
  if (l < c->Nl) {
    c->Nh++;
  }
  c->Nh += (len >> 29);
  c->Nl = l;
  if (c->num != 0) {
    p = c->data;
    sw = c->num >> 2;
    sc = c->num & 0x03;
    if ((c->num + len) >= (16 * 4)) {
      l = p[sw];
      {
        switch (sc) {
        case 0:
          l = ((unsigned long)(*((data)++))) << 24;
        case 1:
          l |= ((unsigned long)(*((data)++))) << 16;
        case 2:
          l |= ((unsigned long)(*((data)++))) << 8;
        case 3:
          l |= ((unsigned long)(*((data)++)));
        }
      };
      p[sw++] = l;
      for (; sw < 16; sw++) {
        ({
          unsigned int r = *((const unsigned int *)(data));
          asm("bswapl %0" : "=r"(r) : "0"(r));
          (data) += 4;
          (l) = r;
        });
        p[sw] = l;
      }
      sha1_block_host_order(c, p, 1);
      len -= ((16 * 4) - c->num);
      c->num = 0;
    } else {
      c->num += (unsigned int)len;
      if ((sc + len) < 4) {
        l = p[sw];
        {
          switch (sc) {
          case 0:
            l = ((unsigned long)(*((data)++))) << 24;
            if (--len == 0)
              break;
          case 1:
            l |= ((unsigned long)(*((data)++))) << 16;
            if (--len == 0)
              break;
          case 2:
            l |= ((unsigned long)(*((data)++))) << 8;
          }
        };
        p[sw] = l;
      } else {
        ew = (c->num >> 2);
        ec = (c->num & 0x03);
        if (sc) {
          l = p[sw];
        }
        {
          switch (sc) {
          case 0:
            l = ((unsigned long)(*((data)++))) << 24;
          case 1:
            l |= ((unsigned long)(*((data)++))) << 16;
          case 2:
            l |= ((unsigned long)(*((data)++))) << 8;
          case 3:
            l |= ((unsigned long)(*((data)++)));
          }
        };
        p[sw++] = l;
        for (; sw < ew; sw++) {
          ({
            unsigned int r = *((const unsigned int *)(data));
            asm("bswapl %0" : "=r"(r) : "0"(r));
            (data) += 4;
            (l) = r;
          });
          p[sw] = l;
        }
        if (ec) {
          {
            l = 0;
            (data) += ec;
            switch (ec) {
            case 3:
              l = ((unsigned long)(*(--(data)))) << 8;
            case 2:
              l |= ((unsigned long)(*(--(data)))) << 16;
            case 1:
              l |= ((unsigned long)(*(--(data)))) << 24;
            }
          };
          p[sw] = l;
        }
      }
      return 1;
    }
  }
  sw = len / (16 * 4);
  if (sw > 0) {
    {
      sha1_block_data_order(c, data, sw);
      sw *= (16 * 4);
      data += sw;
      len -= sw;
    }
  }
  if (len != 0) {
    p = c->data;
    c->num = len;
    ew = len >> 2;
    ec = len & 0x03;
    for (; ew; ew--, p++) {
      ({
        unsigned int r = *((const unsigned int *)(data));
        asm("bswapl %0" : "=r"(r) : "0"(r));
        (data) += 4;
        (l) = r;
      });
      *p = l;
    }
    {
      l = 0;
      (data) += ec;
      switch (ec) {
      case 3:
        l = ((unsigned long)(*(--(data)))) << 8;
      case 2:
        l |= ((unsigned long)(*(--(data)))) << 16;
      case 1:
        l |= ((unsigned long)(*(--(data)))) << 24;
      }
    };
    *p = l;
  }
  return 1;
}
```