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

```asm
<print_mm_fpor>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  cmpq   $0x0,-0x10(%rbp)
  jne    L80
  mov    -0x8(%rbp),%rax
  mov    %eax,%esi
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L144
L80:
  mov    -0x8(%rbp),%rax
  mov    %eax,%esi
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L144:
  mov    -0x8(%rbp),%rax
  and    $0x8,%eax
  test   %rax,%rax
  je     L108
  mov    $0x8,%esi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L5
L108:
  mov    $0x0,%esi
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L5:
  mov    -0x8(%rbp),%rax
  and    $0x4,%eax
  test   %rax,%rax
  je     L109
  mov    $0x4,%esi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L25
L109:
  mov    $0x0,%esi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L25:
  mov    -0x8(%rbp),%rax
  and    $0x3,%eax
  cmp    $0x3,%rax
  je     L111
  cmp    $0x3,%rax
  jg     L85
  cmp    $0x2,%rax
  je     L44
  cmp    $0x2,%rax
  jg     L85
  test   %rax,%rax
  je     L76
  cmp    $0x1,%rax
  je     L142
  jmp    L85
L111:
  mov    $0x3,%esi
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L85
L44:
  mov    $0x2,%esi
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L85
L142:
  mov    $0x1,%esi
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L85
L76:
  mov    $0x0,%esi
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  nop
L85:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D39
type_infered: string
name: parse_data
arguments: label: D27
type_infered: string
name: parse_data
arguments: label: D16
type_infered: string
name: parse_data
arguments: label: D55
type_infered: string
name: parse_data
arguments: label: D25
type_infered: string
name: parse_data
arguments: label: D37
type_infered: string
name: parse_data
arguments: label: D7
type_infered: string
name: parse_data
arguments: label: D94
type_infered: string
name: parse_data
arguments: label: D12
type_infered: string
name: parse_data
arguments: label: D40
type_infered: string

tool: D39:     FPOR    = 0x%08X


tool: D27:    AFPOR    = 0x%08X


tool: D16:                        %01x Low power BOR enabled, when main BOR disabled


tool: D55:                        %01x Low power BOR disabled


tool: D25:                        %01x Retention regulator disabled


tool: D37:                        %01x Retention regulator enabled, RETEN in sleep


tool: D7:                        %01x Brown-out Reset enabled in HW, SBOREN bit is disabled


tool: D94:                        %01x Brown-out Reset in enabled only while device is active and disabled in Sleep; SBOREN bit is disabled


tool: D12:                        %01x Brown-out Reset is controlled with the SBOREN bit setting


tool: D40:                        %01x Brown-out Reset is disabled in HWM SBOREN bit is disabled


assistant: ```c
void print_mm_fpor(uint32_t fpor, uint32_t alternate) {
  if (0 == alternate) {
    printf("    FPOR    = 0x%08X\n", fpor);
  } else {
    printf("   AFPOR    = 0x%08X\n", fpor);
  }
  if (fpor & 0x00000008) {
    printf("                       %01x Low power BOR enabled, when main BOR disabled\n", 0x00000008);
  } else {
    printf("                       %01x Low power BOR disabled\n", 0);
  }
  if (fpor & 0x00000004) {
    printf("                       %01x Retention regulator disabled\n", 0x00000004);
  } else {
    printf("                       %01x Retention regulator enabled, RETEN in sleep\n", 0);
  }
  switch (fpor & 0x00000003) {
  case 0x00000003:
    printf("                       %01x Brown-out Reset enabled in HW, SBOREN bit is disabled\n", 0x00000003);
    break;
  case 0x00000002:
    printf("                       %01x Brown-out Reset in enabled only while device is active and disabled in Sleep; SBOREN bit is disabled\n", 0x00000002);
    break;
  case 0x00000001:
    printf("                       %01x Brown-out Reset is controlled with the SBOREN bit setting\n", 0x00000001);
    break;
  case 0x00000000:
    printf("                       %01x Brown-out Reset is disabled in HWM SBOREN bit is disabled\n", 0x00000000);
    break;
  }
}
```