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

```asm
<show_sas_phy_event_info>:
  endbr64
  cmp    $0x63,%edi
  ja     L8
  push   %rbp
  mov    %edi,%edi
  mov    %edx,%ebp
  lea    D193(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
  pop    %rbp
  ret
  lea    D222(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D185(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D369(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D195(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D27(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D233(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D170(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D354(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D229(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D30(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D203(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D386(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D288(%rip),%rdi
L19:
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebp,%esi
  lea    D274(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D66(%rip),%rdi
  jmp    L19
  movzwl %si,%r8d
  and    $0x8000,%esi
  jne    L7
  mov    %r8d,%esi
  lea    D280(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L47:
  movzwl %bp,%esi
  and    $0x8000,%ebp
  jne    L0
  lea    D241(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  movzbl %sil,%esi
  lea    D181(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  movzbl %bpl,%esi
  lea    D274(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D88(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D353(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D117(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D237(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D119(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D24(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D139(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D342(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D60(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D355(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D126(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D347(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D45(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D318(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D382(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D23(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D72(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  lea    D259(%rip),%rdi
  pop    %rbp
  jmp    1060 <puts@plt>
  cs nopw 0x0(%rax,%rax,1)
L0:
  sub    $0x7fdf,%esi
  lea    D166(%rip),%rdi
  xor    %eax,%eax
  pop    %rbp
  jmp    1070 <printf@plt>
  nopl   (%rax)
L7:
  lea    -0x7fdf(%r8),%esi
  lea    D4(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
  nopw   0x0(%rax,%rax,1)
L8:
  ret
```

tool_calls: name: parse_data
arguments: data_label: D222
datatype: string
name: parse_data
arguments: data_label: D185
datatype: string
name: parse_data
arguments: data_label: D369
datatype: string
name: parse_data
arguments: data_label: D195
datatype: string
name: parse_data
arguments: data_label: D27
datatype: string
name: parse_data
arguments: data_label: D233
datatype: string
name: parse_data
arguments: data_label: D170
datatype: string
name: parse_data
arguments: data_label: D354
datatype: string
name: parse_data
arguments: data_label: D229
datatype: string
name: parse_data
arguments: data_label: D30
datatype: string
name: parse_data
arguments: data_label: D203
datatype: string
name: parse_data
arguments: data_label: D386
datatype: string
name: parse_data
arguments: data_label: D288
datatype: string
name: parse_data
arguments: data_label: D274
datatype: string
name: parse_data
arguments: data_label: D66
datatype: string
name: parse_data
arguments: data_label: D280
datatype: string
name: parse_data
arguments: data_label: D241
datatype: string
name: parse_data
arguments: data_label: D181
datatype: string
name: parse_data
arguments: data_label: D88
datatype: string
name: parse_data
arguments: data_label: D353
datatype: string
name: parse_data
arguments: data_label: D117
datatype: string
name: parse_data
arguments: data_label: D237
datatype: string
name: parse_data
arguments: data_label: D119
datatype: string
name: parse_data
arguments: data_label: D24
datatype: string
name: parse_data
arguments: data_label: D139
datatype: string
name: parse_data
arguments: data_label: D342
datatype: string
name: parse_data
arguments: data_label: D60
datatype: string
name: parse_data
arguments: data_label: D355
datatype: string
name: parse_data
arguments: data_label: D126
datatype: string
name: parse_data
arguments: data_label: D347
datatype: string
name: parse_data
arguments: data_label: D45
datatype: string
name: parse_data
arguments: data_label: D318
datatype: string
name: parse_data
arguments: data_label: D382
datatype: string
name: parse_data
arguments: data_label: D23
datatype: string
name: parse_data
arguments: data_label: D72
datatype: string
name: parse_data
arguments: data_label: D259
datatype: string
name: parse_data
arguments: data_label: D166
datatype: string
name: parse_data
arguments: data_label: D4
datatype: string

tool: D222:      Received SMP frame error count: %u


tool: D185:      Received SMP frame count: %u


tool: D369:      Transmitted SMP frame count: %u


tool: D195:      SATA flow control buffer overflow count: %u


tool: D27:      Received SATA frame count: %u


tool: D233:      Transmitted SATA frame count: %u


tool: D170:      Received CREDIT_BLOCKED count: %u


tool: D354:      Transmitted CREDIT_BLOCKED count: %u


tool: D229:      Received SSP frame error count: %u


tool: D30:      Transmitted SSP frame error count: %u


tool: D203:      Received SSP frame count: %u


tool: D386:      Transmitted SSP frame count: %u


tool: D288:      Peak connection time (us): %u


tool: D274:          Peak value detector threshold: %u


tool: D66:      Peak arbitration time (us): %u


tool: D280:      Peak transmitted arbitration wait time (us): %u


tool: D241:          Peak value detector threshold (us): %u


tool: D181:      Peak transmitted pathway blocked count: %u


tool: D88:      Connection count: %u


tool: D353:      Break timeout count: %u


tool: D117:      Received BREAK count: %u


tool: D237:      Transmitted BREAK count: %u


tool: D119:      Received AIP (WAITING ON CONNECTION) count: %u


tool: D24:      Received AIP (WATING ON PARTIAL) count: %u


tool: D139:      Received retry-class OPEN_REJECT count: %u


tool: D342:      Transmitted retry-class OPEN_REJECT count: %u


tool: D60:      Received abandon-class OPEN_REJECT count: %u


tool: D355:      Transmitted abandon-class OPEN_REJECT count: %u


tool: D126:      Received address frame error count: %u


tool: D347:      Received ERROR  count: %u


tool: D45:      Elasticity buffer overflow count: %u


tool: D318:      Phy reset problem count: %u


tool: D382:      Loss of dword synchronization count: %u


tool: D23:      Running disparity error count: %u


tool: D72:      Invalid word count: %u


tool: D259:      No event

tool: D166:          Peak value detector threshold (ms): %u


tool: D4:      Peak transmitted arbitration wait time (ms): %u


assistant: ```c
void show_sas_phy_event_info(int peis, unsigned int val, unsigned thresh_val) {
  unsigned int u;
  switch (peis) {
  case 0:
    printf("     No event\n");
    break;
  case 0x1:
    printf("     Invalid word count: %u\n", val);
    break;
  case 0x2:
    printf("     Running disparity error count: %u\n", val);
    break;
  case 0x3:
    printf("     Loss of dword synchronization count: %u\n", val);
    break;
  case 0x4:
    printf("     Phy reset problem count: %u\n", val);
    break;
  case 0x5:
    printf("     Elasticity buffer overflow count: %u\n", val);
    break;
  case 0x6:
    printf("     Received ERROR  count: %u\n", val);
    break;
  case 0x20:
    printf("     Received address frame error count: %u\n", val);
    break;
  case 0x21:
    printf("     Transmitted abandon-class OPEN_REJECT count: %u\n", val);
    break;
  case 0x22:
    printf("     Received abandon-class OPEN_REJECT count: %u\n", val);
    break;
  case 0x23:
    printf("     Transmitted retry-class OPEN_REJECT count: %u\n", val);
    break;
  case 0x24:
    printf("     Received retry-class OPEN_REJECT count: %u\n", val);
    break;
  case 0x25:
    printf("     Received AIP (WATING ON PARTIAL) count: %u\n", val);
    break;
  case 0x26:
    printf("     Received AIP (WAITING ON CONNECTION) count: %u\n", val);
    break;
  case 0x27:
    printf("     Transmitted BREAK count: %u\n", val);
    break;
  case 0x28:
    printf("     Received BREAK count: %u\n", val);
    break;
  case 0x29:
    printf("     Break timeout count: %u\n", val);
    break;
  case 0x2a:
    printf("     Connection count: %u\n", val);
    break;
  case 0x2b:
    printf("     Peak transmitted pathway blocked count: %u\n", val & 0xff);
    printf("         Peak value detector threshold: %u\n", thresh_val & 0xff);
    break;
  case 0x2c:
    u = val & 0xffff;
    if (u < 0x8000)
      printf("     Peak transmitted arbitration wait time (us): "
             "%u\n",
             u);
    else
      printf("     Peak transmitted arbitration wait time (ms): "
             "%u\n",
             33 + (u - 0x8000));
    u = thresh_val & 0xffff;
    if (u < 0x8000)
      printf("         Peak value detector threshold (us): %u\n", u);
    else
      printf("         Peak value detector threshold (ms): %u\n", 33 + (u - 0x8000));
    break;
  case 0x2d:
    printf("     Peak arbitration time (us): %u\n", val);
    printf("         Peak value detector threshold: %u\n", thresh_val);
    break;
  case 0x2e:
    printf("     Peak connection time (us): %u\n", val);
    printf("         Peak value detector threshold: %u\n", thresh_val);
    break;
  case 0x40:
    printf("     Transmitted SSP frame count: %u\n", val);
    break;
  case 0x41:
    printf("     Received SSP frame count: %u\n", val);
    break;
  case 0x42:
    printf("     Transmitted SSP frame error count: %u\n", val);
    break;
  case 0x43:
    printf("     Received SSP frame error count: %u\n", val);
    break;
  case 0x44:
    printf("     Transmitted CREDIT_BLOCKED count: %u\n", val);
    break;
  case 0x45:
    printf("     Received CREDIT_BLOCKED count: %u\n", val);
    break;
  case 0x50:
    printf("     Transmitted SATA frame count: %u\n", val);
    break;
  case 0x51:
    printf("     Received SATA frame count: %u\n", val);
    break;
  case 0x52:
    printf("     SATA flow control buffer overflow count: %u\n", val);
    break;
  case 0x60:
    printf("     Transmitted SMP frame count: %u\n", val);
    break;
  case 0x61:
    printf("     Received SMP frame count: %u\n", val);
    break;
  case 0x63:
    printf("     Received SMP frame error count: %u\n", val);
    break;
  default:
    break;
  }
}
```