user: What is the c source code of the assembly code below?

```asm
<lloptest>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  mov    %rdi,%rcx
  imul   %rsi,%rcx
  mov    %edi,%edx
  sub    %esi,%edx
  lea    (%rsi,%rdi,1),%esi
  lea    D53(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  test   %rbp,%rbp
  jne    L15
L12:
  mov    %rbx,%rcx
  xor    %rbp,%rcx
  mov    %ebp,%edx
  or     %ebx,%edx
  mov    %ebp,%esi
  and    %ebx,%esi
  lea    D15(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    %rbp,%rbx
  setge  %r9b
  movzbl %r9b,%r9d
  setg   %r8b
  movzbl %r8b,%r8d
  setl   %cl
  movzbl %cl,%ecx
  setne  %dl
  movzbl %dl,%edx
  sete   %sil
  movzbl %sil,%esi
  sub    $0x8,%rsp
  cmp    %rbp,%rbx
  setle  %al
  movzbl %al,%eax
  push   %rax
  lea    D36(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    %rbp,%rbx
  setae  %r9b
  movzbl %r9b,%r9d
  seta   %r8b
  movzbl %r8b,%r8d
  setb   %cl
  movzbl %cl,%ecx
  setne  %dl
  movzbl %dl,%edx
  sete   %sil
  movzbl %sil,%esi
  cmp    %rbp,%rbx
  setbe  %al
  movzbl %al,%eax
  mov    %eax,(%rsp)
  lea    D54(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x1(%rbx),%r14
  lea    0x1(%rbp),%r13d
  mov    %r13d,%edx
  mov    %r14d,%esi
  lea    D2(%rip),%rbp
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  test   %rbx,%rbx
  sete   %dl
  movzbl %dl,%edx
  test   %r14,%r14
  sete   %sil
  movzbl %sil,%esi
  mov    $0x1,%r8d
  mov    $0x1,%ecx
  lea    D29(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L15:
  mov    %rbx,%rax
  cqto
  idiv   %rbp
  mov    %eax,%esi
  lea    D66(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L12
```

tool_calls: name: parse_data
arguments: tag: D53
datatype: string
name: parse_data
arguments: tag: D15
datatype: string
name: parse_data
arguments: tag: D36
datatype: string
name: parse_data
arguments: tag: D54
datatype: string
name: parse_data
arguments: tag: D2
datatype: string
name: parse_data
arguments: tag: D29
datatype: string
name: parse_data
arguments: tag: D66
datatype: string

tool: D53: arith: %lld %lld %lld


tool: D15: bin: %lld %lld %lld


tool: D36: test: %d %d %d %d %d %d


tool: D54: utest: %d %d %d %d %d %d


tool: D2: arith2: %lld %lld


tool: D29: not: %d %d %d %d


tool: D66: arith1: %lld %lld


assistant: ```c
void lloptest(long long a, long long b) {
  unsigned long long ua, ub;
  ua = a;
  ub = b;
  printf("arith: %lld %lld %lld\n", a + b, a - b, a * b);
  if (b != 0) {
    printf("arith1: %lld %lld\n", a / b, a % b);
  }
  printf("bin: %lld %lld %lld\n", a & b, a | b, a ^ b);
  printf("test: %d %d %d %d %d %d\n", a == b, a != b, a<b, a> b, a >= b, a <= b);
  printf("utest: %d %d %d %d %d %d\n", ua == ub, ua != ub, ua<ub, ua> ub, ua >= ub, ua <= ub);
  a++;
  b++;
  printf("arith2: %lld %lld\n", a, b);
  printf("arith2: %lld %lld\n", a++, b++);
  printf("arith2: %lld %lld\n", --a, --b);
  printf("arith2: %lld %lld\n", a, b);
  b = ub = 0;
  printf("not: %d %d %d %d\n", !a, !ua, !b, !ub);
}
```