user: Demonstrate the C code that generates the assembly output below:

```asm
<set_usb_phy_config>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x1f4,-0x4(%rbp)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0x1f,%dl
  mov    %edx,(%rax)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0x80ffffff,%edx
  mov    %edx,(%rax)
  cmpl   $0x0,-0x14(%rbp)
  jne    L25
  movl   $0x1,-0xc(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L26
L25:
  movl   $0x3,-0xc(%rbp)
  movl   $0x31,-0x10(%rbp)
L26:
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  shl    $0x18,%eax
  mov    %eax,%ecx
  mov    $0xc1108400,%eax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    -0xc(%rbp),%eax
  shl    $0x5,%eax
  mov    %eax,%ecx
  mov    $0xc1108400,%eax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    $0xc1108410,%eax
  mov    (%rax),%edx
  mov    $0xc1108410,%eax
  or     $0x800000,%edx
  mov    %edx,(%rax)
  mov    $0xc1108410,%eax
  mov    (%rax),%edx
  mov    $0xc1108410,%eax
  or     $0x1000000,%edx
  mov    %edx,(%rax)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x1,%dh
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L91:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L91
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x20000,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L42:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L42
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfffdffff,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L10:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L10
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x40000,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L105:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L105
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfffbffff,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L55:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L55
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x80000,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L57:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L57
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfff7ffff,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L75:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L75
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x1,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L68:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L68
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfffffffe,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L29:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L29
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void set_usb_phy_config(int cfg) {
  int divider = 0;
  int clk_sel = 0;
  int i;
  int time_dly = 500;
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((7 << 5)))));
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((0x7f << 24)))));
  if (cfg == 0) {
    clk_sel = 1;
    divider = 0;
  } else {
    clk_sel = 3;
    divider = 49;
  }
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((divider << 24))));
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((clk_sel << 5))));
  *(volatile unsigned *)(0xc1100000 + ((0x2104) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2104) << 2))) | ((1 << 23))));
  *(volatile unsigned *)(0xc1100000 + ((0x2104) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2104) << 2))) | ((1 << 24))));
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 8))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 17))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 17)))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 18))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 18)))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 19))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 19)))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 0))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 0)))));
  i = 0;
  while (i++ < time_dly) {
  };
}
```