#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ ffc2ii(char *, long *, int *);
scalar_t__ ffc2rr(char *, float *, int *);
int /*<<< orphan*/ ffpmsg(char *);
int /*<<< orphan*/ ffupch(char *);
int /*<<< orphan*/ sprintf(char *, char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
int ffasfm(char *tform, int *dtcode, long *twidth, int *decimals, int *status) {
  int ii, datacode;
  long longval, width;
  float fwidth;
  char *form, temp[71], message[81];
  if (*status > 0)
    return (*status);
  if (dtcode)
    *dtcode = 0;
  if (twidth)
    *twidth = 0;
  if (decimals)
    *decimals = 0;
  ii = 0;
  while (tform[ii] != 0 && tform[ii] == ' ')
    ii++;
  strcpy(temp, &tform[ii]);
  ffupch(temp);
  form = temp;
  if (form[0] == 0) {
    ffpmsg("Error: ASCII table TFORM code is blank");
    return (*status = 261);
  }
  if (form[0] == 'A')
    datacode = 16;
  else if (form[0] == 'I')
    datacode = 41;
  else if (form[0] == 'F')
    datacode = 42;
  else if (form[0] == 'E')
    datacode = 42;
  else if (form[0] == 'D')
    datacode = 82;
  else {
    sprintf(message, "Illegal ASCII table TFORMn datatype: \'%s\'", tform);
    ffpmsg(message);
    return (*status = 262);
  }
  if (dtcode)
    *dtcode = datacode;
  form++;
  if (datacode == 16 || datacode == 41) {
    if (ffc2ii(form, &width, status) <= 0) {
      if (width <= 0) {
        width = 0;
        *status = 261;
      } else {
        if (width <= 4 && datacode == 41)
          datacode = 21;
      }
    }
  } else {
    if (ffc2rr(form, &fwidth, status) <= 0) {
      if (fwidth <= 0.)
        *status = 261;
      else {
        width = (long)fwidth;
        if (width > 7 && *temp == 'F')
          datacode = 82;
        if (width < 10)
          form = form + 1;
        else
          form = form + 2;
        if (form[0] == '.') {
          form++;
          if (ffc2ii(form, &longval, status) <= 0) {
            if (decimals)
              *decimals = longval;
            if (longval >= width)
              *status = 261;
            if (longval > 6 && *temp == 'E')
              datacode = 82;
          }
        }
      }
    }
  }
  if (*status > 0) {
    *status = 261;
    sprintf(message, "Illegal ASCII table TFORMn code: \'%s\'", tform);
    ffpmsg(message);
  }
  if (dtcode)
    *dtcode = datacode;
  if (twidth)
    *twidth = width;
  return (*status);
}


x86 assembly (clang, -O0):
<ffasfm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmpl   $0x0,(%rax)
jle    119a <ffasfm+0x3a>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    15ae <ffasfm+0x44e>
cmpq   $0x0,-0x18(%rbp)
je     11af <ffasfm+0x4f>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     11c5 <ffasfm+0x65>
mov    -0x20(%rbp),%rax
movq   $0x0,(%rax)
cmpq   $0x0,-0x28(%rbp)
je     11da <ffasfm+0x7a>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x101(%rbp)
je     1216 <ffasfm+0xb6>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
sete   %al
mov    %al,-0x101(%rbp)
mov    -0x101(%rbp),%al
test   $0x1,%al
jne    1229 <ffasfm+0xc9>
jmp    1237 <ffasfm+0xd7>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11e1 <ffasfm+0x81>
lea    -0xa0(%rbp),%rdi
mov    -0x10(%rbp),%rsi
movslq -0x34(%rbp),%rax
add    %rax,%rsi
call   1030 <strcpy@plt>
lea    -0xa0(%rbp),%rdi
call   1070 <ffupch@plt>
lea    -0xa0(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1297 <ffasfm+0x137>
lea    0xd84(%rip),%rdi
call   1060 <ffpmsg@plt>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
movl   $0x105,-0x4(%rbp)
jmp    15ae <ffasfm+0x44e>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jne    12b3 <ffasfm+0x153>
movl   $0x10,-0x38(%rbp)
jmp    1370 <ffasfm+0x210>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x49,%eax
jne    12cf <ffasfm+0x16f>
movl   $0x29,-0x38(%rbp)
jmp    136b <ffasfm+0x20b>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jne    12eb <ffasfm+0x18b>
movl   $0x2a,-0x38(%rbp)
jmp    1366 <ffasfm+0x206>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    1307 <ffasfm+0x1a7>
movl   $0x2a,-0x38(%rbp)
jmp    1361 <ffasfm+0x201>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x44,%eax
jne    1323 <ffasfm+0x1c3>
movl   $0x52,-0x38(%rbp)
jmp    135c <ffasfm+0x1fc>
lea    -0x100(%rbp),%rdi
mov    -0x10(%rbp),%rdx
lea    0xcf2(%rip),%rsi
call   1080 <sprintf@plt>
lea    -0x100(%rbp),%rdi
call   1060 <ffpmsg@plt>
mov    -0x30(%rbp),%rax
movl   $0x106,(%rax)
movl   $0x106,-0x4(%rbp)
jmp    15ae <ffasfm+0x44e>
jmp    1361 <ffasfm+0x201>
jmp    1366 <ffasfm+0x206>
jmp    136b <ffasfm+0x20b>
jmp    1370 <ffasfm+0x210>
cmpq   $0x0,-0x18(%rbp)
je     1384 <ffasfm+0x224>
mov    -0x38(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
cmpl   $0x10,-0x38(%rbp)
je     13a4 <ffasfm+0x244>
cmpl   $0x29,-0x38(%rbp)
jne    140c <ffasfm+0x2ac>
mov    -0x58(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    -0x48(%rbp),%rsi
call   1040 <ffc2ii@plt>
cmp    $0x0,%rax
jg     1407 <ffasfm+0x2a7>
cmpq   $0x0,-0x48(%rbp)
jg     13e1 <ffasfm+0x281>
movq   $0x0,-0x48(%rbp)
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
jmp    1402 <ffasfm+0x2a2>
cmpq   $0x4,-0x48(%rbp)
jg     13fd <ffasfm+0x29d>
cmpl   $0x29,-0x38(%rbp)
jne    13fd <ffasfm+0x29d>
movl   $0x15,-0x38(%rbp)
jmp    1402 <ffasfm+0x2a2>
jmp    1407 <ffasfm+0x2a7>
jmp    1541 <ffasfm+0x3e1>
mov    -0x58(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    -0x4c(%rbp),%rsi
call   1050 <ffc2rr@plt>
cmp    $0x0,%rax
jg     153c <ffasfm+0x3dc>
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     144c <ffasfm+0x2ec>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
jmp    1537 <ffasfm+0x3d7>
cvttss2si -0x4c(%rbp),%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x7,-0x48(%rbp)
jle    1478 <ffasfm+0x318>
movsbl -0xa0(%rbp),%eax
cmp    $0x46,%eax
jne    1478 <ffasfm+0x318>
movl   $0x52,-0x38(%rbp)
cmpq   $0xa,-0x48(%rbp)
jge    1494 <ffasfm+0x334>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    14a0 <ffasfm+0x340>
mov    -0x58(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1532 <ffasfm+0x3d2>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    -0x40(%rbp),%rsi
call   1040 <ffc2ii@plt>
cmp    $0x0,%rax
jg     152d <ffasfm+0x3cd>
cmpq   $0x0,-0x28(%rbp)
je     14ee <ffasfm+0x38e>
mov    -0x40(%rbp),%rax
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%rax
cmp    -0x48(%rbp),%rax
jl     1506 <ffasfm+0x3a6>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
cmpq   $0x6,-0x40(%rbp)
jle    1528 <ffasfm+0x3c8>
movsbl -0xa0(%rbp),%eax
cmp    $0x45,%eax
jne    1528 <ffasfm+0x3c8>
movl   $0x52,-0x38(%rbp)
jmp    152d <ffasfm+0x3cd>
jmp    1532 <ffasfm+0x3d2>
jmp    1537 <ffasfm+0x3d7>
jmp    153c <ffasfm+0x3dc>
jmp    1541 <ffasfm+0x3e1>
mov    -0x30(%rbp),%rax
cmpl   $0x0,(%rax)
jle    157b <ffasfm+0x41b>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
lea    -0x100(%rbp),%rdi
mov    -0x10(%rbp),%rdx
lea    0xae7(%rip),%rsi
call   1080 <sprintf@plt>
lea    -0x100(%rbp),%rdi
call   1060 <ffpmsg@plt>
cmpq   $0x0,-0x18(%rbp)
je     158f <ffasfm+0x42f>
mov    -0x38(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     15a5 <ffasfm+0x445>
mov    -0x48(%rbp),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffasfm>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
mov    (%r8),%eax
test   %eax,%eax
jg     12fa <ffasfm+0x19a>
mov    %r8,%r12
mov    %rcx,%r13
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
test   %rsi,%rsi
je     1197 <ffasfm+0x37>
movl   $0x0,(%r15)
test   %r14,%r14
je     11a3 <ffasfm+0x43>
movq   $0x0,(%r14)
test   %r13,%r13
je     11b0 <ffasfm+0x50>
movl   $0x0,0x0(%r13)
mov    $0xffffffffffffffff,%rax
nopw   0x0(%rax,%rax,1)
cmpb   $0x20,0x1(%rbx,%rax,1)
lea    0x1(%rax),%rax
je     11c0 <ffasfm+0x60>
mov    %eax,%esi
add    %rbx,%rsi
lea    0x20(%rsp),%rbp
mov    %rbp,%rdi
call   1030 <strcpy@plt>
mov    %rbp,%rdi
call   1070 <ffupch@plt>
mov    0x20(%rsp),%al
lea    -0x41(%rax),%ecx
cmp    $0x8,%cl
ja     1214 <ffasfm+0xb4>
mov    $0x10,%esi
mov    $0x1,%al
xor    %ebp,%ebp
movzbl %cl,%ecx
lea    0xdfc(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    $0x2a,%esi
jmp    126c <ffasfm+0x10c>
test   %al,%al
jne    1236 <ffasfm+0xd6>
lea    0xe05(%rip),%rdi
call   1060 <ffpmsg@plt>
movl   $0x105,(%r12)
mov    $0x105,%eax
jmp    12fa <ffasfm+0x19a>
lea    0xe0e(%rip),%rsi
lea    0x70(%rsp),%rbp
mov    %rbp,%rdi
mov    %rbx,%rdx
call   1080 <sprintf@plt>
mov    %rbp,%rdi
call   1060 <ffpmsg@plt>
movl   $0x106,(%r12)
mov    $0x106,%eax
jmp    12fa <ffasfm+0x19a>
mov    $0x52,%esi
xor    %eax,%eax
xor    %ebp,%ebp
test   %r15,%r15
je     1278 <ffasfm+0x118>
mov    %esi,(%r15)
mov    %esi,0x4(%rsp)
lea    0x21(%rsp),%rdi
or     %bpl,%al
cmp    $0x1,%al
jne    12c0 <ffasfm+0x160>
lea    0x8(%rsp),%rsi
mov    %r12,%rdx
call   1040 <ffc2ii@plt>
test   %rax,%rax
jg     12d2 <ffasfm+0x172>
mov    0x8(%rsp),%rax
test   %rax,%rax
jle    13d2 <ffasfm+0x272>
cmp    $0x5,%rax
mov    $0x15,%eax
mov    0x4(%rsp),%edx
cmovae %edx,%eax
test   %bpl,%bpl
cmovne %eax,%edx
jmp    12d6 <ffasfm+0x176>
lea    0x14(%rsp),%rsi
mov    %r12,%rdx
call   1050 <ffc2rr@plt>
test   %rax,%rax
jle    1324 <ffasfm+0x1c4>
mov    0x4(%rsp),%edx
cmpl   $0x0,(%r12)
jg     13df <ffasfm+0x27f>
test   %r15,%r15
je     12e9 <ffasfm+0x189>
mov    %edx,(%r15)
test   %r14,%r14
je     12f6 <ffasfm+0x196>
mov    0x8(%rsp),%rax
mov    %rax,(%r14)
mov    (%r12),%eax
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x29,%esi
mov    $0x1,%bpl
xor    %eax,%eax
test   %r15,%r15
jne    1275 <ffasfm+0x115>
jmp    1278 <ffasfm+0x118>
movss  0x14(%rsp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jae    13db <ffasfm+0x27b>
cvttss2si %xmm0,%rbp
cmpb   $0x46,0x20(%rsp)
mov    $0x52,%eax
mov    0x4(%rsp),%edx
cmovne %edx,%eax
cmp    $0x8,%rbp
cmovge %eax,%edx
mov    %rbp,0x8(%rsp)
cmp    $0xa,%rbp
lea    0x22(%rsp),%rcx
lea    0x23(%rsp),%rax
cmovge %rax,%rcx
cmpb   $0x2e,(%rcx)
jne    12d6 <ffasfm+0x176>
mov    %edx,0x4(%rsp)
cmp    $0xa,%rbp
lea    0x24(%rsp),%rdi
cmovl  %rax,%rdi
lea    0x18(%rsp),%rsi
mov    %r12,%rdx
call   1040 <ffc2ii@plt>
test   %rax,%rax
jg     12d2 <ffasfm+0x172>
mov    0x18(%rsp),%rax
test   %r13,%r13
je     13a8 <ffasfm+0x248>
mov    %eax,0x0(%r13)
cmp    %rbp,%rax
mov    0x4(%rsp),%edx
jl     13b9 <ffasfm+0x259>
movl   $0x105,(%r12)
cmpb   $0x45,0x20(%rsp)
mov    $0x52,%ecx
cmovne %edx,%ecx
cmp    $0x7,%rax
cmovge %ecx,%edx
jmp    12d6 <ffasfm+0x176>
movq   $0x0,0x8(%rsp)
mov    0x4(%rsp),%edx
movl   $0x105,(%r12)
mov    %edx,%ebp
lea    0xc85(%rip),%rsi
lea    0x70(%rsp),%r13
mov    %r13,%rdi
mov    %rbx,%rdx
call   1080 <sprintf@plt>
mov    %r13,%rdi
call   1060 <ffpmsg@plt>
mov    %ebp,%edx
test   %r15,%r15
jne    12e6 <ffasfm+0x186>
jmp    12e9 <ffasfm+0x189>

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

LLVM IR (-O2):
@.str = [39 x i8] c"Error: ASCII table TFORM code is blank\00"
@.str.1 = [42 x i8] c"Illegal ASCII table TFORMn datatype: '%s'\00"
@.str.2 = [38 x i8] c"Illegal ASCII table TFORMn code: '%s'\00"
define i32 @ffasfm(i8* %0, i32* writeonly %1, i64* writeonly %2, i32* writeonly %3, i32* %4) {
%6 = alloca i64
%7 = alloca i64
%8 = alloca float
%9 = alloca [71 x i8]
%10 = alloca [81 x i8]
%11 = bitcast i64* %6 to i8*
%12 = bitcast i64* %7 to i8*
%13 = bitcast float* %8 to i8*
%14 = getelementptr inbounds [71 x i8], [71 x i8]* %9, i64 0, i64 0
%15 = getelementptr inbounds [81 x i8], [81 x i8]* %10, i64 0, i64 0
%16 = load i32, i32* %4
%17 = icmp sgt i32 %16, 0
br i1 %17, label %122, label %18
18: ; preds = %5
%19 = icmp eq i32* %1, null
br i1 %19, label %21, label %20
20: ; preds = %18
store i32 0, i32* %1
br label %21
21: ; preds = %20, %18
%22 = icmp eq i64* %2, null
br i1 %22, label %24, label %23
23: ; preds = %21
store i64 0, i64* %2
br label %24
24: ; preds = %23, %21
%25 = icmp eq i32* %3, null
br i1 %25, label %27, label %26
26: ; preds = %24
store i32 0, i32* %3
br label %27
27: ; preds = %26, %24
br label %28
28: ; preds = %27, %28
%29 = phi i64 [ %33, %28 ], [ 0, %27 ]
%30 = getelementptr inbounds i8, i8* %0, i64 %29
%31 = load i8, i8* %30
%32 = icmp eq i8 %31, 32
%33 = add nuw i64 %29, 1
br i1 %32, label %28, label %34
34: ; preds = %28
%35 = and i64 %29, 4294967295
%36 = getelementptr inbounds i8, i8* %0, i64 %35
%37 = call i32 @strcpy(i8* %14, i8* %36)
%38 = call i32 @ffupch(i8* %14)
%39 = load i8, i8* %14
switch i8 %39, label %46 [
i8 0, label %40
i8 65, label %49
i8 73, label %42
i8 70, label %43
i8 69, label %44
i8 68, label %45
]
40: ; preds = %34
%41 = call i32 @ffpmsg(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str, i64 0, i64 0))
store i32 261, i32* %4
br label %122
42: ; preds = %34
br label %49
43: ; preds = %34
br label %49
44: ; preds = %34
br label %49
45: ; preds = %34
br label %49
46: ; preds = %34
%47 = call i32 @sprintf(i8* %15, i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.1, i64 0, i64 0), i8* %0)
%48 = call i32 @ffpmsg(i8* %15)
store i32 262, i32* %4
br label %122
49: ; preds = %34, %42, %44, %45, %43
%50 = phi i1 [ false, %42 ], [ false, %44 ], [ false, %45 ], [ false, %43 ], [ true, %34 ]
%51 = phi i1 [ true, %42 ], [ false, %44 ], [ false, %45 ], [ false, %43 ], [ false, %34 ]
%52 = phi i32 [ 41, %42 ], [ 42, %44 ], [ 82, %45 ], [ 42, %43 ], [ 16, %34 ]
br i1 %19, label %54, label %53
53: ; preds = %49
store i32 %52, i32* %1
br label %54
54: ; preds = %53, %49
%55 = getelementptr inbounds [71 x i8], [71 x i8]* %9, i64 0, i64 1
%56 = or i1 %50, %51
br i1 %56, label %57, label %68
57: ; preds = %54
%58 = call i64 @ffc2ii(i8* %55, i64* %7, i32* %4)
%59 = icmp slt i64 %58, 1
br i1 %59, label %60, label %106
60: ; preds = %57
%61 = load i64, i64* %7
%62 = icmp slt i64 %61, 1
br i1 %62, label %63, label %64
63: ; preds = %60
store i64 0, i64* %7
br label %110
64: ; preds = %60
%65 = icmp ult i64 %61, 5
%66 = and i1 %51, %65
%67 = select i1 %66, i32 21, i32 %52
br label %106
68: ; preds = %54
%69 = call i64 @ffc2rr(i8* %55, float* %8, i32* %4)
%70 = icmp slt i64 %69, 1
br i1 %70, label %71, label %106
71: ; preds = %68
%72 = load float, float* %8
%73 = fcmp ugt float %72, 0.000000e+00
br i1 %73, label %74, label %110
74: ; preds = %71
%75 = fptosi float %72 to i64
store i64 %75, i64* %7
%76 = icmp sgt i64 %75, 7
%77 = load i8, i8* %14
%78 = icmp eq i8 %77, 70
%79 = select i1 %76, i1 %78, i1 false
%80 = select i1 %79, i32 82, i32 %52
%81 = icmp slt i64 %75, 10
%82 = getelementptr inbounds [71 x i8], [71 x i8]* %9, i64 0, i64 2
%83 = getelementptr inbounds [71 x i8], [71 x i8]* %9, i64 0, i64 3
%84 = load i8, i8* %82
%85 = load i8, i8* %83
%86 = select i1 %81, i8 %84, i8 %85
%87 = icmp eq i8 %86, 46
br i1 %87, label %88, label %106
88: ; preds = %74
%89 = getelementptr inbounds [71 x i8], [71 x i8]* %9, i64 0, i64 4
%90 = select i1 %81, i8* %83, i8* %89
%91 = call i64 @ffc2ii(i8* %90, i64* %6, i32* %4)
%92 = icmp slt i64 %91, 1
br i1 %92, label %93, label %106
93: ; preds = %88
%94 = load i64, i64* %6
br i1 %25, label %97, label %95
95: ; preds = %93
%96 = trunc i64 %94 to i32
store i32 %96, i32* %3
br label %97
97: ; preds = %93, %95
%98 = icmp slt i64 %94, %75
br i1 %98, label %100, label %99
99: ; preds = %97
store i32 261, i32* %4
br label %100
100: ; preds = %99, %97
%101 = icmp sgt i64 %94, 6
%102 = load i8, i8* %14
%103 = icmp eq i8 %102, 69
%104 = select i1 %101, i1 %103, i1 false
%105 = select i1 %104, i32 82, i32 %80
br label %106
106: ; preds = %100, %64, %68, %74, %88, %57
%107 = phi i32 [ %105, %100 ], [ %52, %68 ], [ %80, %74 ], [ %80, %88 ], [ %52, %57 ], [ %67, %64 ]
%108 = load i32, i32* %4
%109 = icmp sgt i32 %108, 0
br i1 %109, label %110, label %114
110: ; preds = %71, %63, %106
%111 = phi i32 [ %107, %106 ], [ %52, %63 ], [ %52, %71 ]
store i32 261, i32* %4
%112 = call i32 @sprintf(i8* %15, i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0), i8* %0)
%113 = call i32 @ffpmsg(i8* %15)
br label %114
114: ; preds = %110, %106
%115 = phi i32 [ %111, %110 ], [ %107, %106 ]
br i1 %19, label %117, label %116
116: ; preds = %114
store i32 %115, i32* %1
br label %117
117: ; preds = %116, %114
br i1 %22, label %120, label %118
118: ; preds = %117
%119 = load i64, i64* %7
store i64 %119, i64* %2
br label %120
120: ; preds = %118, %117
%121 = load i32, i32* %4
br label %122
122: ; preds = %5, %120, %46, %40
%123 = phi i32 [ 261, %40 ], [ %121, %120 ], [ 262, %46 ], [ %16, %5 ]
ret i32 %123
}