user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<check_intof>:
  endbr64
  push   %r13
  mov    $0x1,%esi
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    D14(%rip),%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r12
  movl   $0x0,(%rsp)
  mov    (%rbx),%eax
  mov    %r12,%rdx
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L129
  mov    (%rbx),%eax
  xor    %edi,%edi
  sub    $0x2,%eax
  cmp    (%rsp),%eax
  sete   %dil
L129:
  call   <assert@plt>
  mov    (%rbx),%eax
  mov    %r12,%rdx
  mov    $0x5,%esi
  movl   $0x0,(%rsp)
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    (%rbx),%eax
  mov    %r12,%rdx
  mov    $0x3,%esi
  movl   $0x0,(%rsp)
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L2
  xor    %edi,%edi
  mov    (%rbx),%eax
  cmp    %eax,(%rsp)
  sete   %dil
L2:
  call   <assert@plt>
  mov    (%rbx),%eax
  mov    %r12,%rdx
  mov    $0x4,%esi
  movl   $0x0,(%rsp)
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    D18(%rip),%rbp
  xor    %edi,%edi
  xor    %eax,%eax
  mov    %r12,%rdx
  movl   $0x0,(%rsp)
  mov    0x0(%rbp),%esi
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L40
  xor    %edi,%edi
  mov    0x0(%rbp),%eax
  cmp    %eax,(%rsp)
  sete   %dil
L40:
  call   <assert@plt>
  mov    0x0(%rbp),%esi
  mov    %r12,%rdx
  mov    $0xffffffff,%edi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    (%rbx),%esi
  mov    %r12,%rdx
  mov    $0x1,%edi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0x80000000,%esi
  xor    %edi,%edi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  xor    %edi,%edi
  mov    %r12,%rdx
  mov    $0x7fffffff,%esi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L77
  xor    %edi,%edi
  cmpl   $0x7fffffff,(%rsp)
  sete   %dil
L77:
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0xfffffff6,%esi
  xor    %edi,%edi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    $0x70000000,%edi
  mov    %r12,%rdx
  xor    %eax,%eax
  mov    $0x10000000,%esi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L59
  xor    %edi,%edi
  cmpl   $0x80000000,(%rsp)
  sete   %dil
L59:
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0x10,%esi
  xor    %eax,%eax
  mov    $0x7ffffff0,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    D7(%rip),%r13
  mov    %r12,%rdx
  mov    $0x1,%esi
  movl   $0x0,(%rsp)
  mov    0x0(%r13),%eax
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L5
  mov    0x0(%r13),%eax
  xor    %edi,%edi
  sub    $0x2,%eax
  cmp    (%rsp),%eax
  sete   %dil
L5:
  call   <assert@plt>
  mov    0x0(%r13),%eax
  mov    %r12,%rdx
  mov    $0x5,%esi
  movl   $0x0,(%rsp)
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    0x0(%r13),%eax
  mov    %r12,%rdx
  mov    $0x4,%esi
  movl   $0x0,(%rsp)
  lea    -0x3(%rax),%edi
  xor    %eax,%eax
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0xfffffffd,%esi
  xor    %eax,%eax
  mov    $0x2,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    $0x2,%edi
  mov    %r12,%rdx
  xor    %eax,%eax
  mov    $0xfffffffe,%esi
  movl   $0x17,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L136
  mov    (%rsp),%eax
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
L136:
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0x80000000,%esi
  xor    %eax,%eax
  mov    $0x80000000,%edi
  movl   $0x17,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  or     (%rsp),%eax
  sete   %dil
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0x80000000,%esi
  xor    %eax,%eax
  mov    $0x7fffffff,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    0x0(%r13),%esi
  mov    %r12,%rdx
  xor    %eax,%eax
  mov    $0x1,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  xor    %edi,%edi
  mov    %r12,%rdx
  mov    $0xfffffffb,%esi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L57
  xor    %edi,%edi
  cmpl   $0xfffffffb,(%rsp)
  sete   %dil
L57:
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0x5,%esi
  xor    %eax,%eax
  mov    $0xfffffff0,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0xfffffffb,%esi
  xor    %eax,%eax
  mov    $0x10,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    %r12,%rdx
  mov    $0xfffffffb,%esi
  xor    %eax,%eax
  mov    $0xfffffff6,%edi
  movl   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%rax
  sete   %dil
  call   <assert@plt>
  mov    $0xa,%edi
  mov    %r12,%rdx
  xor    %eax,%eax
  mov    $0x5,%esi
  movl   $0x0,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  test   %eax,%eax
  jne    L60
  xor    %edi,%edi
  cmpl   $0x5,(%rsp)
  sete   %dil
L60:
  call   <assert@plt>
  mov    $0x5,%edi
  mov    %r12,%rdx
  xor    %eax,%eax
  mov    $0xa,%esi
  movl   $0x0,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  test   %eax,%eax
  jne    L55
  xor    %edi,%edi
  cmpl   $0xfffffffb,(%rsp)
  sete   %dil
L55:
  call   <assert@plt>
  mov    0x0(%rbp),%edi
  mov    %r12,%rdx
  mov    $0xa,%esi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    0x0(%rbp),%edi
  mov    %r12,%rdx
  mov    $0xfffffff6,%esi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  test   %eax,%eax
  jne    L138
  mov    0x0(%rbp),%eax
  xor    %edi,%edi
  add    $0xa,%eax
  cmp    (%rsp),%eax
  sete   %dil
L138:
  call   <assert@plt>
  mov    (%rbx),%edi
  mov    %r12,%rdx
  mov    $0xfffffff6,%esi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  cmp    $0x1,%eax
  sete   %dil
  call   <assert@plt>
  mov    (%rbx),%edi
  mov    %r12,%rdx
  mov    $0xa,%esi
  xor    %eax,%eax
  movl   $0x0,(%rsp)
  call   <__builtin_sub_overflow@plt>
  xor    %edi,%edi
  test   %eax,%eax
  jne    L105
  mov    (%rbx),%eax
  xor    %edi,%edi
  sub    $0xa,%eax
  cmp    (%rsp),%eax
  sete   %dil
L105:
  call   <assert@plt>
  mov    $0xfffffff0,%edi
  mov    %r12,%rdx
  xor    %eax,%eax
  mov    $0x10,%esi
  movq   $0x0,(%rsp)
  call   <__builtin_add_overflow@plt>
  xor    %edi,%edi
  test   %rax,%rax
  jne    L58
  movabs $0x100000000,%rax
  xor    %edi,%edi
  cmp    %rax,(%rsp)
  sete   %dil
L58:
  call   <assert@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L42
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L42:
  call   <__stack_chk_fail@plt>
```

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);
  }
}
```