user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<check_intof>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x1,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L350
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x2(%rax),%edx
  mov    -0x10(%rbp),%eax
  cmp    %eax,%edx
  jne    L350
  mov    $0x1,%eax
  jmp    L200
L350:
  mov    $0x0,%eax
L200:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x3,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L330
  mov    -0x10(%rbp),%edx
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jne    L330
  mov    $0x1,%eax
  jmp    L358
L330:
  mov    $0x0,%eax
L358:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D147(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    %eax,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L218
  mov    -0x10(%rbp),%edx
  mov    D147(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jne    L218
  mov    $0x1,%eax
  jmp    L409
L218:
  mov    $0x0,%eax
L409:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D147(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    %eax,%esi
  mov    $0xffffffff,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    %eax,%esi
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x80000000,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x7fffffff,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L384
  mov    -0x10(%rbp),%eax
  cmp    $0x7fffffff,%eax
  jne    L384
  mov    $0x1,%eax
  jmp    L349
L384:
  mov    $0x0,%eax
L349:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xfffffff6,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x10000000,%esi
  mov    $0x70000000,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L147
  mov    -0x10(%rbp),%eax
  cmp    $0x80000000,%eax
  jne    L147
  mov    $0x1,%eax
  jmp    L176
L147:
  mov    $0x0,%eax
L176:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x10,%esi
  mov    $0x7ffffff0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D50(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x1,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L282
  mov    D50(%rip),%rax
  mov    (%rax),%eax
  sub    $0x2,%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%eax
  cmp    %eax,%edx
  jne    L282
  mov    $0x1,%eax
  jmp    L26
L282:
  mov    $0x0,%eax
L26:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D50(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D50(%rip),%rax
  mov    (%rax),%eax
  lea    -0x3(%rax),%ecx
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x4,%esi
  mov    %ecx,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xfffffffd,%esi
  mov    $0x2,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x17,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xfffffffe,%esi
  mov    $0x2,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L351
  mov    -0x10(%rbp),%eax
  test   %eax,%eax
  jne    L351
  mov    $0x1,%eax
  jmp    L28
L351:
  mov    $0x0,%eax
L28:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x17,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x80000000,%esi
  mov    $0x80000000,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  test   %eax,%eax
  jne    L3
  mov    -0x10(%rbp),%eax
  test   %eax,%eax
  jne    L3
  mov    $0x1,%eax
  jmp    L126
L3:
  mov    $0x0,%eax
L126:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x80000000,%esi
  mov    $0x7fffffff,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D50(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    %eax,%esi
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xfffffffb,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L135
  mov    -0x10(%rbp),%eax
  cmp    $0xfffffffb,%eax
  jne    L135
  mov    $0x1,%eax
  jmp    L141
L135:
  mov    $0x0,%eax
L141:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0xfffffff0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xfffffffb,%esi
  mov    $0x10,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xfffffffb,%esi
  mov    $0xfffffff6,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x5,%esi
  mov    $0xa,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  test   %eax,%eax
  jne    L202
  mov    -0x10(%rbp),%eax
  cmp    $0x5,%eax
  jne    L202
  mov    $0x1,%eax
  jmp    L152
L202:
  mov    $0x0,%eax
L152:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0xa,%esi
  mov    $0x5,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  test   %eax,%eax
  jne    L236
  mov    -0x10(%rbp),%eax
  cmp    $0xfffffffb,%eax
  jne    L236
  mov    $0x1,%eax
  jmp    L165
L236:
  mov    $0x0,%eax
L165:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D147(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    $0xa,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D147(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    $0xfffffff6,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  test   %eax,%eax
  jne    L339
  mov    D147(%rip),%rax
  mov    (%rax),%eax
  lea    0xa(%rax),%edx
  mov    -0x10(%rbp),%eax
  cmp    %eax,%edx
  jne    L339
  mov    $0x1,%eax
  jmp    L306
L339:
  mov    $0x0,%eax
L306:
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    $0xfffffff6,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  cmp    $0x1,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x10(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0x10(%rbp),%rdx
  mov    $0xa,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <__builtin_sub_overflow@plt>
  test   %eax,%eax
  jne    L214
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  lea    -0xa(%rax),%edx
  mov    -0x10(%rbp),%eax
  cmp    %eax,%edx
  jne    L214
  mov    $0x1,%eax
  jmp    L346
L214:
  mov    $0x0,%eax
L346:
  mov    %eax,%edi
  call   <assert@plt>
  movq   $0x0,-0x10(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x10,%esi
  mov    $0xfffffff0,%edi
  mov    $0x0,%eax
  call   <__builtin_add_overflow@plt>
  test   %rax,%rax
  jne    L67
  mov    -0x10(%rbp),%rax
  movabs $0x100000000,%rdx
  cmp    %rdx,%rax
  jne    L67
  mov    $0x1,%eax
  jmp    L2
L67:
  mov    $0x0,%eax
L2:
  mov    %eax,%edi
  call   <assert@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L7
  call   <__stack_chk_fail@plt>
L7:
  leave
  ret
```

assistant: ```c
void check_intof() {
  {
    int a;
    a = 0;
    assert(__builtin_add_overflow(INT_MAX - 3, 1, &a) == 0 && a == INT_MAX - 2);
    a = 0;
    assert(__builtin_add_overflow(INT_MAX - 3, 5, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(INT_MAX - 3, 3, &a) == 0 && a == INT_MAX);
    a = 0;
    assert(__builtin_add_overflow(INT_MAX - 3, 4, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(0, INT_MIN, &a) == 0 && a == INT_MIN);
    a = 0;
    assert(__builtin_add_overflow(-1, INT_MIN, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(1, INT_MAX, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(0x100000000ll, -0x80000000ll, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(0x100000000ll, -0x80000001ll, &a) == 0 && a == 0x7fffffff);
    a = 0;
    assert(__builtin_add_overflow(0x100000000ll, -10, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(-0x90000000ll, 0x10000000, &a) == 0 && a == 0x80000000);
    a = 0;
    assert(__builtin_add_overflow(0x7ffffff0, 0x10, &a) == 1);
  }
  {
    unsigned int a;
    a = 0;
    assert(__builtin_add_overflow(UINT_MAX - 3, 1, &a) == 0 && a == UINT_MAX - 2);
    a = 0;
    assert(__builtin_add_overflow(UINT_MAX - 3, 5, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(UINT_MAX - 3, 4, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(2, -3, &a) == 1);
    a = 23;
    assert(__builtin_add_overflow(2, -2, &a) == 0 && a == 0);
    a = 23;
    assert(__builtin_sub_overflow((int)0x80000000, (int)-2147483648, &a) == 0 && a == 0);
    a = 0;
    assert(__builtin_add_overflow((int)0x7fffffff, (int)-2147483648, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(1, UINT_MAX, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(0x100000000ll, -5, &a) == 0 && a == 4294967291);
    a = 0;
    assert(__builtin_add_overflow(-0x100000010ll, 5, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(0x100000010ll, -5, &a) == 1);
    a = 0;
    assert(__builtin_add_overflow(-10, -5, &a) == 1);
  }
  {
    int a;
    a = 0;
    assert(__builtin_sub_overflow(10, 5, &a) == 0 && a == 5);
    a = 0;
    assert(__builtin_sub_overflow(5, 10, &a) == 0 && a == -5);
    a = 0;
    assert(__builtin_sub_overflow(INT_MIN, 10, &a) == 1);
    a = 0;
    assert(__builtin_sub_overflow(INT_MIN, -10, &a) == 0 && a == INT_MIN + 10);
    a = 0;
    assert(__builtin_sub_overflow(INT_MAX, -10, &a) == 1);
    a = 0;
    assert(__builtin_sub_overflow(INT_MAX, 10, &a) == 0 && a == INT_MAX - 10);
  }
  {
    unsigned long long a;
    a = 0;
    assert(__builtin_add_overflow(0xfffffff0ul, 0x10, &a) == 0 && a == 0x100000000);
  }
}
```