user: Please show me the C implementation that matches the assembly code listed below:

```asm
<random_byte_lfsr32>:
  endbr64
  mov    D6(%rip),%edx
  mov    %edx,%eax
  and    $0x2,%eax
  test   $0x20,%dl
  jne    L119
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L175:
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   $0x40,%dl
  cmovne %ecx,%eax
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   %edx,%edx
  cmovs  %ecx,%eax
  sar    %edx
  mov    %edx,%ecx
  shl    $0x1f,%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  or     %ecx,%edx
  and    $0x2,%eax
  and    $0x20,%ecx
  jne    L157
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L51:
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   $0x40,%dl
  cmovne %ecx,%eax
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   %edx,%edx
  cmovs  %ecx,%eax
  sar    %edx
  shl    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  or     %edx,%ecx
  and    $0x2,%eax
  and    $0x20,%edx
  jne    L86
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L27:
  mov    %eax,%edx
  xor    $0x1,%edx
  test   $0x40,%cl
  cmovne %edx,%eax
  mov    %eax,%edx
  xor    $0x1,%edx
  test   %ecx,%ecx
  cmovs  %edx,%eax
  sar    %ecx
  shl    $0x1f,%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  or     %ecx,%edx
  and    $0x2,%eax
  and    $0x20,%ecx
  jne    L48
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L32:
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   $0x40,%dl
  cmovne %ecx,%eax
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   %edx,%edx
  cmovs  %ecx,%eax
  sar    %edx
  shl    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  or     %edx,%ecx
  and    $0x2,%eax
  and    $0x20,%edx
  jne    L101
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L133:
  mov    %eax,%edx
  xor    $0x1,%edx
  test   $0x40,%cl
  cmovne %edx,%eax
  mov    %eax,%edx
  xor    $0x1,%edx
  test   %ecx,%ecx
  cmovs  %edx,%eax
  sar    %ecx
  shl    $0x1f,%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  or     %ecx,%edx
  and    $0x2,%eax
  and    $0x20,%ecx
  jne    L53
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L25:
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   $0x40,%dl
  cmovne %ecx,%eax
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   %edx,%edx
  cmovs  %ecx,%eax
  sar    %edx
  shl    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  or     %edx,%ecx
  and    $0x2,%eax
  and    $0x20,%edx
  jne    L98
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L96:
  mov    %eax,%edx
  xor    $0x1,%edx
  test   $0x40,%cl
  cmovne %edx,%eax
  mov    %eax,%edx
  xor    $0x1,%edx
  test   %ecx,%ecx
  cmovs  %edx,%eax
  sar    %ecx
  shl    $0x1f,%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  or     %ecx,%edx
  and    $0x2,%eax
  and    $0x20,%ecx
  jne    L105
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
L22:
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   $0x40,%dl
  cmovne %ecx,%eax
  mov    %eax,%ecx
  xor    $0x1,%ecx
  test   %edx,%edx
  cmovs  %ecx,%eax
  sar    %edx
  mov    %edx,%ecx
  shl    $0x1f,%eax
  and    $0x2,%ecx
  or     %edx,%eax
  and    $0x20,%edx
  je     L106
  xor    %edx,%edx
  test   %ecx,%ecx
  sete   %dl
L70:
  mov    %edx,%ecx
  xor    $0x1,%ecx
  test   $0x40,%al
  cmovne %ecx,%edx
  mov    %edx,%ecx
  xor    $0x1,%ecx
  test   %eax,%eax
  cmovs  %ecx,%edx
  sar    %eax
  shl    $0x1f,%edx
  or     %edx,%eax
  mov    %eax,D13(%rip)
  movzbl %al,%eax
  ret
  nopl   0x0(%rax)
L119:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L175
  nopl   (%rax)
L106:
  xor    %edx,%edx
  test   %ecx,%ecx
  setne  %dl
  jmp    L70
  nopl   0x0(%rax)
L105:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L22
  nopw   0x0(%rax,%rax,1)
L98:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L96
  nopl   (%rax)
L53:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L25
  nopl   (%rax)
L101:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L133
  nopl   (%rax)
L48:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L32
  nopl   (%rax)
L86:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L27
  nopl   (%rax)
L157:
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L51
```

assistant: ```c
uint8_t random_byte_lfsr32(void) {
  static uint32_t lfsr = 0xDEADBEEF;
  uint8_t state;
  for (state = 0; state <= 8; state++) {
    uint8_t new_bit = 0;
    if (lfsr & ((uint32_t)(1) << (1)))
      new_bit ^= 1;
    if (lfsr & ((uint32_t)(1) << (5)))
      new_bit ^= 1;
    if (lfsr & ((uint32_t)(1) << (6)))
      new_bit ^= 1;
    if (lfsr & ((uint32_t)(1) << (31)))
      new_bit ^= 1;
    lfsr >>= 1;
    lfsr |= (uint32_t)(new_bit) << 31;
  };
  return (uint8_t)(lfsr & 0xFF);
}
```