user: What would the C source look like for the assembly code provided here?

```asm
<XOR_HOST_REG_B>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %esi,-0x8(%rbp)
  mov    -0x4(%rbp),%eax
  and    -0x8(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L102
  mov    -0x4(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L52
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0x44,%edi
  call   <addbyte@plt>
  mov    $0x89,%edi
  call   <addbyte@plt>
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     $0xc0,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    -0x8(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  jne    L10
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    $0xe0,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
  jmp    L24
L10:
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0x25,%edi
  call   <addbyte@plt>
  mov    $0xff00,%edi
  call   <addword@plt>
L24:
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0x41,%edi
  call   <addbyte@plt>
  mov    $0x31,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L52:
  mov    -0x8(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L119
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0x44,%edi
  call   <addbyte@plt>
  mov    $0x89,%edi
  call   <addbyte@plt>
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     $0xc0,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    $0xe8,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
  mov    $0x41,%edi
  call   <addbyte@plt>
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L119:
  mov    $0x45,%edi
  call   <addbyte@plt>
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     %edx,%eax
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L102:
  mov    -0x4(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L185
  mov    -0x4(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L87
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    -0x8(%rbp),%eax
  or     $0xe0,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
  mov    $0x66,%edi
  call   <addbyte@plt>
  mov    $0x41,%edi
  call   <addbyte@plt>
  mov    $0x31,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     %edx,%eax
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L87:
  mov    $0x41,%edi
  call   <addbyte@plt>
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     %edx,%eax
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L185:
  mov    -0x8(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L17
  mov    -0x4(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L49
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xe8,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
L49:
  mov    -0x8(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L66
  mov    $0x41,%edi
  call   <addbyte@plt>
  mov    $0xf,%edi
  call   <addbyte@plt>
  mov    $0xb7,%edi
  call   <addbyte@plt>
  mov    -0x8(%rbp),%eax
  and    $0x7,%eax
  or     $0xd8,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    $0xeb,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xd8,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L66:
  mov    $0x44,%edi
  call   <addbyte@plt>
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     %edx,%eax
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L17:
  mov    -0x4(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L189
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xe8,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
L189:
  mov    -0x8(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L50
  mov    $0xf,%edi
  call   <addbyte@plt>
  mov    $0xb7,%edi
  call   <addbyte@plt>
  mov    -0x8(%rbp),%eax
  and    $0x7,%eax
  or     $0xd8,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  mov    $0xc1,%edi
  call   <addbyte@plt>
  mov    $0xeb,%edi
  call   <addbyte@plt>
  mov    $0x8,%edi
  call   <addbyte@plt>
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xd8,%al
  mov    %eax,%edi
  call   <addbyte@plt>
  jmp    L29
L50:
  mov    $0x30,%edi
  call   <addbyte@plt>
  mov    -0x4(%rbp),%eax
  and    $0x7,%eax
  or     $0xc0,%al
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0x3,%eax
  and    $0x38,%eax
  or     %edx,%eax
  mov    %eax,%edi
  call   <addbyte@plt>
L29:
  nop
  leave
  ret
```

assistant: ```c
void XOR_HOST_REG_B(int dst_reg, int src_reg) {
  if (dst_reg & src_reg & 8) {
    if (dst_reg & 0x10) {
      addbyte(0x66);
      addbyte(0x44);
      addbyte(0x89);
      addbyte(0xc0 | ((src_reg & 7) << 3));
      if (!(src_reg & 0x10)) {
        addbyte(0x66);
        addbyte(0xc1);
        addbyte(0xe0);
        addbyte(8);
      } else {
        addbyte(0x66);
        addbyte(0x25);
        addword(0xff00);
      }
      addbyte(0x66);
      addbyte(0x41);
      addbyte(0x31);
      addbyte(0xc0 | (dst_reg & 7));
    } else if (src_reg & 0x10) {
      addbyte(0x66);
      addbyte(0x44);
      addbyte(0x89);
      addbyte(0xc0 | ((src_reg & 7) << 3));
      addbyte(0x66);
      addbyte(0xc1);
      addbyte(0xe8);
      addbyte(8);
      addbyte(0x41);
      addbyte(0x30);
      addbyte(0xc0 | (dst_reg & 7));
    } else {
      addbyte(0x45);
      addbyte(0x30);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  } else if (dst_reg & 8) {
    if (dst_reg & 0x10) {
      addbyte(0x66);
      addbyte(0xc1);
      addbyte(0xe0 | src_reg);
      addbyte(0x08);
      addbyte(0x66);
      addbyte(0x41);
      addbyte(0x31);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    } else {
      addbyte(0x41);
      addbyte(0x30);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  } else if (src_reg & 8) {
    if (dst_reg & 0x10) {
      addbyte(0xc1);
      addbyte(0xe8 | (dst_reg & 7));
      addbyte(8);
    }
    if (src_reg & 0x10) {
      addbyte(0x41);
      addbyte(0x0f);
      addbyte(0xb7);
      addbyte(0xd8 | (src_reg & 7));
      addbyte(0xc1);
      addbyte(0xeb);
      addbyte(8);
      addbyte(0x30);
      addbyte(0xd8 | (dst_reg & 7));
    } else {
      addbyte(0x44);
      addbyte(0x30);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  } else {
    if (dst_reg & 0x10) {
      addbyte(0xc1);
      addbyte(0xe8 | (dst_reg & 7));
      addbyte(8);
    }
    if (src_reg & 0x10) {
      addbyte(0x0f);
      addbyte(0xb7);
      addbyte(0xd8 | (src_reg & 7));
      addbyte(0xc1);
      addbyte(0xeb);
      addbyte(8);
      addbyte(0x30);
      addbyte(0xd8 | (dst_reg & 7));
    } else {
      addbyte(0x30);
      addbyte(0xc0 | (dst_reg & 7) | ((src_reg & 7) << 3));
    }
  }
}
```