int BASM_XCallSplitSigSysV(char *sig, char **esig, int *rni, int *rnx,
                           int *rns) {
  char *s;
  int i, j, ni, nx, ns;
  s = sig;
  i = 0;
  ni = 0;
  nx = 0;
  ns = 0;
  if (*s == '(')
    s++;
  while (*s && (*s != ')')) {
    switch (*s++) {
    case 'a':
    case 'b':
    case 'c':
    case 'h':
    case 's':
    case 't':
    case 'w':
    case 'i':
    case 'j':
      if (ni < 6) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'l':
    case 'm':
    case 'x':
    case 'y':
      if (ni < 6) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'r':
      if (ni < 6) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'P':
      if (ni < 6)
        ni++;
      else
        ns++;
      while (*s == 'P')
        s++;
      if ((*s >= 'a') && (*s <= 'z')) {
        s++;
        break;
      }
      if (*s == 'X') {
        while (*s && *s != ';')
          s++;
        if (*s == ';')
          s++;
      }
      break;
    case 'd':
      if (nx < 8) {
        nx++;
        break;
      }
      ns++;
      break;
    case 'e':
      if (nx < 8) {
        nx++;
        break;
      }
      if (ns & 1)
        ns++;
      ns += 2;
      break;
    case 'f':
    case 'k':
      if (nx < 8) {
        nx++;
        break;
      }
      ns++;
      break;
    case 'g':
    case 'n':
    case 'o':
      if (nx < 8) {
        nx++;
        break;
      }
      if (ns & 1)
        ns++;
      ns += 2;
      break;
    case 'C':
      switch (*s++) {
      case 'f':
        i += 8;
        break;
      case 'd':
        i += 16;
        break;
      case 'e':
        i += 32;
        break;
      case 'g':
        i += 32;
        break;
      case 'k':
        i += 4;
        break;
      }
      break;
    case 'G':
      switch (*s++) {
      case 'f':
        i += 4;
        break;
      case 'd':
        i += 8;
        break;
      case 'e':
        i += 12;
        break;
      case 'g':
        i += 16;
        break;
      case 'k':
        i += 4;
        break;
      }
      break;
    default:
      break;
    }
  }
  if (*s && *s == ')')
    s++;
  if (esig)
    *esig = s;
  if (rni)
    *rni = ni;
  if (rnx)
    *rnx = nx;
  if (rns)
    *rns = ns;
  return (i);
}


x86 assembly (clang, -O0):
<BASM_XCallSplitSigSysV>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
jne    1158 <BASM_XCallSplitSigSysV+0x58>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    115d <BASM_XCallSplitSigSysV+0x5d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x45(%rbp)
je     1182 <BASM_XCallSplitSigSysV+0x82>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
setne  %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
test   $0x1,%al
jne    1192 <BASM_XCallSplitSigSysV+0x92>
jmp    1503 <BASM_XCallSplitSigSysV+0x403>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbl (%rax),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x36,%eax
ja     14f9 <BASM_XCallSplitSigSysV+0x3f9>
mov    -0x50(%rbp),%rax
lea    0xe3f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0x6,-0x3c(%rbp)
jge    11e2 <BASM_XCallSplitSigSysV+0xe2>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x6,-0x3c(%rbp)
jge    1208 <BASM_XCallSplitSigSysV+0x108>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x6,-0x3c(%rbp)
jge    122e <BASM_XCallSplitSigSysV+0x12e>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x6,-0x3c(%rbp)
jge    1254 <BASM_XCallSplitSigSysV+0x154>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    125d <BASM_XCallSplitSigSysV+0x15d>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1262 <BASM_XCallSplitSigSysV+0x162>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x50,%eax
jne    1283 <BASM_XCallSplitSigSysV+0x183>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1262 <BASM_XCallSplitSigSysV+0x162>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     12b4 <BASM_XCallSplitSigSysV+0x1b4>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7a,%eax
jg     12b4 <BASM_XCallSplitSigSysV+0x1b4>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    1330 <BASM_XCallSplitSigSysV+0x230>
jmp    12c9 <BASM_XCallSplitSigSysV+0x1c9>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x51(%rbp)
je     12ee <BASM_XCallSplitSigSysV+0x1ee>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
setne  %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    12fe <BASM_XCallSplitSigSysV+0x1fe>
jmp    130f <BASM_XCallSplitSigSysV+0x20f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    12c9 <BASM_XCallSplitSigSysV+0x1c9>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    132b <BASM_XCallSplitSigSysV+0x22b>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1330 <BASM_XCallSplitSigSysV+0x230>
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x8,-0x40(%rbp)
jge    134d <BASM_XCallSplitSigSysV+0x24d>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x8,-0x40(%rbp)
jge    1373 <BASM_XCallSplitSigSysV+0x273>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     138b <BASM_XCallSplitSigSysV+0x28b>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x8,-0x40(%rbp)
jge    13b1 <BASM_XCallSplitSigSysV+0x2b1>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
cmpl   $0x8,-0x40(%rbp)
jge    13d7 <BASM_XCallSplitSigSysV+0x2d7>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x44(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     13ef <BASM_XCallSplitSigSysV+0x2ef>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x44(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbl (%rax),%eax
add    $0xffffff9c,%eax
mov    %eax,%ecx
mov    %rcx,-0x60(%rbp)
sub    $0x7,%eax
ja     1476 <BASM_XCallSplitSigSysV+0x376>
mov    -0x60(%rbp),%rax
lea    0xcd0(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x34(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x34(%rbp)
jmp    1476 <BASM_XCallSplitSigSysV+0x376>
mov    -0x34(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x34(%rbp)
jmp    1476 <BASM_XCallSplitSigSysV+0x376>
mov    -0x34(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x34(%rbp)
jmp    1476 <BASM_XCallSplitSigSysV+0x376>
mov    -0x34(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x34(%rbp)
jmp    1476 <BASM_XCallSplitSigSysV+0x376>
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbl (%rax),%eax
add    $0xffffff9c,%eax
mov    %eax,%ecx
mov    %rcx,-0x68(%rbp)
sub    $0x7,%eax
ja     14f4 <BASM_XCallSplitSigSysV+0x3f4>
mov    -0x68(%rbp),%rax
lea    0xc32(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    14f4 <BASM_XCallSplitSigSysV+0x3f4>
mov    -0x34(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x34(%rbp)
jmp    14f4 <BASM_XCallSplitSigSysV+0x3f4>
mov    -0x34(%rbp),%eax
add    $0xc,%eax
mov    %eax,-0x34(%rbp)
jmp    14f4 <BASM_XCallSplitSigSysV+0x3f4>
mov    -0x34(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x34(%rbp)
jmp    14f4 <BASM_XCallSplitSigSysV+0x3f4>
mov    -0x34(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
jmp    14fe <BASM_XCallSplitSigSysV+0x3fe>
jmp    115d <BASM_XCallSplitSigSysV+0x5d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     152f <BASM_XCallSplitSigSysV+0x42f>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
jne    152f <BASM_XCallSplitSigSysV+0x42f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     1545 <BASM_XCallSplitSigSysV+0x445>
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
cmpq   $0x0,-0x18(%rbp)
je     1559 <BASM_XCallSplitSigSysV+0x459>
mov    -0x3c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     156d <BASM_XCallSplitSigSysV+0x46d>
mov    -0x40(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,-0x28(%rbp)
je     1581 <BASM_XCallSplitSigSysV+0x481>
mov    -0x44(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x34(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<BASM_XCallSplitSigSysV>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %r12d,%r12d
cmpb   $0x28,(%rdi)
sete   %r12b
add    %rdi,%r12
xor    %eax,%eax
lea    0xee0(%rip),%r11
lea    0xfd5(%rip),%r14
lea    0xfae(%rip),%r15
xor    %r13d,%r13d
xor    %r9d,%r9d
xor    %r10d,%r10d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x1,%r10d
nopl   (%rax)
mov    %r12,%rbx
movsbl (%r12),%edi
test   %edi,%edi
je     1306 <BASM_XCallSplitSigSysV+0x206>
cmp    $0x29,%dil
je     1306 <BASM_XCallSplitSigSysV+0x206>
lea    0x1(%rbx),%r12
add    $0xffffffbd,%edi
cmp    $0x36,%edi
ja     1140 <BASM_XCallSplitSigSysV+0x40>
movslq (%r11,%rdi,4),%rdi
add    %r11,%rdi
jmp    *%rdi
cmp    $0x5,%r13d
jg     1139 <BASM_XCallSplitSigSysV+0x39>
add    $0x1,%r13d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
cmp    $0x5,%r13d
jg     11a7 <BASM_XCallSplitSigSysV+0xa7>
add    $0x1,%r13d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
cmp    $0x7,%r9d
jg     1292 <BASM_XCallSplitSigSysV+0x192>
add    $0x1,%r9d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
cmp    $0x7,%r9d
jg     12b3 <BASM_XCallSplitSigSysV+0x1b3>
add    $0x1,%r9d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x1,%r10d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
movsbl 0x1(%rbx),%edi
mov    %rbx,%r12
add    $0x2,%r12
add    $0xffffff9c,%edi
cmp    $0x7,%edi
ja     1140 <BASM_XCallSplitSigSysV+0x40>
movslq (%r14,%rdi,4),%rdi
add    %r14,%rdi
jmp    *%rdi
add    $0x20,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
movsbl 0x1(%rbx),%edi
mov    %rbx,%r12
add    $0x2,%r12
add    $0xffffff9c,%edi
cmp    $0x7,%edi
ja     1140 <BASM_XCallSplitSigSysV+0x40>
movslq (%r15,%rdi,4),%rdi
add    %r15,%rdi
jmp    *%rdi
add    $0x8,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
xor    %ebx,%ebx
xor    %ebp,%ebp
cmp    $0x6,%r13d
setge  %bl
setl   %bpl
nopl   0x0(%rax,%rax,1)
movzbl (%r12),%edi
add    $0x1,%r12
cmp    $0x50,%dil
je     1210 <BASM_XCallSplitSigSysV+0x110>
add    %ebp,%r13d
add    %ebx,%r10d
lea    -0x61(%rdi),%ebx
cmp    $0x1a,%bl
jb     1140 <BASM_XCallSplitSigSysV+0x40>
add    $0xffffffffffffffff,%r12
cmp    $0x58,%dil
jne    1140 <BASM_XCallSplitSigSysV+0x40>
mov    $0x58,%bl
test   %bl,%bl
je     1263 <BASM_XCallSplitSigSysV+0x163>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x3b,%bl
je     1263 <BASM_XCallSplitSigSysV+0x163>
movzbl 0x1(%r12),%ebx
add    $0x1,%r12
test   %bl,%bl
jne    1250 <BASM_XCallSplitSigSysV+0x150>
xor    %edi,%edi
cmp    $0x3b,%bl
sete   %dil
add    %rdi,%r12
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
cmp    $0x7,%r9d
jg     12bc <BASM_XCallSplitSigSysV+0x1bc>
add    $0x1,%r9d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
cmp    $0x7,%r9d
jg     1292 <BASM_XCallSplitSigSysV+0x192>
add    $0x1,%r9d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
mov    %r10d,%edi
and    $0x1,%edi
add    %edi,%r10d
add    $0x2,%r10d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
cmp    $0x5,%r13d
jg     12c5 <BASM_XCallSplitSigSysV+0x1c5>
add    $0x1,%r13d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x1,%r10d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x1,%r10d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x1,%r10d
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x10,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x8,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x4,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0xc,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x4,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x10,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
add    $0x4,%eax
jmp    1140 <BASM_XCallSplitSigSysV+0x40>
test   %rsi,%rsi
je     131b <BASM_XCallSplitSigSysV+0x21b>
xor    %ebp,%ebp
cmp    $0x29,%dil
sete   %bpl
add    %rbp,%rbx
mov    %rbx,(%rsi)
test   %rdx,%rdx
je     1323 <BASM_XCallSplitSigSysV+0x223>
mov    %r13d,(%rdx)
test   %rcx,%rcx
je     132b <BASM_XCallSplitSigSysV+0x22b>
mov    %r9d,(%rcx)
test   %r8,%r8
je     1333 <BASM_XCallSplitSigSysV+0x233>
mov    %r10d,(%r8)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @BASM_XCallSplitSigSysV(i8* %0, i8** %1, i32* %2, i32* %3, i32* %4) {
%6 = alloca i8*
%7 = alloca i8**
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca i8*
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
store i8* %0, i8** %6
store i8** %1, i8*** %7
store i32* %2, i32** %8
store i32* %3, i32** %9
store i32* %4, i32** %10
%17 = load i8*, i8** %6
store i8* %17, i8** %11
store i32 0, i32* %12
store i32 0, i32* %14
store i32 0, i32* %15
store i32 0, i32* %16
%18 = load i8*, i8** %11
%19 = load i8, i8* %18
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 40
br i1 %21, label %22, label %25
22: ; preds = %5
%23 = load i8*, i8** %11
%24 = getelementptr inbounds i8, i8* %23, i32 1
store i8* %24, i8** %11
br label %25
25: ; preds = %22, %5
br label %26
26: ; preds = %225, %25
%27 = load i8*, i8** %11
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp ne i32 %29, 0
br i1 %30, label %31, label %36
31: ; preds = %26
%32 = load i8*, i8** %11
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp ne i32 %34, 41
br label %36
36: ; preds = %31, %26
%37 = phi i1 [ false, %26 ], [ %35, %31 ]
br i1 %37, label %38, label %226
38: ; preds = %36
%39 = load i8*, i8** %11
%40 = getelementptr inbounds i8, i8* %39, i32 1
store i8* %40, i8** %11
%41 = load i8, i8* %39
%42 = sext i8 %41 to i32
switch i32 %42, label %224 [
i32 97, label %43
i32 98, label %43
i32 99, label %43
i32 104, label %43
i32 115, label %43
i32 116, label %43
i32 119, label %43
i32 105, label %43
i32 106, label %43
i32 108, label %52
i32 109, label %52
i32 120, label %52
i32 121, label %52
i32 114, label %61
i32 80, label %70
i32 100, label %132
i32 101, label %141
i32 102, label %157
i32 107, label %157
i32 103, label %166
i32 110, label %166
i32 111, label %166
i32 67, label %182
i32 71, label %203
]
43: ; preds = %38, %38, %38, %38, %38, %38, %38, %38, %38
%44 = load i32, i32* %14
%45 = icmp slt i32 %44, 6
br i1 %45, label %46, label %49
46: ; preds = %43
%47 = load i32, i32* %14
%48 = add nsw i32 %47, 1
store i32 %48, i32* %14
br label %225
49: ; preds = %43
%50 = load i32, i32* %16
%51 = add nsw i32 %50, 1
store i32 %51, i32* %16
br label %225
52: ; preds = %38, %38, %38, %38
%53 = load i32, i32* %14
%54 = icmp slt i32 %53, 6
br i1 %54, label %55, label %58
55: ; preds = %52
%56 = load i32, i32* %14
%57 = add nsw i32 %56, 1
store i32 %57, i32* %14
br label %225
58: ; preds = %52
%59 = load i32, i32* %16
%60 = add nsw i32 %59, 1
store i32 %60, i32* %16
br label %225
61: ; preds = %38
%62 = load i32, i32* %14
%63 = icmp slt i32 %62, 6
br i1 %63, label %64, label %67
64: ; preds = %61
%65 = load i32, i32* %14
%66 = add nsw i32 %65, 1
store i32 %66, i32* %14
br label %225
67: ; preds = %61
%68 = load i32, i32* %16
%69 = add nsw i32 %68, 1
store i32 %69, i32* %16
br label %225
70: ; preds = %38
%71 = load i32, i32* %14
%72 = icmp slt i32 %71, 6
br i1 %72, label %73, label %76
73: ; preds = %70
%74 = load i32, i32* %14
%75 = add nsw i32 %74, 1
store i32 %75, i32* %14
br label %79
76: ; preds = %70
%77 = load i32, i32* %16
%78 = add nsw i32 %77, 1
store i32 %78, i32* %16
br label %79
79: ; preds = %76, %73
br label %80
80: ; preds = %85, %79
%81 = load i8*, i8** %11
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = icmp eq i32 %83, 80
br i1 %84, label %85, label %88
85: ; preds = %80
%86 = load i8*, i8** %11
%87 = getelementptr inbounds i8, i8* %86, i32 1
store i8* %87, i8** %11
br label %80
88: ; preds = %80
%89 = load i8*, i8** %11
%90 = load i8, i8* %89
%91 = sext i8 %90 to i32
%92 = icmp sge i32 %91, 97
br i1 %92, label %93, label %101
93: ; preds = %88
%94 = load i8*, i8** %11
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = icmp sle i32 %96, 122
br i1 %97, label %98, label %101
98: ; preds = %93
%99 = load i8*, i8** %11
%100 = getelementptr inbounds i8, i8* %99, i32 1
store i8* %100, i8** %11
br label %225
101: ; preds = %93, %88
%102 = load i8*, i8** %11
%103 = load i8, i8* %102
%104 = sext i8 %103 to i32
%105 = icmp eq i32 %104, 88
br i1 %105, label %106, label %131
106: ; preds = %101
br label %107
107: ; preds = %119, %106
%108 = load i8*, i8** %11
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = icmp ne i32 %110, 0
br i1 %111, label %112, label %117
112: ; preds = %107
%113 = load i8*, i8** %11
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp ne i32 %115, 59
br label %117
117: ; preds = %112, %107
%118 = phi i1 [ false, %107 ], [ %116, %112 ]
br i1 %118, label %119, label %122
119: ; preds = %117
%120 = load i8*, i8** %11
%121 = getelementptr inbounds i8, i8* %120, i32 1
store i8* %121, i8** %11
br label %107
122: ; preds = %117
%123 = load i8*, i8** %11
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = icmp eq i32 %125, 59
br i1 %126, label %127, label %130
127: ; preds = %122
%128 = load i8*, i8** %11
%129 = getelementptr inbounds i8, i8* %128, i32 1
store i8* %129, i8** %11
br label %130
130: ; preds = %127, %122
br label %131
131: ; preds = %130, %101
br label %225
132: ; preds = %38
%133 = load i32, i32* %15
%134 = icmp slt i32 %133, 8
br i1 %134, label %135, label %138
135: ; preds = %132
%136 = load i32, i32* %15
%137 = add nsw i32 %136, 1
store i32 %137, i32* %15
br label %225
138: ; preds = %132
%139 = load i32, i32* %16
%140 = add nsw i32 %139, 1
store i32 %140, i32* %16
br label %225
141: ; preds = %38
%142 = load i32, i32* %15
%143 = icmp slt i32 %142, 8
br i1 %143, label %144, label %147
144: ; preds = %141
%145 = load i32, i32* %15
%146 = add nsw i32 %145, 1
store i32 %146, i32* %15
br label %225
147: ; preds = %141
%148 = load i32, i32* %16
%149 = and i32 %148, 1
%150 = icmp ne i32 %149, 0
br i1 %150, label %151, label %154
151: ; preds = %147
%152 = load i32, i32* %16
%153 = add nsw i32 %152, 1
store i32 %153, i32* %16
br label %154
154: ; preds = %151, %147
%155 = load i32, i32* %16
%156 = add nsw i32 %155, 2
store i32 %156, i32* %16
br label %225
157: ; preds = %38, %38
%158 = load i32, i32* %15
%159 = icmp slt i32 %158, 8
br i1 %159, label %160, label %163
160: ; preds = %157
%161 = load i32, i32* %15
%162 = add nsw i32 %161, 1
store i32 %162, i32* %15
br label %225
163: ; preds = %157
%164 = load i32, i32* %16
%165 = add nsw i32 %164, 1
store i32 %165, i32* %16
br label %225
166: ; preds = %38, %38, %38
%167 = load i32, i32* %15
%168 = icmp slt i32 %167, 8
br i1 %168, label %169, label %172
169: ; preds = %166
%170 = load i32, i32* %15
%171 = add nsw i32 %170, 1
store i32 %171, i32* %15
br label %225
172: ; preds = %166
%173 = load i32, i32* %16
%174 = and i32 %173, 1
%175 = icmp ne i32 %174, 0
br i1 %175, label %176, label %179
176: ; preds = %172
%177 = load i32, i32* %16
%178 = add nsw i32 %177, 1
store i32 %178, i32* %16
br label %179
179: ; preds = %176, %172
%180 = load i32, i32* %16
%181 = add nsw i32 %180, 2
store i32 %181, i32* %16
br label %225
182: ; preds = %38
%183 = load i8*, i8** %11
%184 = getelementptr inbounds i8, i8* %183, i32 1
store i8* %184, i8** %11
%185 = load i8, i8* %183
%186 = sext i8 %185 to i32
switch i32 %186, label %202 [
i32 102, label %187
i32 100, label %190
i32 101, label %193
i32 103, label %196
i32 107, label %199
]
187: ; preds = %182
%188 = load i32, i32* %12
%189 = add nsw i32 %188, 8
store i32 %189, i32* %12
br label %202
190: ; preds = %182
%191 = load i32, i32* %12
%192 = add nsw i32 %191, 16
store i32 %192, i32* %12
br label %202
193: ; preds = %182
%194 = load i32, i32* %12
%195 = add nsw i32 %194, 32
store i32 %195, i32* %12
br label %202
196: ; preds = %182
%197 = load i32, i32* %12
%198 = add nsw i32 %197, 32
store i32 %198, i32* %12
br label %202
199: ; preds = %182
%200 = load i32, i32* %12
%201 = add nsw i32 %200, 4
store i32 %201, i32* %12
br label %202
202: ; preds = %182, %199, %196, %193, %190, %187
br label %225
203: ; preds = %38
%204 = load i8*, i8** %11
%205 = getelementptr inbounds i8, i8* %204, i32 1
store i8* %205, i8** %11
%206 = load i8, i8* %204
%207 = sext i8 %206 to i32
switch i32 %207, label %223 [
i32 102, label %208
i32 100, label %211
i32 101, label %214
i32 103, label %217
i32 107, label %220
]
208: ; preds = %203
%209 = load i32, i32* %12
%210 = add nsw i32 %209, 4
store i32 %210, i32* %12
br label %223
211: ; preds = %203
%212 = load i32, i32* %12
%213 = add nsw i32 %212, 8
store i32 %213, i32* %12
br label %223
214: ; preds = %203
%215 = load i32, i32* %12
%216 = add nsw i32 %215, 12
store i32 %216, i32* %12
br label %223
217: ; preds = %203
%218 = load i32, i32* %12
%219 = add nsw i32 %218, 16
store i32 %219, i32* %12
br label %223
220: ; preds = %203
%221 = load i32, i32* %12
%222 = add nsw i32 %221, 4
store i32 %222, i32* %12
br label %223
223: ; preds = %203, %220, %217, %214, %211, %208
br label %225
224: ; preds = %38
br label %225
225: ; preds = %224, %223, %202, %179, %169, %163, %160, %154, %144, %138, %135, %131, %98, %67, %64, %58, %55, %49, %46
br label %26
226: ; preds = %36
%227 = load i8*, i8** %11
%228 = load i8, i8* %227
%229 = sext i8 %228 to i32
%230 = icmp ne i32 %229, 0
br i1 %230, label %231, label %239
231: ; preds = %226
%232 = load i8*, i8** %11
%233 = load i8, i8* %232
%234 = sext i8 %233 to i32
%235 = icmp eq i32 %234, 41
br i1 %235, label %236, label %239
236: ; preds = %231
%237 = load i8*, i8** %11
%238 = getelementptr inbounds i8, i8* %237, i32 1
store i8* %238, i8** %11
br label %239
239: ; preds = %236, %231, %226
%240 = load i8**, i8*** %7
%241 = icmp ne i8** %240, null
br i1 %241, label %242, label %245
242: ; preds = %239
%243 = load i8*, i8** %11
%244 = load i8**, i8*** %7
store i8* %243, i8** %244
br label %245
245: ; preds = %242, %239
%246 = load i32*, i32** %8
%247 = icmp ne i32* %246, null
br i1 %247, label %248, label %251
248: ; preds = %245
%249 = load i32, i32* %14
%250 = load i32*, i32** %8
store i32 %249, i32* %250
br label %251
251: ; preds = %248, %245
%252 = load i32*, i32** %9
%253 = icmp ne i32* %252, null
br i1 %253, label %254, label %257
254: ; preds = %251
%255 = load i32, i32* %15
%256 = load i32*, i32** %9
store i32 %255, i32* %256
br label %257
257: ; preds = %254, %251
%258 = load i32*, i32** %10
%259 = icmp ne i32* %258, null
br i1 %259, label %260, label %263
260: ; preds = %257
%261 = load i32, i32* %16
%262 = load i32*, i32** %10
store i32 %261, i32* %262
br label %263
263: ; preds = %260, %257
%264 = load i32, i32* %12
ret i32 %264
}

LLVM IR (-O2):
define i32 @BASM_XCallSplitSigSysV(i8* %0, i8** writeonly %1, i32* writeonly %2, i32* writeonly %3, i32* writeonly %4) {
%6 = load i8, i8* %0
%7 = icmp eq i8 %6, 40
%8 = zext i1 %7 to i64
%9 = getelementptr i8, i8* %0, i64 %8
br label %10
10: ; preds = %53, %5
%11 = phi i32 [ 0, %5 ], [ %54, %53 ]
%12 = phi i8* [ %9, %5 ], [ %55, %53 ]
%13 = phi i32 [ 0, %5 ], [ %56, %53 ]
%14 = phi i32 [ 0, %5 ], [ %57, %53 ]
%15 = phi i32 [ 0, %5 ], [ %58, %53 ]
%16 = load i8, i8* %12
switch i8 %16, label %17 [
i8 0, label %127
i8 41, label %127
]
17: ; preds = %10
%18 = sext i8 %16 to i32
%19 = getelementptr inbounds i8, i8* %12, i64 1
switch i32 %18, label %53 [
i32 97, label %20
i32 98, label %20
i32 99, label %20
i32 104, label %20
i32 115, label %20
i32 116, label %20
i32 119, label %20
i32 105, label %20
i32 106, label %20
i32 108, label %26
i32 109, label %26
i32 120, label %26
i32 121, label %26
i32 114, label %32
i32 80, label %38
i32 100, label %71
i32 101, label %77
i32 102, label %85
i32 107, label %85
i32 103, label %91
i32 110, label %91
i32 111, label %91
i32 67, label %99
i32 71, label %113
]
20: ; preds = %17, %17, %17, %17, %17, %17, %17, %17, %17
%21 = icmp slt i32 %13, 6
br i1 %21, label %22, label %24
22: ; preds = %20
%23 = add nsw i32 %13, 1
br label %53
24: ; preds = %20
%25 = add nsw i32 %15, 1
br label %53
26: ; preds = %17, %17, %17, %17
%27 = icmp slt i32 %13, 6
br i1 %27, label %28, label %30
28: ; preds = %26
%29 = add nsw i32 %13, 1
br label %53
30: ; preds = %26
%31 = add nsw i32 %15, 1
br label %53
32: ; preds = %17
%33 = icmp slt i32 %13, 6
br i1 %33, label %34, label %36
34: ; preds = %32
%35 = add nsw i32 %13, 1
br label %53
36: ; preds = %32
%37 = add nsw i32 %15, 1
br label %53
38: ; preds = %17
%39 = icmp slt i32 %13, 6
%40 = zext i1 %39 to i32
%41 = xor i1 %39, true
%42 = zext i1 %41 to i32
br label %43
43: ; preds = %43, %38
%44 = phi i8* [ %19, %38 ], [ %47, %43 ]
%45 = load i8, i8* %44
%46 = icmp eq i8 %45, 80
%47 = getelementptr inbounds i8, i8* %44, i64 1
br i1 %46, label %43, label %48
48: ; preds = %43
%49 = add nsw i32 %13, %40
%50 = add nsw i32 %15, %42
%51 = add i8 %45, -97
%52 = icmp ult i8 %51, 26
br i1 %52, label %53, label %59
53: ; preds = %48, %67, %17, %117, %119, %121, %123, %125, %113, %103, %105, %107, %109, %111, %99, %59, %95, %93, %89, %87, %81, %79, %75, %73, %36, %34, %30, %28, %24, %22
%54 = phi i32 [ %11, %17 ], [ %11, %113 ], [ %126, %125 ], [ %124, %123 ], [ %122, %121 ], [ %120, %119 ], [ %118, %117 ], [ %11, %99 ], [ %112, %111 ], [ %110, %109 ], [ %108, %107 ], [ %106, %105 ], [ %104, %103 ], [ %11, %93 ], [ %11, %95 ], [ %11, %87 ], [ %11, %89 ], [ %11, %79 ], [ %11, %81 ], [ %11, %73 ], [ %11, %75 ], [ %11, %59 ], [ %11, %34 ], [ %11, %36 ], [ %11, %28 ], [ %11, %30 ], [ %11, %22 ], [ %11, %24 ], [ %11, %67 ], [ %11, %48 ]
%55 = phi i8* [ %19, %17 ], [ %114, %113 ], [ %114, %125 ], [ %114, %123 ], [ %114, %121 ], [ %114, %119 ], [ %114, %117 ], [ %100, %99 ], [ %100, %111 ], [ %100, %109 ], [ %100, %107 ], [ %100, %105 ], [ %100, %103 ], [ %19, %93 ], [ %19, %95 ], [ %19, %87 ], [ %19, %89 ], [ %19, %79 ], [ %19, %81 ], [ %19, %73 ], [ %19, %75 ], [ %44, %59 ], [ %19, %34 ], [ %19, %36 ], [ %19, %28 ], [ %19, %30 ], [ %19, %22 ], [ %19, %24 ], [ %70, %67 ], [ %47, %48 ]
%56 = phi i32 [ %13, %17 ], [ %13, %113 ], [ %13, %125 ], [ %13, %123 ], [ %13, %121 ], [ %13, %119 ], [ %13, %117 ], [ %13, %99 ], [ %13, %111 ], [ %13, %109 ], [ %13, %107 ], [ %13, %105 ], [ %13, %103 ], [ %13, %93 ], [ %13, %95 ], [ %13, %87 ], [ %13, %89 ], [ %13, %79 ], [ %13, %81 ], [ %13, %73 ], [ %13, %75 ], [ %49, %59 ], [ %35, %34 ], [ %13, %36 ], [ %29, %28 ], [ %13, %30 ], [ %23, %22 ], [ %13, %24 ], [ %49, %67 ], [ %49, %48 ]
%57 = phi i32 [ %14, %17 ], [ %14, %113 ], [ %14, %125 ], [ %14, %123 ], [ %14, %121 ], [ %14, %119 ], [ %14, %117 ], [ %14, %99 ], [ %14, %111 ], [ %14, %109 ], [ %14, %107 ], [ %14, %105 ], [ %14, %103 ], [ %94, %93 ], [ %14, %95 ], [ %88, %87 ], [ %14, %89 ], [ %80, %79 ], [ %14, %81 ], [ %74, %73 ], [ %14, %75 ], [ %14, %59 ], [ %14, %34 ], [ %14, %36 ], [ %14, %28 ], [ %14, %30 ], [ %14, %22 ], [ %14, %24 ], [ %14, %67 ], [ %14, %48 ]
%58 = phi i32 [ %15, %17 ], [ %15, %113 ], [ %15, %125 ], [ %15, %123 ], [ %15, %121 ], [ %15, %119 ], [ %15, %117 ], [ %15, %99 ], [ %15, %111 ], [ %15, %109 ], [ %15, %107 ], [ %15, %105 ], [ %15, %103 ], [ %15, %93 ], [ %98, %95 ], [ %15, %87 ], [ %90, %89 ], [ %15, %79 ], [ %84, %81 ], [ %15, %73 ], [ %76, %75 ], [ %50, %59 ], [ %15, %34 ], [ %37, %36 ], [ %15, %28 ], [ %31, %30 ], [ %15, %22 ], [ %25, %24 ], [ %50, %67 ], [ %50, %48 ]
br label %10
59: ; preds = %48
%60 = icmp eq i8 %45, 88
br i1 %60, label %61, label %53
61: ; preds = %59, %64
%62 = phi i8 [ %66, %64 ], [ 88, %59 ]
%63 = phi i8* [ %65, %64 ], [ %44, %59 ]
switch i8 %62, label %64 [
i8 0, label %67
i8 59, label %67
]
64: ; preds = %61
%65 = getelementptr inbounds i8, i8* %63, i64 1
%66 = load i8, i8* %65
br label %61
67: ; preds = %61, %61
%68 = icmp eq i8 %62, 59
%69 = zext i1 %68 to i64
%70 = getelementptr i8, i8* %63, i64 %69
br label %53
71: ; preds = %17
%72 = icmp slt i32 %14, 8
br i1 %72, label %73, label %75
73: ; preds = %71
%74 = add nsw i32 %14, 1
br label %53
75: ; preds = %71
%76 = add nsw i32 %15, 1
br label %53
77: ; preds = %17
%78 = icmp slt i32 %14, 8
br i1 %78, label %79, label %81
79: ; preds = %77
%80 = add nsw i32 %14, 1
br label %53
81: ; preds = %77
%82 = and i32 %15, 1
%83 = add i32 %15, 2
%84 = add i32 %83, %82
br label %53
85: ; preds = %17, %17
%86 = icmp slt i32 %14, 8
br i1 %86, label %87, label %89
87: ; preds = %85
%88 = add nsw i32 %14, 1
br label %53
89: ; preds = %85
%90 = add nsw i32 %15, 1
br label %53
91: ; preds = %17, %17, %17
%92 = icmp slt i32 %14, 8
br i1 %92, label %93, label %95
93: ; preds = %91
%94 = add nsw i32 %14, 1
br label %53
95: ; preds = %91
%96 = and i32 %15, 1
%97 = add i32 %15, 2
%98 = add i32 %97, %96
br label %53
99: ; preds = %17
%100 = getelementptr inbounds i8, i8* %12, i64 2
%101 = load i8, i8* %19
%102 = sext i8 %101 to i32
switch i32 %102, label %53 [
i32 102, label %103
i32 100, label %105
i32 101, label %107
i32 103, label %109
i32 107, label %111
]
103: ; preds = %99
%104 = add nsw i32 %11, 8
br label %53
105: ; preds = %99
%106 = add nsw i32 %11, 16
br label %53
107: ; preds = %99
%108 = add nsw i32 %11, 32
br label %53
109: ; preds = %99
%110 = add nsw i32 %11, 32
br label %53
111: ; preds = %99
%112 = add nsw i32 %11, 4
br label %53
113: ; preds = %17
%114 = getelementptr inbounds i8, i8* %12, i64 2
%115 = load i8, i8* %19
%116 = sext i8 %115 to i32
switch i32 %116, label %53 [
i32 102, label %117
i32 100, label %119
i32 101, label %121
i32 103, label %123
i32 107, label %125
]
117: ; preds = %113
%118 = add nsw i32 %11, 4
br label %53
119: ; preds = %113
%120 = add nsw i32 %11, 8
br label %53
121: ; preds = %113
%122 = add nsw i32 %11, 12
br label %53
123: ; preds = %113
%124 = add nsw i32 %11, 16
br label %53
125: ; preds = %113
%126 = add nsw i32 %11, 4
br label %53
127: ; preds = %10, %10
%128 = icmp eq i8** %1, null
br i1 %128, label %133, label %129
129: ; preds = %127
%130 = icmp eq i8 %16, 41
%131 = zext i1 %130 to i64
%132 = getelementptr i8, i8* %12, i64 %131
store i8* %132, i8** %1
br label %133
133: ; preds = %129, %127
%134 = icmp eq i32* %2, null
br i1 %134, label %136, label %135
135: ; preds = %133
store i32 %13, i32* %2
br label %136
136: ; preds = %135, %133
%137 = icmp eq i32* %3, null
br i1 %137, label %139, label %138
138: ; preds = %136
store i32 %14, i32* %3
br label %139
139: ; preds = %138, %136
%140 = icmp eq i32* %4, null
br i1 %140, label %142, label %141
141: ; preds = %139
store i32 %15, i32* %4
br label %142
142: ; preds = %141, %139
ret i32 %11
}