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

```asm
<set_mux_control>:
  endbr64
  cmp    $0x6,%edi
  ja     L0
  mov    %edi,%edi
  lea    D9(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    0x481ac13c,%eax
  and    $0xff7fffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xfeffffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xffbfffff,%eax
  mov    %eax,0x481ac13c
  ret
  mov    0x481ac13c,%eax
  and    $0xff7fffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xfeffffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x400000,%eax
  mov    %eax,0x481ac13c
  ret
  mov    0x481ac13c,%eax
  and    $0xff7fffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x1000000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xffbfffff,%eax
  mov    %eax,0x481ac13c
  ret
  mov    0x481ac13c,%eax
  and    $0xff7fffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x1000000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x400000,%eax
  mov    %eax,0x481ac13c
  ret
  mov    0x481ac13c,%eax
  or     $0x800000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xfeffffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xffbfffff,%eax
  mov    %eax,0x481ac13c
  ret
  mov    0x481ac13c,%eax
  or     $0x800000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xfeffffff,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x400000,%eax
  mov    %eax,0x481ac13c
  ret
  mov    0x481ac13c,%eax
  or     $0x800000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x1000000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  and    $0xffbfffff,%eax
  mov    %eax,0x481ac13c
  ret
L0:
  mov    0x481ac13c,%eax
  or     $0x800000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x1000000,%eax
  mov    %eax,0x481ac13c
  mov    0x481ac13c,%eax
  or     $0x400000,%eax
  mov    %eax,0x481ac13c
  ret
```

assistant: ```c
void set_mux_control(unsigned int ctl) {
  switch (ctl) {
  case 0:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  case 1:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  case 2:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  case 3:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  case 4:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  case 5:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  case 6:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  default:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  }
}
```