user: 请从给定的汇编指令推导出C源代码:

```asm
<trivial_zero_9j>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9d,-0x28(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  or     -0x18(%rbp),%eax
  or     -0x1c(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  or     -0x24(%rbp),%eax
  or     -0x28(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    0x10(%rbp),%eax
  or     0x18(%rbp),%eax
  or     0x20(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  or     %eax,-0x4(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  sub    -0x14(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x18(%rbp),%eax
  sub    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  or     %eax,-0x4(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  sub    -0x20(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x28(%rbp),%eax
  sub    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    0x10(%rbp),%edx
  mov    0x18(%rbp),%eax
  add    %eax,%edx
  mov    0x20(%rbp),%eax
  add    %edx,%eax
  or     %eax,-0x4(%rbp)
  mov    0x18(%rbp),%edx
  mov    0x20(%rbp),%eax
  add    %edx,%eax
  sub    0x10(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    0x18(%rbp),%eax
  sub    0x20(%rbp),%eax
  mov    %eax,%edx
  mov    0x10(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    0x20(%rbp),%eax
  sub    0x18(%rbp),%eax
  mov    %eax,%edx
  mov    0x10(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %eax,%edx
  mov    0x10(%rbp),%eax
  add    %edx,%eax
  or     %eax,-0x4(%rbp)
  mov    -0x20(%rbp),%edx
  mov    0x10(%rbp),%eax
  add    %edx,%eax
  sub    -0x14(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  sub    0x10(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    0x10(%rbp),%eax
  sub    -0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    0x18(%rbp),%eax
  add    %edx,%eax
  or     %eax,-0x4(%rbp)
  mov    -0x24(%rbp),%edx
  mov    0x18(%rbp),%eax
  add    %edx,%eax
  sub    -0x18(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  sub    0x18(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    0x18(%rbp),%eax
  sub    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %eax,%edx
  mov    0x20(%rbp),%eax
  add    %edx,%eax
  or     %eax,-0x4(%rbp)
  mov    -0x28(%rbp),%edx
  mov    0x20(%rbp),%eax
  add    %edx,%eax
  sub    -0x1c(%rbp),%eax
  or     %eax,-0x8(%rbp)
  mov    -0x28(%rbp),%eax
  sub    0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    0x20(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  sub    %edx,%eax
  or     %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  and    $0x80000000,%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  and    $0x1,%eax
  or     %edx,%eax
  pop    %rbp
  ret
```

assistant: ```c
int trivial_zero_9j(int two_j1, int two_j2, int two_j3, int two_j4, int two_j5, int two_j6, int two_j7, int two_j8, int two_j9) {
  int collect_sign = 0;
  int collect_odd = 0;
  do {
    collect_sign |= (two_j1) | (two_j2) | (two_j3);
  } while (0);
  do {
    collect_sign |= (two_j4) | (two_j5) | (two_j6);
  } while (0);
  do {
    collect_sign |= (two_j7) | (two_j8) | (two_j9);
  } while (0);
  do {
    collect_odd |= (two_j1) + (two_j2) + (two_j3);
    collect_sign |= (((two_j2) + (two_j3)) - (two_j1));
    collect_sign |= ((two_j1) - ((two_j2) - (two_j3)));
    collect_sign |= ((two_j1) - ((two_j3) - (two_j2)));
  } while (0);
  do {
    collect_odd |= (two_j4) + (two_j5) + (two_j6);
    collect_sign |= (((two_j5) + (two_j6)) - (two_j4));
    collect_sign |= ((two_j4) - ((two_j5) - (two_j6)));
    collect_sign |= ((two_j4) - ((two_j6) - (two_j5)));
  } while (0);
  do {
    collect_odd |= (two_j7) + (two_j8) + (two_j9);
    collect_sign |= (((two_j8) + (two_j9)) - (two_j7));
    collect_sign |= ((two_j7) - ((two_j8) - (two_j9)));
    collect_sign |= ((two_j7) - ((two_j9) - (two_j8)));
  } while (0);
  do {
    collect_odd |= (two_j1) + (two_j4) + (two_j7);
    collect_sign |= (((two_j4) + (two_j7)) - (two_j1));
    collect_sign |= ((two_j1) - ((two_j4) - (two_j7)));
    collect_sign |= ((two_j1) - ((two_j7) - (two_j4)));
  } while (0);
  do {
    collect_odd |= (two_j2) + (two_j5) + (two_j8);
    collect_sign |= (((two_j5) + (two_j8)) - (two_j2));
    collect_sign |= ((two_j2) - ((two_j5) - (two_j8)));
    collect_sign |= ((two_j2) - ((two_j8) - (two_j5)));
  } while (0);
  do {
    collect_odd |= (two_j3) + (two_j6) + (two_j9);
    collect_sign |= (((two_j6) + (two_j9)) - (two_j3));
    collect_sign |= ((two_j3) - ((two_j6) - (two_j9)));
    collect_sign |= ((two_j3) - ((two_j9) - (two_j6)));
  } while (0);
  return ((collect_sign & (1 << (sizeof(int) * 8 - 1))) | (collect_odd & 1));
}
```