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

```asm
<print_mm_fdevopt>:
  endbr64
  mov    %rsi,%r8
  push   %rbx
  mov    %edi,%esi
  mov    %rdi,%rbx
  test   %r8,%r8
  jne    L18
  lea    D68(%rip),%rdi
  call   <printf@plt>
L89:
  mov    %ebx,%esi
  lea    D83(%rip),%rdi
  shr    $0x10,%esi
  call   <printf@plt>
  test   $0x80,%bh
  je     L21
  mov    $0x8,%esi
  lea    D100(%rip),%rdi
  call   <printf@plt>
L78:
  test   $0x40,%bh
  je     L39
  mov    $0x4,%esi
  lea    D71(%rip),%rdi
  call   <printf@plt>
L57:
  test   $0x10,%bl
  je     L61
  mov    $0x1,%esi
  lea    D30(%rip),%rdi
  call   <printf@plt>
L44:
  and    $0x8,%ebx
  je     L38
  mov    $0x8,%esi
  lea    D103(%rip),%rdi
  pop    %rbx
  jmp    1050 <printf@plt>
  nopl   0x0(%rax)
L18:
  lea    D27(%rip),%rdi
  call   <printf@plt>
  jmp    L89
  xchg   %ax,%ax
L38:
  xor    %esi,%esi
  lea    D76(%rip),%rdi
  pop    %rbx
  jmp    1050 <printf@plt>
  nop
L61:
  xor    %esi,%esi
  lea    D93(%rip),%rdi
  call   <printf@plt>
  jmp    L44
L39:
  xor    %esi,%esi
  lea    D95(%rip),%rdi
  call   <printf@plt>
  jmp    L57
L21:
  xor    %esi,%esi
  lea    D62(%rip),%rdi
  call   <printf@plt>
  jmp    L78
```

tool_calls: name: unpack_data
arguments: data_tag: D68
type_guessed: string
name: unpack_data
arguments: data_tag: D83
type_guessed: string
name: unpack_data
arguments: data_tag: D100
type_guessed: string
name: unpack_data
arguments: data_tag: D71
type_guessed: string
name: unpack_data
arguments: data_tag: D30
type_guessed: string
name: unpack_data
arguments: data_tag: D103
type_guessed: string
name: unpack_data
arguments: data_tag: D27
type_guessed: string
name: unpack_data
arguments: data_tag: D76
type_guessed: string
name: unpack_data
arguments: data_tag: D93
type_guessed: string
name: unpack_data
arguments: data_tag: D95
type_guessed: string
name: unpack_data
arguments: data_tag: D62
type_guessed: string

tool: D68:     FDEVOPT = 0x%08X


tool: D83:               0x%04X     USERID


tool: D100:                     %01x    VBUSON pin: controlled by USB (GPM series only)


tool: D71:                     %01x    USBID pin: controlled by USB (GPM series only)


tool: D30:                       %01x  I2C1 is on pins RB8 & RB9 (GPM series only)


tool: D103:                        %01x SOSC normal power mode


tool: D27:    AFDEVOPT = 0x%08X


tool: D76:                        %01x SOSC High power mode


tool: D93:                       %01x  I2C1 is on alt. pins, RB5 & RC9 (GPM series only)


tool: D95:                     %01x    USBID pin: controlled by port function (GPM series only)


tool: D62:                     %01x    VBUSON pin: controlled by port function (GPM series only)


assistant: ```c
void print_mm_fdevopt(uint32_t fdevopt, uint32_t alternate) {
  if (0 == alternate) {
    printf("    FDEVOPT = 0x%08X\n", fdevopt);
  } else {
    printf("   AFDEVOPT = 0x%08X\n", fdevopt);
  }
  printf("              0x%04X     USERID\n", (fdevopt & 0xffff0000) >> 16);
  if (fdevopt & 0x00008000) {
    printf("                    %01x    VBUSON pin: controlled by USB (GPM series only)\n", 0x00008000 >> 12);
  } else {
    printf("                    %01x    VBUSON pin: controlled by port function (GPM series only)\n", 0);
  }
  if (fdevopt & 0x00004000) {
    printf("                    %01x    USBID pin: controlled by USB (GPM series only)\n", 0x00004000 >> 12);
  } else {
    printf("                    %01x    USBID pin: controlled by port function (GPM series only)\n", 0);
  }
  if (fdevopt & 0x00000010) {
    printf("                      %01x  I2C1 is on pins RB8 & RB9 (GPM series only)\n", 0x00000010 >> 4);
  } else {
    printf("                      %01x  I2C1 is on alt. pins, RB5 & RC9 (GPM series only)\n", 0);
  }
  if (fdevopt & 0x00000008) {
    printf("                       %01x SOSC normal power mode\n", 0x00000008);
  } else {
    printf("                       %01x SOSC High power mode\n", 0);
  }
}
```