user: Please show me the C implementation that matches the assembly code listed below:

```asm
<romanToInt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L203
L42:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x49,%al
  jne    L147
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L154
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x56,%al
  jne    L40
  addl   $0x4,-0x14(%rbp)
  addq   $0x1,-0x10(%rbp)
  jmp    L126
L40:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x58,%al
  jne    L46
  addl   $0x9,-0x14(%rbp)
  addq   $0x1,-0x10(%rbp)
  jmp    L126
L46:
  addl   $0x1,-0x14(%rbp)
  jmp    L126
L154:
  addl   $0x1,-0x14(%rbp)
  jmp    L126
L147:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x58,%al
  jne    L151
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L248
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x4c,%al
  jne    L316
  addl   $0x28,-0x14(%rbp)
  addq   $0x1,-0x10(%rbp)
  jmp    L126
L316:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  jne    L193
  addl   $0x5a,-0x14(%rbp)
  addq   $0x1,-0x10(%rbp)
  jmp    L126
L193:
  addl   $0xa,-0x14(%rbp)
  jmp    L126
L248:
  addl   $0xa,-0x14(%rbp)
  jmp    L126
L151:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  jne    L132
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L265
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x44,%al
  jne    L264
  addl   $0x190,-0x14(%rbp)
  addq   $0x1,-0x10(%rbp)
  jmp    L126
L264:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x4d,%al
  jne    L260
  addl   $0x384,-0x14(%rbp)
  addq   $0x1,-0x10(%rbp)
  jmp    L126
L260:
  addl   $0x64,-0x14(%rbp)
  jmp    L126
L265:
  addl   $0x64,-0x14(%rbp)
  jmp    L126
L132:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x56,%al
  jne    L174
  addl   $0x5,-0x14(%rbp)
  jmp    L126
L174:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x4c,%al
  jne    L178
  addl   $0x32,-0x14(%rbp)
  jmp    L126
L178:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x44,%al
  jne    L15
  addl   $0x1f4,-0x14(%rbp)
  jmp    L126
L15:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x4d,%al
  jne    L126
  addl   $0x3e8,-0x14(%rbp)
L126:
  addq   $0x1,-0x10(%rbp)
L203:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L42
  mov    -0x14(%rbp),%eax
  pop    %rbp
  ret
```

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;
}
```