user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<show_sas_phy_event_info>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  cmpl   $0x63,-0x14(%rbp)
  ja     L138
  mov    -0x14(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D44(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D44(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D241(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D415(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D314(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D168(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D315(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D362(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D227(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D260(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D159(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D221(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D164(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D230(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D219(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D176(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D339(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x1c(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  movzwl %ax,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x7fff,-0x4(%rbp)
  ja     L1
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D324(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L110
L1:
  mov    -0x4(%rbp),%eax
  sub    $0x7fdf,%eax
  mov    %eax,%esi
  lea    D217(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L110:
  mov    -0x1c(%rbp),%eax
  movzwl %ax,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x7fff,-0x4(%rbp)
  ja     L242
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
L242:
  mov    -0x4(%rbp),%eax
  sub    $0x7fdf,%eax
  mov    %eax,%esi
  lea    D198(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D183(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D275(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D293(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D258(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D286(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D212(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D400(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D150(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L17
L138:
  nop
L17:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D241
type: string
name: parse_data
arguments: data_tag: D415
type: string
name: parse_data
arguments: data_tag: D314
type: string
name: parse_data
arguments: data_tag: D21
type: string
name: parse_data
arguments: data_tag: D168
type: string
name: parse_data
arguments: data_tag: D315
type: string
name: parse_data
arguments: data_tag: D362
type: string
name: parse_data
arguments: data_tag: D227
type: string
name: parse_data
arguments: data_tag: D260
type: string
name: parse_data
arguments: data_tag: D159
type: string
name: parse_data
arguments: data_tag: D76
type: string
name: parse_data
arguments: data_tag: D221
type: string
name: parse_data
arguments: data_tag: D164
type: string
name: parse_data
arguments: data_tag: D29
type: string
name: parse_data
arguments: data_tag: D230
type: string
name: parse_data
arguments: data_tag: D219
type: string
name: parse_data
arguments: data_tag: D35
type: string
name: parse_data
arguments: data_tag: D176
type: string
name: parse_data
arguments: data_tag: D339
type: string
name: parse_data
arguments: data_tag: D45
type: string
name: parse_data
arguments: data_tag: D324
type: string
name: parse_data
arguments: data_tag: D217
type: string
name: parse_data
arguments: data_tag: D123
type: string
name: parse_data
arguments: data_tag: D198
type: string
name: parse_data
arguments: data_tag: D51
type: string
name: parse_data
arguments: data_tag: D183
type: string
name: parse_data
arguments: data_tag: D275
type: string
name: parse_data
arguments: data_tag: D34
type: string
name: parse_data
arguments: data_tag: D60
type: string
name: parse_data
arguments: data_tag: D293
type: string
name: parse_data
arguments: data_tag: D134
type: string
name: parse_data
arguments: data_tag: D80
type: string
name: parse_data
arguments: data_tag: D258
type: string
name: parse_data
arguments: data_tag: D286
type: string
name: parse_data
arguments: data_tag: D212
type: string
name: parse_data
arguments: data_tag: D400
type: string
name: parse_data
arguments: data_tag: D38
type: string
name: parse_data
arguments: data_tag: D150
type: string

tool: D241:      No event

tool: D415:      Invalid word count: %u


tool: D314:      Running disparity error count: %u


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


tool: D168:      Phy reset problem count: %u


tool: D315:      Elasticity buffer overflow count: %u


tool: D362:      Received ERROR  count: %u


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


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


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


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


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


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


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


tool: D230:      Transmitted BREAK count: %u


tool: D219:      Received BREAK count: %u


tool: D35:      Break timeout count: %u


tool: D176:      Connection count: %u


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


tool: D45:          Peak value detector threshold: %u


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


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


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


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


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


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


tool: D275:      Transmitted SSP frame count: %u


tool: D34:      Received SSP frame count: %u


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


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


tool: D134:      Transmitted CREDIT_BLOCKED count: %u


tool: D80:      Received CREDIT_BLOCKED count: %u


tool: D258:      Transmitted SATA frame count: %u


tool: D286:      Received SATA frame count: %u


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


tool: D400:      Transmitted SMP frame count: %u


tool: D38:      Received SMP frame count: %u


tool: D150:      Received SMP frame error count: %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;
  }
}
```