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

```asm
<xsvfGotoTapState>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  test   %sil,%sil
  je     L424
  mov    %esi,%r13d
  mov    %esi,%r12d
  movzbl (%rdi),%edx
  cmp    %sil,%dl
  je     L473
  cmp    $0x6,%dl
  je     L203
  mov    $0x5,%eax
  cmp    $0x7,%sil
  je     L32
L203:
  cmp    $0xd,%dl
  je     L48
  mov    $0x5,%eax
  cmp    $0xe,%r13b
  je     L32
L48:
  movzbl 0x0(%rbp),%eax
  lea    D9(%rip),%rbx
  jmp    L260
L424:
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x5,%ebx
L153:
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setPort@plt>
  mov    $0x1,%esi
  mov    $0x0,%edi
  call   <setPort@plt>
  sub    $0x1,%ebx
  jne    L153
  movb   $0x0,0x0(%rbp)
  mov    $0x0,%eax
  jmp    L32
L473:
  cmp    $0x6,%sil
  je     L80
  mov    $0x0,%eax
  cmp    $0xd,%sil
  jne    L32
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  movb   $0xe,0x0(%rbp)
  jmp    L48
L80:
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  movb   $0x7,0x0(%rbp)
  jmp    L48
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x1,%eax
L362:
  mov    %al,0x0(%rbp)
  cmp    %r12b,%al
  je     L54
L260:
  cmp    $0xf,%al
  ja     L324
  movzbl %al,%eax
  movslq (%rbx,%rax,4),%rax
  add    %rbx,%rax
  notrack jmp *%rax
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x2,%eax
  jmp    L362
  cmp    $0x8,%r12b
  jbe    L196
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x9,%eax
  jmp    L362
L196:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x3,%eax
  jmp    L362
  cmp    $0x4,%r12b
  je     L62
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x5,%eax
  jmp    L362
L62:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
L25:
  mov    %r13b,0x0(%rbp)
L32:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x5,%eax
  jmp    L362
  cmp    $0x6,%r12b
  je     L189
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x8,%eax
  jmp    L362
L189:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x7,%eax
  jmp    L362
  cmp    $0x4,%r12b
  je     L61
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x8,%eax
  jmp    L362
L61:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
  cmp    $0x1,%r12b
  je     L268
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x2,%eax
  jmp    L362
L268:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0xa,%eax
  jmp    L362
  cmp    $0xb,%r12b
  je     L69
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0xc,%eax
  jmp    L362
L69:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0xc,%eax
  jmp    L362
  cmp    $0xd,%r12b
  je     L71
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0xf,%eax
  jmp    L362
L71:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0xe,%eax
  jmp    L362
  cmp    $0xb,%r12b
  je     L134
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0xf,%eax
  jmp    L362
L134:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
  cmp    $0x1,%r12b
  je     L377
  mov    $0x1,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x2,%eax
  jmp    L362
L377:
  mov    $0x0,%edi
  call   <xsvfTmsTransition@plt>
  mov    $0x0,%eax
  jmp    L25
L54:
  mov    $0x0,%eax
  jmp    L32
L324:
  mov    $0x5,%eax
  jmp    L25
```

assistant: ```c
int xsvfGotoTapState(unsigned char *pucTapState, unsigned char ucTargetState) {
  int i;
  int iErrorCode;
  iErrorCode = 0;
  if (ucTargetState == 0x00) {
    xsvfTmsTransition(1);
    for (i = 0; i < 5; ++i) {
      setPort((short)0, 0);
      setPort((short)0, 1);
    }
    *pucTapState = 0x00;
    ;

    ;
  } else if ((ucTargetState != *pucTapState) && (((ucTargetState == 0x07) && (*pucTapState != 0x06)) || ((ucTargetState == 0x0E) && (*pucTapState != 0x0D)))) {
    iErrorCode = 5;
  } else {
    if (ucTargetState == *pucTapState) {
      if (ucTargetState == 0x06) {
        xsvfTmsTransition(1);
        *pucTapState = 0x07;

        ;
      } else if (ucTargetState == 0x0D) {
        xsvfTmsTransition(1);
        *pucTapState = 0x0E;

        ;
      }
    }
    while (ucTargetState != *pucTapState) {
      switch (*pucTapState) {
      case 0x00:
        xsvfTmsTransition(0);
        *pucTapState = 0x01;
        break;
      case 0x01:
        xsvfTmsTransition(1);
        *pucTapState = 0x02;
        break;
      case 0x02:
        if (ucTargetState >= 0x09) {
          xsvfTmsTransition(1);
          *pucTapState = 0x09;
        } else {
          xsvfTmsTransition(0);
          *pucTapState = 0x03;
        }
        break;
      case 0x03:
        if (ucTargetState == 0x04) {
          xsvfTmsTransition(0);
          *pucTapState = 0x04;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x05;
        }
        break;
      case 0x04:
        xsvfTmsTransition(1);
        *pucTapState = 0x05;
        break;
      case 0x05:
        if (ucTargetState == 0x06) {
          xsvfTmsTransition(0);
          *pucTapState = 0x06;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x08;
        }
        break;
      case 0x06:
        xsvfTmsTransition(1);
        *pucTapState = 0x07;
        break;
      case 0x07:
        if (ucTargetState == 0x04) {
          xsvfTmsTransition(0);
          *pucTapState = 0x04;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x08;
        }
        break;
      case 0x08:
        if (ucTargetState == 0x01) {
          xsvfTmsTransition(0);
          *pucTapState = 0x01;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x02;
        }
        break;
      case 0x09:
        xsvfTmsTransition(0);
        *pucTapState = 0x0A;
        break;
      case 0x0A:
        if (ucTargetState == 0x0B) {
          xsvfTmsTransition(0);
          *pucTapState = 0x0B;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x0C;
        }
        break;
      case 0x0B:
        xsvfTmsTransition(1);
        *pucTapState = 0x0C;
        break;
      case 0x0C:
        if (ucTargetState == 0x0D) {
          xsvfTmsTransition(0);
          *pucTapState = 0x0D;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x0F;
        }
        break;
      case 0x0D:
        xsvfTmsTransition(1);
        *pucTapState = 0x0E;
        break;
      case 0x0E:
        if (ucTargetState == 0x0B) {
          xsvfTmsTransition(0);
          *pucTapState = 0x0B;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x0F;
        }
        break;
      case 0x0F:
        if (ucTargetState == 0x01) {
          xsvfTmsTransition(0);
          *pucTapState = 0x01;
        } else {
          xsvfTmsTransition(1);
          *pucTapState = 0x02;
        }
        break;
      default:
        iErrorCode = 5;
        *pucTapState = ucTargetState;
        break;
      }

      ;
    }
  }
  return (iErrorCode);
}
```