#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 */
unsigned char *code_table_3_2_location(unsigned char **);
int fabs(double);
scalar_t__ floor(float);
int /*<<< orphan*/ int_char(int, unsigned char *);
int /*<<< orphan*/ uint_char(int, unsigned char *);
unsigned char *sec3_lc(double lov, double lad, double latin1, double latin2,
                       int proj, int nx, double x0, double dx, int ny,
                       double y0, double dy, unsigned char **old_sec) {
  static unsigned char gds[81];
  int i;
  unsigned char *p;
  float SP_lat;
  if (x0 < 0)
    x0 += 360.0;
  uint_char(81, gds);
  gds[4] = 3;
  gds[5] = 0;
  uint_char(nx * ny, gds + 6);
  gds[10] = 0;
  gds[11] = 0;
  gds[12] = 0;
  gds[13] = 30;
  if (old_sec == NULL) {
    gds[14] = 6;
    gds[15] = 0;
    uint_char(0, gds + 16);
    gds[20] = 0;
    uint_char(0, gds + 21);
    gds[25] = 0;
    uint_char(0, gds + 26);
  } else {
    p = code_table_3_2_location(old_sec);
    for (i = 0; i < 16; i++)
      gds[14 + i] = p[i];
  }
  uint_char(nx, gds + 30);
  uint_char(ny, gds + 34);
  int_char((int)floor(y0 * 1.0e6 + 0.5), gds + 38);
  uint_char((int)floor(x0 * 1.0e6 + 0.5), gds + 42);
  gds[46] = 32 + 16;
  int_char((int)floor(lad * 1.0e6 + 0.5), gds + 47);
  uint_char((int)floor(lov * 1.0e6 + 0.5), gds + 51);
  int_char((int)floor(fabs(dx) * 1000. + 0.5), gds + 55);
  int_char((int)floor(fabs(dy) * 1000. + 0.5), gds + 59);
  gds[63] = proj;
  gds[64] = 0;
  if (dx < 0.0)
    gds[64] |= 128;
  if (dy > 0.0)
    gds[64] |= 64;
  int_char((int)floor(latin1 * 1.0e6 + 0.5), gds + 65);
  int_char((int)floor(latin2 * 1.0e6 + 0.5), gds + 69);
  SP_lat = (proj & 128) ? 90.0 : -90.0;
  int_char((int)floor(SP_lat * 1.0e6), gds + 73);
  int_char((int)(0 * 1.0e6), gds + 77);
  return gds;
}


x86 assembly (clang, -O0):
<sec3_lc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %edi,-0x24(%rbp)
mov    %esi,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
mov    %edx,-0x3c(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
mov    %rcx,-0x58(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    11b0 <sec3_lc+0x60>
movsd  0xe5a(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    $0x51,%edi
lea    0x2ea4(%rip),%rsi
call   1030 <uint_char@plt>
movb   $0x3,0x2e9c(%rip)
movb   $0x0,0x2e96(%rip)
mov    -0x28(%rbp),%edi
imul   -0x3c(%rbp),%edi
lea    0x2e83(%rip),%rsi
add    $0x6,%rsi
call   1030 <uint_char@plt>
movb   $0x0,0x2e7d(%rip)
movb   $0x0,0x2e77(%rip)
movb   $0x0,0x2e71(%rip)
movb   $0x1e,0x2e6b(%rip)
cmpq   $0x0,-0x58(%rbp)
jne    1264 <sec3_lc+0x114>
movb   $0x6,0x2e5a(%rip)
movb   $0x0,0x2e54(%rip)
xor    %edi,%edi
lea    0x2e3c(%rip),%rsi
add    $0x10,%rsi
call   1030 <uint_char@plt>
movb   $0x0,0x2e40(%rip)
xor    %edi,%edi
lea    0x2e23(%rip),%rsi
add    $0x15,%rsi
call   1030 <uint_char@plt>
movb   $0x0,0x2e2c(%rip)
xor    %edi,%edi
lea    0x2e0a(%rip),%rsi
add    $0x1a,%rsi
call   1030 <uint_char@plt>
jmp    12b3 <sec3_lc+0x163>
mov    -0x58(%rbp),%rdi
call   1040 <code_table_3_2_location@plt>
mov    %rax,-0x68(%rbp)
movl   $0x0,-0x5c(%rbp)
cmpl   $0x10,-0x5c(%rbp)
jge    12ae <sec3_lc+0x15e>
mov    -0x68(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x5c(%rbp),%eax
add    $0xe,%eax
movslq %eax,%rcx
lea    0x2dc3(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1278 <sec3_lc+0x128>
jmp    12b3 <sec3_lc+0x163>
mov    -0x28(%rbp),%edi
lea    0x2da3(%rip),%rsi
add    $0x1e,%rsi
call   1030 <uint_char@plt>
mov    -0x3c(%rbp),%edi
lea    0x2d90(%rip),%rsi
add    $0x22,%rsi
call   1030 <uint_char@plt>
movsd  -0x48(%rbp),%xmm0
movsd  0xd32(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd1e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2d58(%rip),%rsi
add    $0x26,%rsi
call   1060 <int_char@plt>
movsd  -0x30(%rbp),%xmm0
movsd  0xcfa(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xce6(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2d20(%rip),%rsi
add    $0x2a,%rsi
call   1030 <uint_char@plt>
movb   $0x30,0x2d3e(%rip)
movsd  -0x10(%rbp),%xmm0
movsd  0xcbb(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xca7(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2ce1(%rip),%rsi
add    $0x2f,%rsi
call   1060 <int_char@plt>
movsd  -0x8(%rbp),%xmm0
movsd  0xc83(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc6f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2ca9(%rip),%rsi
add    $0x33,%rsi
call   1030 <uint_char@plt>
movsd  -0x38(%rbp),%xmm0
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc32(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc2e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2c68(%rip),%rsi
add    $0x37,%rsi
call   1060 <int_char@plt>
movsd  -0x50(%rbp),%xmm0
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xbf1(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbed(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2c27(%rip),%rsi
add    $0x3b,%rsi
call   1060 <int_char@plt>
mov    -0x24(%rbp),%eax
mov    %al,0x2c54(%rip)
movb   $0x0,0x2c4e(%rip)
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1472 <sec3_lc+0x322>
movzbl 0x2c39(%rip),%eax
or     $0x80,%eax
mov    %al,0x2c2e(%rip)
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1494 <sec3_lc+0x344>
movzbl 0x2c15(%rip),%eax
or     $0x40,%eax
mov    %al,0x2c0c(%rip)
movsd  -0x18(%rbp),%xmm0
movsd  0xb77(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb63(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2b9d(%rip),%rsi
add    $0x41,%rsi
call   1060 <int_char@plt>
movsd  -0x20(%rbp),%xmm0
movsd  0xb3f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb2b(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2b65(%rip),%rsi
add    $0x45,%rsi
call   1060 <int_char@plt>
mov    -0x24(%rbp),%eax
and    $0x80,%eax
movsd  0xb0c(%rip),%xmm0
movsd  0xb0c(%rip),%xmm1
movsd  %xmm1,-0x80(%rbp)
cmp    $0x0,%eax
movsd  %xmm0,-0x78(%rbp)
jne    1539 <sec3_lc+0x3e9>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xac0(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
mov    %eax,%edi
lea    0x2af2(%rip),%rsi
add    $0x49,%rsi
call   1060 <int_char@plt>
xor    %edi,%edi
lea    0x2ae0(%rip),%rsi
add    $0x4d,%rsi
call   1060 <int_char@plt>
lea    0x2ad0(%rip),%rax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sec3_lc>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x50,%rsp
mov    %rcx,%rbp
movsd  %xmm7,0x8(%rsp)
movsd  %xmm6,0x28(%rsp)
mov    %edx,%r12d
movsd  %xmm5,(%rsp)
movaps %xmm4,0x10(%rsp)
mov    %esi,%ebx
mov    %edi,%r15d
movsd  %xmm3,0x48(%rsp)
movsd  %xmm2,0x40(%rsp)
movsd  %xmm1,0x30(%rsp)
movsd  %xmm0,0x38(%rsp)
lea    0x2ec4(%rip),%rsi
mov    $0x51,%edi
call   1030 <uint_char@plt>
movw   $0x3,0x2eb5(%rip)
mov    %r12d,%edi
imul   %ebx,%edi
lea    0x2eaa(%rip),%rsi
call   1030 <uint_char@plt>
movl   $0x1e000000,0x2e9f(%rip)
test   %rbp,%rbp
je     126d <sec3_lc+0x11d>
mov    %rbp,%rdi
call   1040 <code_table_3_2_location@plt>
mov    (%rax),%cl
mov    %cl,0x2e8a(%rip)
mov    0x1(%rax),%cl
mov    %cl,0x2e82(%rip)
mov    0x2(%rax),%cl
mov    %cl,0x2e7a(%rip)
mov    0x3(%rax),%cl
mov    %cl,0x2e72(%rip)
mov    0x4(%rax),%cl
mov    %cl,0x2e6a(%rip)
mov    0x5(%rax),%cl
mov    %cl,0x2e62(%rip)
mov    0x6(%rax),%cl
mov    %cl,0x2e5a(%rip)
mov    0x7(%rax),%cl
mov    %cl,0x2e52(%rip)
mov    0x8(%rax),%cl
mov    %cl,0x2e4a(%rip)
mov    0x9(%rax),%cl
mov    %cl,0x2e42(%rip)
mov    0xa(%rax),%cl
mov    %cl,0x2e3a(%rip)
mov    0xb(%rax),%cl
mov    %cl,0x2e32(%rip)
mov    0xc(%rax),%cl
mov    %cl,0x2e2a(%rip)
mov    0xd(%rax),%cl
mov    %cl,0x2e22(%rip)
mov    0xe(%rax),%cl
mov    %cl,0x2e1a(%rip)
mov    0xf(%rax),%al
mov    %al,0x2e12(%rip)
jmp    12ae <sec3_lc+0x15e>
movw   $0x6,0x2df8(%rip)
lea    0x2df3(%rip),%rsi
xor    %edi,%edi
call   1030 <uint_char@plt>
movb   $0x0,0x2de9(%rip)
lea    0x2de3(%rip),%rsi
xor    %edi,%edi
call   1030 <uint_char@plt>
movb   $0x0,0x2dd9(%rip)
lea    0x2dd3(%rip),%rsi
xor    %edi,%edi
call   1030 <uint_char@plt>
movsd  0xd4a(%rip),%xmm0
movapd 0x10(%rsp),%xmm2
addsd  %xmm2,%xmm0
xorpd  %xmm1,%xmm1
movapd %xmm2,%xmm3
cmpltsd %xmm1,%xmm3
andpd  %xmm3,%xmm0
andnpd %xmm2,%xmm3
orpd   %xmm0,%xmm3
movapd %xmm3,0x10(%rsp)
lea    0x2d98(%rip),%rsi
mov    %ebx,%edi
call   1030 <uint_char@plt>
lea    0x2d6c(%rip),%r14
lea    0x2d87(%rip),%rsi
mov    %r12d,%edi
call   1030 <uint_char@plt>
movsd  0x28(%rsp),%xmm0
mulsd  0xcf7(%rip),%xmm0
addsd  0xcf7(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2d5d(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
movapd 0x10(%rsp),%xmm0
mulsd  0xcca(%rip),%xmm0
addsd  0xcca(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2d34(%rip),%rsi
mov    %eax,%edi
call   1030 <uint_char@plt>
movb   $0x30,0x2d2a(%rip)
movsd  0x30(%rsp),%xmm0
mulsd  0xc96(%rip),%xmm0
addsd  0xc96(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2d05(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
movsd  0x38(%rsp),%xmm0
mulsd  0xc69(%rip),%xmm0
addsd  0xc69(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2cdc(%rip),%rsi
mov    %eax,%edi
call   1030 <uint_char@plt>
movsd  (%rsp),%xmm0
call   1050 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xc41(%rip),%xmm0
addsd  0xc31(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2ca8(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
movsd  0x8(%rsp),%xmm0
call   1050 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xc08(%rip),%xmm0
addsd  0xbf8(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2c73(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
mov    %r15b,0x2c69(%rip)
xorps  %xmm0,%xmm0
ucomisd (%rsp),%xmm0
seta   %al
shl    $0x7,%al
lea    0x40(%rax),%ecx
movsd  0x8(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movzbl %al,%eax
movzbl %cl,%ecx
cmovbe %eax,%ecx
mov    %cl,0x2c40(%rip)
movsd  0x40(%rsp),%xmm0
mulsd  0xb9a(%rip),%xmm0
addsd  0xb9a(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2c1b(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
movsd  0x48(%rsp),%xmm0
mulsd  0xb6d(%rip),%xmm0
addsd  0xb6d(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <floor@plt>
lea    0x2bf2(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
xor    %eax,%eax
test   $0x80,%r15b
sete   %al
lea    0xb56(%rip),%rcx
movss  (%rcx,%rax,4),%xmm0
call   1070 <floor@plt>
lea    0x2bce(%rip),%rsi
mov    %eax,%edi
call   1060 <int_char@plt>
lea    0x2bc4(%rip),%rsi
xor    %edi,%edi
call   1060 <int_char@plt>
mov    %r14,%rax
add    $0x50,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@sec3_lc.gds = internal global [81 x i8] zeroinitializer
define i8* @sec3_lc(double %0, double %1, double %2, double %3, i32 %4, i32 %5, double %6, double %7, i32 %8, double %9, double %10, i8** %11) {
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca i32
%18 = alloca i32
%19 = alloca double
%20 = alloca double
%21 = alloca i32
%22 = alloca double
%23 = alloca double
%24 = alloca i8**
%25 = alloca i32
%26 = alloca i8*
%27 = alloca float
store double %0, double* %13
store double %1, double* %14
store double %2, double* %15
store double %3, double* %16
store i32 %4, i32* %17
store i32 %5, i32* %18
store double %6, double* %19
store double %7, double* %20
store i32 %8, i32* %21
store double %9, double* %22
store double %10, double* %23
store i8** %11, i8*** %24
%28 = load double, double* %19
%29 = fcmp olt double %28, 0.000000e+00
br i1 %29, label %30, label %33
30: ; preds = %12
%31 = load double, double* %19
%32 = fadd double %31, 3.600000e+02
store double %32, double* %19
br label %33
33: ; preds = %30, %12
%34 = call i32 @uint_char(i32 81, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 0))
store i8 3, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 4)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 5)
%35 = load i32, i32* %18
%36 = load i32, i32* %21
%37 = mul nsw i32 %35, %36
%38 = call i32 @uint_char(i32 %37, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 6))
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 10)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 11)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 12)
store i8 30, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 13)
%39 = load i8**, i8*** %24
%40 = icmp eq i8** %39, null
br i1 %40, label %41, label %45
41: ; preds = %33
store i8 6, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 14)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 15)
%42 = call i32 @uint_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 16))
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 20)
%43 = call i32 @uint_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 21))
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 25)
%44 = call i32 @uint_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 26))
br label %65
45: ; preds = %33
%46 = load i8**, i8*** %24
%47 = call i8* @code_table_3_2_location(i8** %46)
store i8* %47, i8** %26
store i32 0, i32* %25
br label %48
48: ; preds = %61, %45
%49 = load i32, i32* %25
%50 = icmp slt i32 %49, 16
br i1 %50, label %51, label %64
51: ; preds = %48
%52 = load i8*, i8** %26
%53 = load i32, i32* %25
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %52, i64 %54
%56 = load i8, i8* %55
%57 = load i32, i32* %25
%58 = add nsw i32 14, %57
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 %59
store i8 %56, i8* %60
br label %61
61: ; preds = %51
%62 = load i32, i32* %25
%63 = add nsw i32 %62, 1
store i32 %63, i32* %25
br label %48
64: ; preds = %48
br label %65
65: ; preds = %64, %41
%66 = load i32, i32* %18
%67 = call i32 @uint_char(i32 %66, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 30))
%68 = load i32, i32* %21
%69 = call i32 @uint_char(i32 %68, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 34))
%70 = load double, double* %22
%71 = call double @llvm.fmuladd.f64(double %70, double 1.000000e+06, double 5.000000e-01)
%72 = fptrunc double %71 to float
%73 = call i64 @floor(float %72)
%74 = trunc i64 %73 to i32
%75 = call i32 @int_char(i32 %74, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 38))
%76 = load double, double* %19
%77 = call double @llvm.fmuladd.f64(double %76, double 1.000000e+06, double 5.000000e-01)
%78 = fptrunc double %77 to float
%79 = call i64 @floor(float %78)
%80 = trunc i64 %79 to i32
%81 = call i32 @uint_char(i32 %80, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 42))
store i8 48, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 46)
%82 = load double, double* %14
%83 = call double @llvm.fmuladd.f64(double %82, double 1.000000e+06, double 5.000000e-01)
%84 = fptrunc double %83 to float
%85 = call i64 @floor(float %84)
%86 = trunc i64 %85 to i32
%87 = call i32 @int_char(i32 %86, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 47))
%88 = load double, double* %13
%89 = call double @llvm.fmuladd.f64(double %88, double 1.000000e+06, double 5.000000e-01)
%90 = fptrunc double %89 to float
%91 = call i64 @floor(float %90)
%92 = trunc i64 %91 to i32
%93 = call i32 @uint_char(i32 %92, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 51))
%94 = load double, double* %20
%95 = call i32 @fabs(double %94)
%96 = sitofp i32 %95 to double
%97 = call double @llvm.fmuladd.f64(double %96, double 1.000000e+03, double 5.000000e-01)
%98 = fptrunc double %97 to float
%99 = call i64 @floor(float %98)
%100 = trunc i64 %99 to i32
%101 = call i32 @int_char(i32 %100, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 55))
%102 = load double, double* %23
%103 = call i32 @fabs(double %102)
%104 = sitofp i32 %103 to double
%105 = call double @llvm.fmuladd.f64(double %104, double 1.000000e+03, double 5.000000e-01)
%106 = fptrunc double %105 to float
%107 = call i64 @floor(float %106)
%108 = trunc i64 %107 to i32
%109 = call i32 @int_char(i32 %108, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 59))
%110 = load i32, i32* %17
%111 = trunc i32 %110 to i8
store i8 %111, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 63)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 64)
%112 = load double, double* %20
%113 = fcmp olt double %112, 0.000000e+00
br i1 %113, label %114, label %119
114: ; preds = %65
%115 = load i8, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 64)
%116 = zext i8 %115 to i32
%117 = or i32 %116, 128
%118 = trunc i32 %117 to i8
store i8 %118, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 64)
br label %119
119: ; preds = %114, %65
%120 = load double, double* %23
%121 = fcmp ogt double %120, 0.000000e+00
br i1 %121, label %122, label %127
122: ; preds = %119
%123 = load i8, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 64)
%124 = zext i8 %123 to i32
%125 = or i32 %124, 64
%126 = trunc i32 %125 to i8
store i8 %126, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 64)
br label %127
127: ; preds = %122, %119
%128 = load double, double* %15
%129 = call double @llvm.fmuladd.f64(double %128, double 1.000000e+06, double 5.000000e-01)
%130 = fptrunc double %129 to float
%131 = call i64 @floor(float %130)
%132 = trunc i64 %131 to i32
%133 = call i32 @int_char(i32 %132, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 65))
%134 = load double, double* %16
%135 = call double @llvm.fmuladd.f64(double %134, double 1.000000e+06, double 5.000000e-01)
%136 = fptrunc double %135 to float
%137 = call i64 @floor(float %136)
%138 = trunc i64 %137 to i32
%139 = call i32 @int_char(i32 %138, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 69))
%140 = load i32, i32* %17
%141 = and i32 %140, 128
%142 = icmp ne i32 %141, 0
%143 = zext i1 %142 to i64
%144 = select i1 %142, double 9.000000e+01, double -9.000000e+01
%145 = fptrunc double %144 to float
store float %145, float* %27
%146 = load float, float* %27
%147 = fpext float %146 to double
%148 = fmul double %147, 1.000000e+06
%149 = fptrunc double %148 to float
%150 = call i64 @floor(float %149)
%151 = trunc i64 %150 to i32
%152 = call i32 @int_char(i32 %151, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 73))
%153 = call i32 @int_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 77))
ret i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 0)
}

LLVM IR (-O2):
@sec3_lc.gds = internal global [81 x i8] zeroinitializer
define i8* @sec3_lc(double %0, double %1, double %2, double %3, i32 %4, i32 %5, double %6, double %7, i32 %8, double %9, double %10, i8** %11) {
%13 = tail call i32 @uint_char(i32 81, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 0))
store i8 3, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 4)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 5)
%14 = mul nsw i32 %8, %5
%15 = tail call i32 @uint_char(i32 %14, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 6))
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 10)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 11)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 12)
store i8 30, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 13)
%16 = icmp eq i8** %11, null
br i1 %16, label %17, label %21
17: ; preds = %12
store i8 6, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 14)
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 15)
%18 = tail call i32 @uint_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 16))
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 20)
%19 = tail call i32 @uint_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 21))
store i8 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 25)
%20 = tail call i32 @uint_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 26))
br label %54
21: ; preds = %12
%22 = tail call i8* @code_table_3_2_location(i8** %11)
%23 = load i8, i8* %22
store i8 %23, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 14)
%24 = getelementptr inbounds i8, i8* %22, i64 1
%25 = load i8, i8* %24
store i8 %25, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 15)
%26 = getelementptr inbounds i8, i8* %22, i64 2
%27 = load i8, i8* %26
store i8 %27, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 16)
%28 = getelementptr inbounds i8, i8* %22, i64 3
%29 = load i8, i8* %28
store i8 %29, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 17)
%30 = getelementptr inbounds i8, i8* %22, i64 4
%31 = load i8, i8* %30
store i8 %31, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 18)
%32 = getelementptr inbounds i8, i8* %22, i64 5
%33 = load i8, i8* %32
store i8 %33, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 19)
%34 = getelementptr inbounds i8, i8* %22, i64 6
%35 = load i8, i8* %34
store i8 %35, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 20)
%36 = getelementptr inbounds i8, i8* %22, i64 7
%37 = load i8, i8* %36
store i8 %37, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 21)
%38 = getelementptr inbounds i8, i8* %22, i64 8
%39 = load i8, i8* %38
store i8 %39, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 22)
%40 = getelementptr inbounds i8, i8* %22, i64 9
%41 = load i8, i8* %40
store i8 %41, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 23)
%42 = getelementptr inbounds i8, i8* %22, i64 10
%43 = load i8, i8* %42
store i8 %43, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 24)
%44 = getelementptr inbounds i8, i8* %22, i64 11
%45 = load i8, i8* %44
store i8 %45, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 25)
%46 = getelementptr inbounds i8, i8* %22, i64 12
%47 = load i8, i8* %46
store i8 %47, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 26)
%48 = getelementptr inbounds i8, i8* %22, i64 13
%49 = load i8, i8* %48
store i8 %49, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 27)
%50 = getelementptr inbounds i8, i8* %22, i64 14
%51 = load i8, i8* %50
store i8 %51, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 28)
%52 = getelementptr inbounds i8, i8* %22, i64 15
%53 = load i8, i8* %52
store i8 %53, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 29)
br label %54
54: ; preds = %21, %17
%55 = fcmp olt double %6, 0.000000e+00
%56 = fadd double %6, 3.600000e+02
%57 = select i1 %55, double %56, double %6
%58 = tail call i32 @uint_char(i32 %5, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 30))
%59 = tail call i32 @uint_char(i32 %8, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 34))
%60 = tail call double @llvm.fmuladd.f64(double %9, double 1.000000e+06, double 5.000000e-01)
%61 = fptrunc double %60 to float
%62 = tail call i64 @floor(float %61)
%63 = trunc i64 %62 to i32
%64 = tail call i32 @int_char(i32 %63, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 38))
%65 = tail call double @llvm.fmuladd.f64(double %57, double 1.000000e+06, double 5.000000e-01)
%66 = fptrunc double %65 to float
%67 = tail call i64 @floor(float %66)
%68 = trunc i64 %67 to i32
%69 = tail call i32 @uint_char(i32 %68, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 42))
store i8 48, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 46)
%70 = tail call double @llvm.fmuladd.f64(double %1, double 1.000000e+06, double 5.000000e-01)
%71 = fptrunc double %70 to float
%72 = tail call i64 @floor(float %71)
%73 = trunc i64 %72 to i32
%74 = tail call i32 @int_char(i32 %73, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 47))
%75 = tail call double @llvm.fmuladd.f64(double %0, double 1.000000e+06, double 5.000000e-01)
%76 = fptrunc double %75 to float
%77 = tail call i64 @floor(float %76)
%78 = trunc i64 %77 to i32
%79 = tail call i32 @uint_char(i32 %78, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 51))
%80 = tail call i32 @fabs(double %7)
%81 = sitofp i32 %80 to double
%82 = tail call double @llvm.fmuladd.f64(double %81, double 1.000000e+03, double 5.000000e-01)
%83 = fptrunc double %82 to float
%84 = tail call i64 @floor(float %83)
%85 = trunc i64 %84 to i32
%86 = tail call i32 @int_char(i32 %85, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 55))
%87 = tail call i32 @fabs(double %10)
%88 = sitofp i32 %87 to double
%89 = tail call double @llvm.fmuladd.f64(double %88, double 1.000000e+03, double 5.000000e-01)
%90 = fptrunc double %89 to float
%91 = tail call i64 @floor(float %90)
%92 = trunc i64 %91 to i32
%93 = tail call i32 @int_char(i32 %92, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 59))
%94 = trunc i32 %4 to i8
store i8 %94, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 63)
%95 = fcmp olt double %7, 0.000000e+00
%96 = select i1 %95, i8 -128, i8 0
%97 = fcmp ogt double %10, 0.000000e+00
%98 = or i8 %96, 64
%99 = select i1 %97, i8 %98, i8 %96
store i8 %99, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 64)
%100 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+06, double 5.000000e-01)
%101 = fptrunc double %100 to float
%102 = tail call i64 @floor(float %101)
%103 = trunc i64 %102 to i32
%104 = tail call i32 @int_char(i32 %103, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 65))
%105 = tail call double @llvm.fmuladd.f64(double %3, double 1.000000e+06, double 5.000000e-01)
%106 = fptrunc double %105 to float
%107 = tail call i64 @floor(float %106)
%108 = trunc i64 %107 to i32
%109 = tail call i32 @int_char(i32 %108, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 69))
%110 = and i32 %4, 128
%111 = icmp eq i32 %110, 0
%112 = select i1 %111, float -9.000000e+07, float 9.000000e+07
%113 = tail call i64 @floor(float %112)
%114 = trunc i64 %113 to i32
%115 = tail call i32 @int_char(i32 %114, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 73))
%116 = tail call i32 @int_char(i32 0, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 77))
ret i8* getelementptr inbounds ([81 x i8], [81 x i8]* @sec3_lc.gds, i64 0, i64 0)
}