user: What would the C source look like for the assembly code provided here?

```asm
<romanToInt>:
  endbr64
  movzbl (%rdi),%eax
  xor    %r8d,%r8d
  test   %al,%al
  je     L69
  lea    D4(%rip),%rsi
  nopl   0x0(%rax)
L216:
  sub    $0x43,%eax
  movzbl 0x1(%rdi),%edx
  lea    0x1(%rdi),%rcx
  cmp    $0x15,%al
  ja     L60
  movzbl %al,%eax
  movslq (%rsi,%rax,4),%rax
  add    %rsi,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  add    $0x5,%r8d
  nopl   0x0(%rax)
L60:
  mov    %rcx,%rdi
  test   %dl,%dl
  je     L69
L193:
  mov    %edx,%eax
  jmp    L216
  nopw   0x0(%rax,%rax,1)
  test   %dl,%dl
  je     L323
  cmp    $0x4c,%dl
  je     L206
  cmp    $0x43,%dl
  je     L175
  add    $0xa,%r8d
  jmp    L249
  add    $0x3e8,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  add    $0x32,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  nopl   (%rax)
  test   %dl,%dl
  je     L286
  cmp    $0x56,%dl
  je     L301
  cmp    $0x58,%dl
  je     L220
  add    $0x1,%r8d
  jmp    L249
  nopl   0x0(%rax)
  add    $0x1f4,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  test   %dl,%dl
  je     L93
  cmp    $0x44,%dl
  je     L334
  cmp    $0x4d,%dl
  je     L325
  add    $0x64,%r8d
L249:
  mov    %rcx,%rdi
  mov    %edx,%eax
  jmp    L216
  nopl   0x0(%rax)
L93:
  add    $0x64,%r8d
L69:
  mov    %r8d,%eax
  ret
L286:
  add    $0x1,%r8d
  mov    %r8d,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L323:
  add    $0xa,%r8d
  mov    %r8d,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L206:
  movzbl 0x2(%rdi),%edx
  add    $0x1,%rcx
  add    $0x28,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  nopl   0x0(%rax)
L301:
  movzbl 0x2(%rdi),%edx
  add    $0x1,%rcx
  add    $0x4,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  nopl   0x0(%rax)
L334:
  movzbl 0x2(%rdi),%edx
  add    $0x1,%rcx
  add    $0x190,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  nop
L175:
  movzbl 0x2(%rdi),%edx
  add    $0x1,%rcx
  add    $0x5a,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  nopl   0x0(%rax)
L220:
  movzbl 0x2(%rdi),%edx
  add    $0x1,%rcx
  add    $0x9,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
  nopl   0x0(%rax)
L325:
  movzbl 0x2(%rdi),%edx
  add    $0x1,%rcx
  add    $0x384,%r8d
  mov    %rcx,%rdi
  test   %dl,%dl
  jne    L193
  jmp    L69
```

assistant: ```c
int romanToInt(char *s) {
  char *p = s, *np;
  int n = 0;
  while (*p) {
    if (*p == 'I') {
      np = p + 1;
      if (*np) {
        if (*np == 'V') {
          n += 4;
          p++;
        } else if (*np == 'X') {
          n += 9;
          p++;
        } else {
          n += 1;
        }
      } else {
        n += 1;
      }
    } else if (*p == 'X') {
      np = p + 1;
      if (*np) {
        if (*np == 'L') {
          n += 40;
          p++;
        } else if (*np == 'C') {
          n += 90;
          p++;
        } else {
          n += 10;
        }
      } else {
        n += 10;
      }
    } else if (*p == 'C') {
      np = p + 1;
      if (*np) {
        if (*np == 'D') {
          n += 400;
          p++;
        } else if (*np == 'M') {
          n += 900;
          p++;
        } else {
          n += 100;
        }
      } else {
        n += 100;
      }
    } else if (*p == 'V') {
      n += 5;
    } else if (*p == 'L') {
      n += 50;
    } else if (*p == 'D') {
      n += 500;
    } else if (*p == 'M') {
      n += 1000;
    }
    p++;
  }
  return n;
}
```