user: Translate the below assembly code into C programming language:

```asm
<SHA256_Xcompare_2>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  movabs $0xf83f31ba835a8288,%rax
  movabs $0xc729d207cb536455,%rdx
  mov    %rax,0x40(%rsp)
  mov    %rdx,0x48(%rsp)
  movabs $0x6ae43e0ff1d76a80,%rax
  movabs $0xa2cc33fd5cd8ad44,%rdx
  mov    %rax,0x50(%rsp)
  mov    %rdx,0x58(%rsp)
  movabs $0x59d1dae3decdb6b,%rax
  movabs $0x23ea26941e897942,%rdx
  mov    %rax,0x60(%rsp)
  mov    %rdx,0x68(%rsp)
  movabs $0xde98492d5b6b4131,%rax
  movabs $0x9e0674f385e9955,%rdx
  mov    %rax,0x70(%rsp)
  mov    %rdx,0x78(%rsp)
  movabs $0x986a25cc760c03d4,%rax
  movabs $0x37108b41d9914bc4,%rdx
  mov    %rax,0x80(%rsp)
  mov    %rdx,0x88(%rsp)
  movabs $0x68b437c91f1c9ccc,%rax
  movabs $0xe47a47d242b44abb,%rdx
  mov    %rax,(%rsp)
  mov    %rdx,0x8(%rsp)
  movabs $0x47041ad35e6bf741,%rax
  movabs $0x1c0c3a2a02377f5e,%rdx
  mov    %rax,0x10(%rsp)
  mov    %rdx,0x18(%rsp)
  lea    0x20(%rsp),%rbx
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  lea    0x40(%rsp),%r12
  mov    $0x50,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <SHA256_VST@plt>
  mov    %rsp,%rbp
  lea    D3(%rip),%rcx
  mov    $0x20,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <check_test@plt>
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    $0x50,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <SHA256_NSS@plt>
  lea    D1(%rip),%rcx
  mov    $0x20,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <check_test@plt>
  mov    $0x20,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    $0x50,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <SHA256_sodium@plt>
  lea    D2(%rip),%rcx
  mov    $0x20,%edx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <check_test@plt>
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0xa0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L9:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: tag: D3
data_type: string
name: retrieve_data
arguments: tag: D1
data_type: string
name: retrieve_data
arguments: tag: D2
data_type: string

tool: D3: Disagreement between given answer and SHA256_VST in SHA256_Xcompare_2


tool: D1: Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_2


tool: D2: Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_2


assistant: ```c
void SHA256_Xcompare_2() {
  unsigned char input[80] = {136, 130, 90, 131, 186, 49, 63, 248, 85, 100, 83, 203, 7, 210, 41, 199, 128, 106, 215, 241, 15, 62, 228, 106, 68, 173, 216, 92, 253, 51, 204, 162, 107, 219, 236, 61, 174, 29, 157, 5, 66, 121, 137, 30, 148, 38, 234, 35, 49, 65, 107, 91, 45, 73, 152, 222, 85, 153, 94, 56, 79, 103, 224, 9, 212, 3, 12, 118, 204, 37, 106, 152, 196, 75, 145, 217, 65, 139, 16, 55};
  unsigned char result0[32] = {0xCC, 0x9C, 0x1C, 0x1F, 0xC9, 0x37, 0xB4, 0x68, 0xBB, 0x4A, 0xB4, 0x42, 0xD2, 0x47, 0x7A, 0xE4, 0x41, 0xF7, 0x6B, 0x5E, 0xD3, 0x1A, 0x04, 0x47, 0x5E, 0x7F, 0x37, 0x02, 0x2A, 0x3A, 0x0C, 0x1C};
  unsigned char result1[32];
  memset(result1, 0, 32);
  SHA256_VST(input, result1, 80);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_VST in SHA256_Xcompare_2\n");
  memset(result1, 0, 32);
  SHA256_NSS(input, result1, 80);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_NSS in SHA256_Xcompare_2\n");
  memset(result1, 0, 32);
  SHA256_sodium(input, result1, 80);
  check_test(result0, result1, 32, "Disagreement between given answer and SHA256_sodium in SHA256_Xcompare_2\n");
}
```