#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*/ snprintf(char *, int, char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(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++;
  if (strlen(&tform[ii]) > 71 - 1) {
    ffpmsg("Error: ASCII table TFORM code is too long (ffasfm)");
    return (*status = 261);
  }
  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 {
    snprintf(message, 81, "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;
    snprintf(message, 81, "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    11aa <ffasfm+0x3a>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1603 <ffasfm+0x493>
cmpq   $0x0,-0x18(%rbp)
je     11bf <ffasfm+0x4f>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     11d5 <ffasfm+0x65>
mov    -0x20(%rbp),%rax
movq   $0x0,(%rax)
cmpq   $0x0,-0x28(%rbp)
je     11ea <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     1226 <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    1239 <ffasfm+0xc9>
jmp    1247 <ffasfm+0xd7>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11f1 <ffasfm+0x81>
mov    -0x10(%rbp),%rdi
movslq -0x34(%rbp),%rax
add    %rax,%rdi
call   1060 <strlen@plt>
cmp    $0x46,%eax
jle    1282 <ffasfm+0x112>
lea    0xd99(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
movl   $0x105,-0x4(%rbp)
jmp    1603 <ffasfm+0x493>
lea    -0xa0(%rbp),%rdi
mov    -0x10(%rbp),%rsi
movslq -0x34(%rbp),%rax
add    %rax,%rsi
call   1030 <strcpy@plt>
lea    -0xa0(%rbp),%rdi
call   1090 <ffupch@plt>
lea    -0xa0(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    12e2 <ffasfm+0x172>
lea    0xd6c(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
movl   $0x105,-0x4(%rbp)
jmp    1603 <ffasfm+0x493>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jne    12fe <ffasfm+0x18e>
movl   $0x10,-0x38(%rbp)
jmp    13c0 <ffasfm+0x250>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x49,%eax
jne    131a <ffasfm+0x1aa>
movl   $0x29,-0x38(%rbp)
jmp    13bb <ffasfm+0x24b>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jne    1336 <ffasfm+0x1c6>
movl   $0x2a,-0x38(%rbp)
jmp    13b6 <ffasfm+0x246>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    1352 <ffasfm+0x1e2>
movl   $0x2a,-0x38(%rbp)
jmp    13b1 <ffasfm+0x241>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x44,%eax
jne    136e <ffasfm+0x1fe>
movl   $0x52,-0x38(%rbp)
jmp    13ac <ffasfm+0x23c>
lea    -0x100(%rbp),%rdi
mov    -0x10(%rbp),%rcx
mov    $0x51,%esi
lea    0xcd5(%rip),%rdx
call   1080 <snprintf@plt>
lea    -0x100(%rbp),%rdi
call   1070 <ffpmsg@plt>
mov    -0x30(%rbp),%rax
movl   $0x106,(%rax)
movl   $0x106,-0x4(%rbp)
jmp    1603 <ffasfm+0x493>
jmp    13b1 <ffasfm+0x241>
jmp    13b6 <ffasfm+0x246>
jmp    13bb <ffasfm+0x24b>
jmp    13c0 <ffasfm+0x250>
cmpq   $0x0,-0x18(%rbp)
je     13d4 <ffasfm+0x264>
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     13f4 <ffasfm+0x284>
cmpl   $0x29,-0x38(%rbp)
jne    145c <ffasfm+0x2ec>
mov    -0x58(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    -0x48(%rbp),%rsi
call   1040 <ffc2ii@plt>
cmp    $0x0,%rax
jg     1457 <ffasfm+0x2e7>
cmpq   $0x0,-0x48(%rbp)
jg     1431 <ffasfm+0x2c1>
movq   $0x0,-0x48(%rbp)
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
jmp    1452 <ffasfm+0x2e2>
cmpq   $0x4,-0x48(%rbp)
jg     144d <ffasfm+0x2dd>
cmpl   $0x29,-0x38(%rbp)
jne    144d <ffasfm+0x2dd>
movl   $0x15,-0x38(%rbp)
jmp    1452 <ffasfm+0x2e2>
jmp    1457 <ffasfm+0x2e7>
jmp    1591 <ffasfm+0x421>
mov    -0x58(%rbp),%rdi
mov    -0x30(%rbp),%rdx
lea    -0x4c(%rbp),%rsi
call   1050 <ffc2rr@plt>
cmp    $0x0,%rax
jg     158c <ffasfm+0x41c>
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     149c <ffasfm+0x32c>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
jmp    1587 <ffasfm+0x417>
cvttss2si -0x4c(%rbp),%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x7,-0x48(%rbp)
jle    14c8 <ffasfm+0x358>
movsbl -0xa0(%rbp),%eax
cmp    $0x46,%eax
jne    14c8 <ffasfm+0x358>
movl   $0x52,-0x38(%rbp)
cmpq   $0xa,-0x48(%rbp)
jge    14e4 <ffasfm+0x374>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    14f0 <ffasfm+0x380>
mov    -0x58(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1582 <ffasfm+0x412>
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     157d <ffasfm+0x40d>
cmpq   $0x0,-0x28(%rbp)
je     153e <ffasfm+0x3ce>
mov    -0x40(%rbp),%rax
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%rax
cmp    -0x48(%rbp),%rax
jl     1556 <ffasfm+0x3e6>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
cmpq   $0x6,-0x40(%rbp)
jle    1578 <ffasfm+0x408>
movsbl -0xa0(%rbp),%eax
cmp    $0x45,%eax
jne    1578 <ffasfm+0x408>
movl   $0x52,-0x38(%rbp)
jmp    157d <ffasfm+0x40d>
jmp    1582 <ffasfm+0x412>
jmp    1587 <ffasfm+0x417>
jmp    158c <ffasfm+0x41c>
jmp    1591 <ffasfm+0x421>
mov    -0x30(%rbp),%rax
cmpl   $0x0,(%rax)
jle    15d0 <ffasfm+0x460>
mov    -0x30(%rbp),%rax
movl   $0x105,(%rax)
lea    -0x100(%rbp),%rdi
mov    -0x10(%rbp),%rcx
mov    $0x51,%esi
lea    0xac5(%rip),%rdx
call   1080 <snprintf@plt>
lea    -0x100(%rbp),%rdi
call   1070 <ffpmsg@plt>
cmpq   $0x0,-0x18(%rbp)
je     15e4 <ffasfm+0x474>
mov    -0x38(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     15fa <ffasfm+0x48a>
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     134f <ffasfm+0x1df>
mov    %r8,%r12
mov    %rcx,%r13
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
test   %rsi,%rsi
je     11a7 <ffasfm+0x37>
movl   $0x0,(%r15)
test   %r14,%r14
je     11b3 <ffasfm+0x43>
movq   $0x0,(%r14)
test   %r13,%r13
je     11c0 <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     11d0 <ffasfm+0x60>
mov    %eax,%ebp
add    %rbx,%rbp
mov    %rbp,%rdi
call   1060 <strlen@plt>
cmp    $0x47,%eax
jl     120b <ffasfm+0x9b>
lea    0xe30(%rip),%rdi
call   1070 <ffpmsg@plt>
movl   $0x105,(%r12)
mov    $0x105,%eax
jmp    134f <ffasfm+0x1df>
mov    %r14,0x10(%rsp)
lea    0x20(%rsp),%r14
mov    %r14,%rdi
mov    %rbp,%rsi
call   1030 <strcpy@plt>
mov    %r14,%rdi
call   1090 <ffupch@plt>
mov    0x20(%rsp),%al
lea    -0x41(%rax),%ecx
cmp    $0x8,%cl
ja     1259 <ffasfm+0xe9>
mov    $0x10,%r14d
mov    $0x1,%al
xor    %ebp,%ebp
movzbl %cl,%ecx
lea    0xdb8(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    $0x2a,%r14d
jmp    12a2 <ffasfm+0x132>
test   %al,%al
jne    1266 <ffasfm+0xf6>
lea    0xdf3(%rip),%rdi
jmp    11f4 <ffasfm+0x84>
lea    0xe11(%rip),%rdx
lea    0x70(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x51,%esi
mov    %rbx,%rcx
call   1080 <snprintf@plt>
mov    %rbp,%rdi
call   1070 <ffpmsg@plt>
movl   $0x106,(%r12)
mov    $0x106,%eax
jmp    134f <ffasfm+0x1df>
mov    $0x52,%r14d
xor    %eax,%eax
xor    %ebp,%ebp
test   %r15,%r15
je     12ae <ffasfm+0x13e>
mov    %r14d,(%r15)
lea    0x21(%rsp),%rdi
or     %bpl,%al
cmp    $0x1,%al
jne    12ed <ffasfm+0x17d>
mov    %rsp,%rsi
mov    %r12,%rdx
call   1040 <ffc2ii@plt>
test   %rax,%rax
jg     12ff <ffasfm+0x18f>
mov    (%rsp),%rax
test   %rax,%rax
jle    141f <ffasfm+0x2af>
cmp    $0x5,%rax
mov    $0x15,%eax
cmovae %r14d,%eax
test   %bpl,%bpl
cmovne %eax,%r14d
jmp    12ff <ffasfm+0x18f>
lea    0xc(%rsp),%rsi
mov    %r12,%rdx
call   1050 <ffc2rr@plt>
test   %rax,%rax
jle    137a <ffasfm+0x20a>
cmpl   $0x0,(%r12)
jle    1332 <ffasfm+0x1c2>
movl   $0x105,(%r12)
lea    0xd93(%rip),%rdx
lea    0x70(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x51,%esi
mov    %rbx,%rcx
call   1080 <snprintf@plt>
mov    %rbp,%rdi
call   1070 <ffpmsg@plt>
test   %r15,%r15
je     133a <ffasfm+0x1ca>
mov    %r14d,(%r15)
mov    0x10(%rsp),%rcx
test   %rcx,%rcx
je     134b <ffasfm+0x1db>
mov    (%rsp),%rax
mov    %rax,(%rcx)
mov    (%r12),%eax
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x29,%r14d
mov    $0x1,%bpl
xor    %eax,%eax
test   %r15,%r15
jne    12ab <ffasfm+0x13b>
jmp    12ae <ffasfm+0x13e>
movss  0xc(%rsp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jae    1306 <ffasfm+0x196>
cvttss2si %xmm0,%rbp
cmpb   $0x46,0x20(%rsp)
mov    $0x52,%eax
cmovne %r14d,%eax
cmp    $0x8,%rbp
cmovge %eax,%r14d
mov    %rbp,(%rsp)
cmp    $0xa,%rbp
lea    0x22(%rsp),%rcx
lea    0x23(%rsp),%rax
cmovge %rax,%rcx
cmpb   $0x2e,(%rcx)
jne    12ff <ffasfm+0x18f>
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     12ff <ffasfm+0x18f>
mov    0x18(%rsp),%rax
test   %r13,%r13
je     13f7 <ffasfm+0x287>
mov    %eax,0x0(%r13)
cmp    %rbp,%rax
jl     1404 <ffasfm+0x294>
movl   $0x105,(%r12)
cmpb   $0x45,0x20(%rsp)
mov    $0x52,%ecx
cmovne %r14d,%ecx
cmp    $0x7,%rax
cmovge %ecx,%r14d
jmp    12ff <ffasfm+0x18f>
movq   $0x0,(%rsp)
jmp    1306 <ffasfm+0x196>

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

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