#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__ alloca(unsigned int);
int /*<<< orphan*/ memcpy(char *, char *, unsigned int);
int /*<<< orphan*/ memset(char *, unsigned char, unsigned int);
char *xsi_get_transient_memory(unsigned int);
int /*<<< orphan*/ xsi_report(char *, unsigned int, unsigned char);
int /*<<< orphan*/ xsi_type_set_default_value(char *, char *, char *);
int /*<<< orphan*/ xsi_vhdl_check_range_of_index(int, int, int, int);
char *ieee_p_3499444699_sub_12492700571167055362_3536714472(char *t1, char *t2,
                                                            char *t3,
                                                            char *t4) {
  char t5[128];
  char t6[24];
  char t9[16];
  char *t0;
  char *t7;
  unsigned int t8;
  char *t10;
  int t11;
  char *t12;
  int t13;
  char *t14;
  int t15;
  char *t16;
  char *t17;
  int t18;
  unsigned int t19;
  char *t20;
  char *t21;
  char *t22;
  char *t23;
  char *t24;
  char *t25;
  char *t26;
  unsigned char t27;
  char *t28;
  char *t29;
  int t30;
  char *t31;
  int t32;
  char *t33;
  int t34;
  int t35;
  int t36;
  int t37;
  int t38;
  char *t39;
  char *t40;
  int t41;
  char *t42;
  int t43;
  int t44;
  unsigned int t45;
  unsigned int t46;
  char *t47;
  unsigned char t48;
  int t49;
  unsigned int t50;
  unsigned int t51;
  unsigned int t52;
  char *t53;
  unsigned char t54;
  char *t55;
  unsigned int t57;
  unsigned int t58;
LAB0:
  t7 = (t4 + 12U);
  t8 = *((unsigned int *)t7);
  t8 = (t8 * 1U);
  t10 = (t4 + 0U);
  t11 = *((int *)t10);
  t12 = (t4 + 4U);
  t13 = *((int *)t12);
  t14 = (t4 + 8U);
  t15 = *((int *)t14);
  t16 = (t9 + 0U);
  t17 = (t16 + 0U);
  *((int *)t17) = t11;
  t17 = (t16 + 4U);
  *((int *)t17) = t13;
  t17 = (t16 + 8U);
  *((int *)t17) = t15;
  t18 = (t13 - t11);
  t19 = (t18 * t15);
  t19 = (t19 + 1);
  t17 = (t16 + 12U);
  *((unsigned int *)t17) = t19;
  t17 = (t5 + 4U);
  t20 = (t1 + 2704);
  t21 = (t17 + 88U);
  *((char **)t21) = t20;
  t22 = (char *)alloca(t8);
  t23 = (t17 + 56U);
  *((char **)t23) = t22;
  xsi_type_set_default_value(t20, t22, t9);
  t24 = (t17 + 64U);
  *((char **)t24) = t9;
  t25 = (t17 + 80U);
  *((unsigned int *)t25) = t8;
  t26 = (t6 + 4U);
  t27 = (t3 != 0);
  if (t27 == 1)
    goto LAB3;
LAB2:
  t28 = (t6 + 12U);
  *((char **)t28) = t4;
  t29 = (t4 + 8U);
  t30 = *((int *)t29);
  t31 = (t4 + 4U);
  t32 = *((int *)t31);
  t33 = (t4 + 0U);
  t34 = *((int *)t33);
  t35 = t34;
  t36 = t32;
LAB4:
  t37 = (t36 * t30);
  t38 = (t35 * t30);
  if (t38 <= t37)
    goto LAB5;
LAB7:
  t7 = (t17 + 56U);
  t10 = *((char **)t7);
  t7 = (t9 + 12U);
  t8 = *((unsigned int *)t7);
  t8 = (t8 * 1U);
  t0 = xsi_get_transient_memory(t8);
  memcpy(t0, t10, t8);
  t12 = (t9 + 0U);
  t11 = *((int *)t12);
  t14 = (t9 + 4U);
  t13 = *((int *)t14);
  t16 = (t9 + 8U);
  t15 = *((int *)t16);
  t20 = (t2 + 0U);
  t21 = (t20 + 0U);
  *((int *)t21) = t11;
  t21 = (t20 + 4U);
  *((int *)t21) = t13;
  t21 = (t20 + 8U);
  *((int *)t21) = t15;
  t18 = (t13 - t11);
  t19 = (t18 * t15);
  t19 = (t19 + 1);
  t21 = (t20 + 12U);
  *((unsigned int *)t21) = t19;
LAB1:
  return t0;
LAB3:
  *((char **)t26) = t3;
  goto LAB2;
LAB5:
  t39 = (t1 + 1288U);
  t40 = *((char **)t39);
  t39 = (t4 + 0U);
  t41 = *((int *)t39);
  t42 = (t4 + 8U);
  t43 = *((int *)t42);
  t44 = (t35 - t41);
  t19 = (t44 * t43);
  t45 = (1U * t19);
  t46 = (0 + t45);
  t47 = (t3 + t46);
  t48 = *((unsigned char *)t47);
  t49 = (t48 - 0);
  t50 = (t49 * 1);
  xsi_vhdl_check_range_of_index(0, 8, 1, t48);
  t51 = (1U * t50);
  t52 = (0 + t51);
  t53 = (t40 + t52);
  t54 = *((unsigned char *)t53);
  if (t54 != 0)
    goto LAB8;
LAB10:
LAB9:
  t7 = (t1 + 1168U);
  t10 = *((char **)t7);
  t7 = (t4 + 0U);
  t11 = *((int *)t7);
  t12 = (t4 + 8U);
  t13 = *((int *)t12);
  t15 = (t35 - t11);
  t8 = (t15 * t13);
  t19 = (1U * t8);
  t45 = (0 + t19);
  t14 = (t3 + t45);
  t27 = *((unsigned char *)t14);
  t18 = (t27 - 0);
  t46 = (t18 * 1);
  xsi_vhdl_check_range_of_index(0, 8, 1, t27);
  t50 = (1U * t46);
  t51 = (0 + t50);
  t16 = (t10 + t51);
  t48 = *((unsigned char *)t16);
  t20 = (t17 + 56U);
  t21 = *((char **)t20);
  t20 = (t9 + 0U);
  t32 = *((int *)t20);
  t23 = (t9 + 8U);
  t34 = *((int *)t23);
  t37 = (t35 - t32);
  t52 = (t37 * t34);
  t24 = (t9 + 4U);
  t38 = *((int *)t24);
  xsi_vhdl_check_range_of_index(t32, t38, t34, t35);
  t57 = (1U * t52);
  t58 = (0 + t57);
  t25 = (t21 + t58);
  *((unsigned char *)t25) = t48;
LAB6:
  if (t35 == t36)
    goto LAB7;
LAB14:
  t11 = (t35 + t30);
  t35 = t11;
  goto LAB4;
LAB8:
  if ((unsigned char)0 == 0)
    goto LAB11;
LAB12:
  t7 = (t9 + 12U);
  t8 = *((unsigned int *)t7);
  t8 = (t8 * 1U);
  t10 = xsi_get_transient_memory(t8);
  memset(t10, 0, t8);
  t12 = t10;
  memset(t12, (unsigned char)1, t8);
  t14 = (t17 + 56U);
  t16 = *((char **)t14);
  t14 = (t16 + 0);
  t20 = (t9 + 12U);
  t19 = *((unsigned int *)t20);
  t19 = (t19 * 1U);
  memcpy(t14, t10, t19);
  t7 = (t17 + 56U);
  t10 = *((char **)t7);
  t7 = (t9 + 12U);
  t8 = *((unsigned int *)t7);
  t8 = (t8 * 1U);
  t0 = xsi_get_transient_memory(t8);
  memcpy(t0, t10, t8);
  t12 = (t9 + 0U);
  t11 = *((int *)t12);
  t14 = (t9 + 4U);
  t13 = *((int *)t14);
  t16 = (t9 + 8U);
  t15 = *((int *)t16);
  t20 = (t2 + 0U);
  t21 = (t20 + 0U);
  *((int *)t21) = t11;
  t21 = (t20 + 4U);
  *((int *)t21) = t13;
  t21 = (t20 + 8U);
  *((int *)t21) = t15;
  t18 = (t13 - t11);
  t19 = (t18 * t15);
  t19 = (t19 + 1);
  t21 = (t20 + 12U);
  *((unsigned int *)t21) = t19;
  goto LAB1;
LAB11:
  t55 = (t1 + 5062);
  xsi_report(t55, 85U, (unsigned char)1);
  goto LAB12;
LAB13:
  goto LAB9;
LAB15:;
}


x86 assembly (clang, -O0):
push   %rbp
mov    %rsp,%rbp
sub    $0x240,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x28(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0xf4(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x100(%rbp)
mov    -0x100(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x104(%rbp)
mov    -0x28(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x114(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x124(%rbp)
lea    -0xe0(%rbp),%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x138(%rbp)
mov    -0x104(%rbp),%ecx
mov    -0x138(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x130(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x138(%rbp)
mov    -0x114(%rbp),%ecx
mov    -0x138(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x130(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x138(%rbp)
mov    -0x124(%rbp),%ecx
mov    -0x138(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x114(%rbp),%eax
sub    -0x104(%rbp),%eax
mov    %eax,-0x13c(%rbp)
mov    -0x13c(%rbp),%eax
imul   -0x124(%rbp),%eax
mov    %eax,-0x140(%rbp)
mov    -0x140(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x140(%rbp)
mov    -0x130(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x138(%rbp)
mov    -0x140(%rbp),%ecx
mov    -0x138(%rbp),%rax
mov    %ecx,(%rax)
lea    -0xb0(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x138(%rbp)
mov    -0x10(%rbp),%rax
add    $0xa90,%rax
mov    %rax,-0x148(%rbp)
mov    -0x138(%rbp),%rax
add    $0x58,%rax
mov    %rax,-0x150(%rbp)
mov    -0x148(%rbp),%rcx
mov    -0x150(%rbp),%rax
mov    %rcx,(%rax)
mov    -0xf4(%rbp),%edi
call   1060 <alloca@plt>
mov    %rax,-0x158(%rbp)
mov    -0x138(%rbp),%rax
add    $0x38,%rax
mov    %rax,-0x160(%rbp)
mov    -0x158(%rbp),%rcx
mov    -0x160(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x148(%rbp),%rdi
mov    -0x158(%rbp),%rsi
lea    -0xe0(%rbp),%rdx
call   1050 <xsi_type_set_default_value@plt>
mov    -0x138(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x168(%rbp)
lea    -0xe0(%rbp),%rcx
mov    -0x168(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x138(%rbp),%rax
add    $0x50,%rax
mov    %rax,-0x170(%rbp)
mov    -0xf4(%rbp),%ecx
mov    -0x170(%rbp),%rax
mov    %ecx,(%rax)
lea    -0xd0(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x178(%rbp)
cmpq   $0x0,-0x20(%rbp)
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %al,-0x179(%rbp)
movzbl -0x179(%rbp),%eax
cmp    $0x1,%eax
jne    13e3 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x273>
jmp    1664 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x4f4>
jmp    13e8 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x278>
lea    -0xd0(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x188(%rbp)
mov    -0x28(%rbp),%rcx
mov    -0x188(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x190(%rbp)
mov    -0x190(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x194(%rbp)
mov    -0x28(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x1a0(%rbp)
mov    -0x1a0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1a4(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
mov    -0x1b0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1b4(%rbp)
mov    -0x1b4(%rbp),%eax
mov    %eax,-0x1b8(%rbp)
mov    -0x1a4(%rbp),%eax
mov    %eax,-0x1bc(%rbp)
mov    -0x1bc(%rbp),%eax
imul   -0x194(%rbp),%eax
mov    %eax,-0x1c0(%rbp)
mov    -0x1b8(%rbp),%eax
imul   -0x194(%rbp),%eax
mov    %eax,-0x1c4(%rbp)
mov    -0x1c4(%rbp),%eax
cmp    -0x1c0(%rbp),%eax
jg     14b3 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x343>
jmp    1677 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x507>
jmp    14b8 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x348>
mov    -0x138(%rbp),%rax
add    $0x38,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x100(%rbp)
lea    -0xe0(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%edi
call   1090 <xsi_get_transient_memory@plt>
mov    %rax,-0xe8(%rbp)
mov    -0xe8(%rbp),%rdi
mov    -0x100(%rbp),%rsi
mov    -0xf4(%rbp),%edx
call   1070 <memcpy@plt>
lea    -0xe0(%rbp),%rax
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x104(%rbp)
lea    -0xe0(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x114(%rbp)
lea    -0xe0(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x124(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
mov    %rax,-0x150(%rbp)
mov    -0x104(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x148(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x150(%rbp)
mov    -0x114(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x148(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x150(%rbp)
mov    -0x124(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x114(%rbp),%eax
sub    -0x104(%rbp),%eax
mov    %eax,-0x13c(%rbp)
mov    -0x13c(%rbp),%eax
imul   -0x124(%rbp),%eax
mov    %eax,-0x140(%rbp)
mov    -0x140(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x140(%rbp)
mov    -0x148(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x150(%rbp)
mov    -0x140(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0xe8(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1d1a <ieee_p_3499444699_sub_12492700571167055362_3536714472+0xbaa>
mov    -0x20(%rbp),%rcx
mov    -0x178(%rbp),%rax
mov    %rcx,(%rax)
jmp    13e8 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x278>
mov    -0x10(%rbp),%rax
add    $0x508,%rax
mov    %rax,-0x1d0(%rbp)
mov    -0x1d0(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x1d8(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x1d0(%rbp)
mov    -0x1d0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1dc(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x1e8(%rbp)
mov    -0x1e8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1ec(%rbp)
mov    -0x1b8(%rbp),%eax
sub    -0x1dc(%rbp),%eax
mov    %eax,-0x1f0(%rbp)
mov    -0x1f0(%rbp),%eax
imul   -0x1ec(%rbp),%eax
mov    %eax,-0x140(%rbp)
mov    -0x140(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x1f4(%rbp)
mov    -0x1f4(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x1f8(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x1f8(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x200(%rbp)
mov    -0x200(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x201(%rbp)
movzbl -0x201(%rbp),%eax
sub    $0x0,%eax
mov    %eax,-0x208(%rbp)
mov    -0x208(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x20c(%rbp)
movzbl -0x201(%rbp),%ecx
xor    %edi,%edi
mov    $0x8,%esi
mov    $0x1,%edx
call   1080 <xsi_vhdl_check_range_of_index@plt>
mov    -0x20c(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x210(%rbp)
mov    -0x210(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x214(%rbp)
mov    -0x1d8(%rbp),%rax
mov    -0x214(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x220(%rbp)
mov    -0x220(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x221(%rbp)
movzbl -0x221(%rbp),%eax
cmp    $0x0,%eax
je     17c7 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x657>
jmp    1a53 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x8e3>
jmp    17cc <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x65c>
jmp    17d1 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x661>
mov    -0x10(%rbp),%rax
add    $0x490,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x100(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x104(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x114(%rbp)
mov    -0x1b8(%rbp),%eax
sub    -0x104(%rbp),%eax
mov    %eax,-0x124(%rbp)
mov    -0x124(%rbp),%eax
imul   -0x114(%rbp),%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x140(%rbp)
mov    -0x140(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x1f4(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x1f4(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x179(%rbp)
movzbl -0x179(%rbp),%eax
sub    $0x0,%eax
mov    %eax,-0x13c(%rbp)
mov    -0x13c(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x1f8(%rbp)
movzbl -0x179(%rbp),%ecx
xor    %edi,%edi
mov    $0x8,%esi
mov    $0x1,%edx
call   1080 <xsi_vhdl_check_range_of_index@plt>
mov    -0x1f8(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x20c(%rbp)
mov    -0x20c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x210(%rbp)
mov    -0x100(%rbp),%rax
mov    -0x210(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x201(%rbp)
mov    -0x138(%rbp),%rax
add    $0x38,%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x150(%rbp)
lea    -0xe0(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1a4(%rbp)
lea    -0xe0(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x160(%rbp)
mov    -0x160(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1b4(%rbp)
mov    -0x1b8(%rbp),%eax
sub    -0x1a4(%rbp),%eax
mov    %eax,-0x1c0(%rbp)
mov    -0x1c0(%rbp),%eax
imul   -0x1b4(%rbp),%eax
mov    %eax,-0x214(%rbp)
lea    -0xe0(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x168(%rbp)
mov    -0x168(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x1c4(%rbp)
mov    -0x1a4(%rbp),%edi
mov    -0x1c4(%rbp),%esi
mov    -0x1b4(%rbp),%edx
mov    -0x1b8(%rbp),%ecx
call   1080 <xsi_vhdl_check_range_of_index@plt>
mov    -0x214(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x234(%rbp)
mov    -0x234(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x238(%rbp)
mov    -0x150(%rbp),%rax
mov    -0x238(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x170(%rbp)
mov    -0x201(%rbp),%cl
mov    -0x170(%rbp),%rax
mov    %cl,(%rax)
mov    -0x1b8(%rbp),%eax
cmp    -0x1bc(%rbp),%eax
jne    1a2b <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x8bb>
jmp    14b8 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x348>
jmp    1a30 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x8c0>
mov    -0x1b8(%rbp),%eax
add    -0x194(%rbp),%eax
mov    %eax,-0x104(%rbp)
mov    -0x104(%rbp),%eax
mov    %eax,-0x1b8(%rbp)
jmp    1476 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x306>
jmp    1cee <ieee_p_3499444699_sub_12492700571167055362_3536714472+0xb7e>
lea    -0xe0(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%edi
call   1090 <xsi_get_transient_memory@plt>
mov    %rax,-0x100(%rbp)
mov    -0x100(%rbp),%rdi
mov    -0xf4(%rbp),%edx
xor    %esi,%esi
call   1040 <memset@plt>
mov    -0x100(%rbp),%rax
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rdi
mov    -0xf4(%rbp),%edx
mov    $0x1,%esi
call   1040 <memset@plt>
mov    -0x138(%rbp),%rax
add    $0x38,%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x120(%rbp)
lea    -0xe0(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x140(%rbp)
mov    -0x140(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0x140(%rbp)
mov    -0x120(%rbp),%rdi
mov    -0x100(%rbp),%rsi
mov    -0x140(%rbp),%edx
call   1070 <memcpy@plt>
mov    -0x138(%rbp),%rax
add    $0x38,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x100(%rbp)
lea    -0xe0(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
shl    $0x0,%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%edi
call   1090 <xsi_get_transient_memory@plt>
mov    %rax,-0xe8(%rbp)
mov    -0xe8(%rbp),%rdi
mov    -0x100(%rbp),%rsi
mov    -0xf4(%rbp),%edx
call   1070 <memcpy@plt>
lea    -0xe0(%rbp),%rax
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x104(%rbp)
lea    -0xe0(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x114(%rbp)
lea    -0xe0(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x124(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
mov    %rax,-0x150(%rbp)
mov    -0x104(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x148(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x150(%rbp)
mov    -0x114(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x148(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x150(%rbp)
mov    -0x124(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x114(%rbp),%eax
sub    -0x104(%rbp),%eax
mov    %eax,-0x13c(%rbp)
mov    -0x13c(%rbp),%eax
imul   -0x124(%rbp),%eax
mov    %eax,-0x140(%rbp)
mov    -0x140(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x140(%rbp)
mov    -0x148(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x150(%rbp)
mov    -0x140(%rbp),%ecx
mov    -0x150(%rbp),%rax
mov    %ecx,(%rax)
jmp    1654 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x4e4>
mov    -0x10(%rbp),%rax
add    $0x13c6,%rax
mov    %rax,-0x230(%rbp)
mov    -0x230(%rbp),%rdi
mov    $0x55,%esi
mov    $0x1,%edx
call   1030 <xsi_report@plt>
jmp    1a58 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x8e8>
mov    -0x8(%rbp),%rax
add    $0x240,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rcx,%r15
mov    %rdx,0x40(%rsp)
mov    %rsi,0x30(%rsp)
mov    %rdi,%r14
mov    0xc(%rcx),%edi
mov    (%rcx),%eax
mov    0x4(%rcx),%ecx
mov    0x8(%r15),%edx
mov    %eax,(%rsp)
mov    %ecx,0x4(%rsp)
mov    %edx,0x8(%rsp)
sub    %eax,%ecx
imul   %edx,%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rsp)
lea    0xa90(%r14),%rbp
call   1060 <alloca@plt>
mov    %rsp,%rdx
mov    %rbp,%rdi
mov    %rax,0x18(%rsp)
mov    %rax,%rsi
call   1050 <xsi_type_set_default_value@plt>
mov    0x8(%r15),%ecx
mov    (%r15),%ebp
mov    0x4(%r15),%eax
mov    %eax,0x28(%rsp)
mov    %eax,%edx
imul   %ecx,%edx
mov    %ebp,%eax
mov    %rcx,0x38(%rsp)
imul   %ecx,%eax
mov    %edx,0x24(%rsp)
cmp    %edx,%eax
jle    1211 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0xa1>
mov    0xc(%rsp),%ebp
mov    %ebp,%edi
call   1090 <xsi_get_transient_memory@plt>
mov    %rax,%rbx
mov    %rax,%rdi
mov    0x18(%rsp),%rsi
jmp    137d <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x20d>
mov    0x508(%r14),%r13
mov    0x40(%rsp),%rbx
movzbl (%rbx),%r12d
xor    %edi,%edi
mov    $0x8,%esi
mov    $0x1,%edx
mov    %r12d,%ecx
call   1080 <xsi_vhdl_check_range_of_index@plt>
cmpb   $0x0,0x0(%r13,%r12,1)
jne    1313 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x1a3>
mov    0x38(%rsp),%rax
lea    (%rax,%rbp,1),%r13d
imul   %eax,%r13d
imul   %eax,%eax
mov    %eax,0x20(%rsp)
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebp,%eax
sub    (%r15),%eax
mov    0x490(%r14),%r12
imul   0x8(%r15),%eax
movzbl (%rbx,%rax,1),%ebx
xor    %edi,%edi
mov    $0x8,%esi
mov    $0x1,%edx
mov    %ebx,%ecx
call   1080 <xsi_vhdl_check_range_of_index@plt>
movzbl (%r12,%rbx,1),%r12d
mov    0x8(%rsp),%edx
mov    (%rsp),%edi
mov    0x4(%rsp),%esi
mov    %ebp,%ebx
sub    %edi,%ebx
imul   %edx,%ebx
mov    %ebp,%ecx
call   1080 <xsi_vhdl_check_range_of_index@plt>
mov    0x18(%rsp),%rax
mov    %r12b,(%rax,%rbx,1)
cmp    %ebp,0x28(%rsp)
je     11f6 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x86>
cmp    0x24(%rsp),%r13d
jg     11f6 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0x86>
mov    0x38(%rsp),%rax
lea    (%rax,%rbp,1),%ecx
mov    %ecx,0x2c(%rsp)
add    %eax,%ebp
sub    (%r15),%ebp
mov    0x508(%r14),%r12
imul   0x8(%r15),%ebp
mov    0x40(%rsp),%rbx
movzbl (%rbx,%rbp,1),%ebp
xor    %edi,%edi
mov    $0x8,%esi
mov    $0x1,%edx
mov    %ebp,%ecx
call   1080 <xsi_vhdl_check_range_of_index@plt>
add    0x20(%rsp),%r13d
cmpb   $0x0,(%r12,%rbp,1)
mov    0x2c(%rsp),%eax
mov    %eax,%ebp
je     1260 <ieee_p_3499444699_sub_12492700571167055362_3536714472+0xf0>
add    $0x13c6,%r14
mov    %r14,%rdi
mov    $0x55,%esi
mov    $0x1,%edx
call   1030 <xsi_report@plt>
mov    0xc(%rsp),%ebx
mov    %ebx,%edi
call   1090 <xsi_get_transient_memory@plt>
mov    %rax,%rbp
mov    %rax,%rdi
xor    %esi,%esi
mov    %ebx,%edx
call   1040 <memset@plt>
mov    %rbp,%rdi
mov    $0x1,%esi
mov    %ebx,%edx
call   1040 <memset@plt>
mov    0xc(%rsp),%edx
mov    0x18(%rsp),%r14
mov    %r14,%rdi
mov    %rbp,%rsi
call   1070 <memcpy@plt>
mov    0xc(%rsp),%ebp
mov    %ebp,%edi
call   1090 <xsi_get_transient_memory@plt>
mov    %rax,%rbx
mov    %rax,%rdi
mov    %r14,%rsi
mov    %ebp,%edx
call   1070 <memcpy@plt>
mov    (%rsp),%ecx
mov    0x4(%rsp),%eax
mov    0x8(%rsp),%edx
mov    0x30(%rsp),%rsi
mov    %ecx,(%rsi)
mov    %eax,0x4(%rsi)
mov    %edx,0x8(%rsi)
sub    %ecx,%eax
imul   %edx,%eax
add    $0x1,%eax
mov    %eax,0xc(%rsi)
mov    %rbx,%rax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i8* @ieee_p_3499444699_sub_12492700571167055362_3536714472(i8* %0, i8* %1, i8* %2, i8* %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca [128 x i8]
%11 = alloca [24 x i8]
%12 = alloca [16 x i8]
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i32
%16 = alloca i8*
%17 = alloca i32
%18 = alloca i8*
%19 = alloca i32
%20 = alloca i8*
%21 = alloca i32
%22 = alloca i8*
%23 = alloca i8*
%24 = alloca i32
%25 = alloca i32
%26 = alloca i8*
%27 = alloca i8*
%28 = alloca i8*
%29 = alloca i8*
%30 = alloca i8*
%31 = alloca i8*
%32 = alloca i8*
%33 = alloca i8
%34 = alloca i8*
%35 = alloca i8*
%36 = alloca i32
%37 = alloca i8*
%38 = alloca i32
%39 = alloca i8*
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i8*
%46 = alloca i8*
%47 = alloca i32
%48 = alloca i8*
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32
%53 = alloca i8*
%54 = alloca i8
%55 = alloca i32
%56 = alloca i32
%57 = alloca i32
%58 = alloca i32
%59 = alloca i8*
%60 = alloca i8
%61 = alloca i8*
%62 = alloca i32
%63 = alloca i32
store i8* %0, i8** %6
store i8* %1, i8** %7
store i8* %2, i8** %8
store i8* %3, i8** %9
br label %64
64: ; preds = %4
%65 = load i8*, i8** %9
%66 = getelementptr inbounds i8, i8* %65, i64 12
store i8* %66, i8** %14
%67 = load i8*, i8** %14
%68 = bitcast i8* %67 to i32*
%69 = load i32, i32* %68
store i32 %69, i32* %15
%70 = load i32, i32* %15
%71 = mul i32 %70, 1
store i32 %71, i32* %15
%72 = load i8*, i8** %9
%73 = getelementptr inbounds i8, i8* %72, i64 0
store i8* %73, i8** %16
%74 = load i8*, i8** %16
%75 = bitcast i8* %74 to i32*
%76 = load i32, i32* %75
store i32 %76, i32* %17
%77 = load i8*, i8** %9
%78 = getelementptr inbounds i8, i8* %77, i64 4
store i8* %78, i8** %18
%79 = load i8*, i8** %18
%80 = bitcast i8* %79 to i32*
%81 = load i32, i32* %80
store i32 %81, i32* %19
%82 = load i8*, i8** %9
%83 = getelementptr inbounds i8, i8* %82, i64 8
store i8* %83, i8** %20
%84 = load i8*, i8** %20
%85 = bitcast i8* %84 to i32*
%86 = load i32, i32* %85
store i32 %86, i32* %21
%87 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%88 = getelementptr inbounds i8, i8* %87, i64 0
store i8* %88, i8** %22
%89 = load i8*, i8** %22
%90 = getelementptr inbounds i8, i8* %89, i64 0
store i8* %90, i8** %23
%91 = load i32, i32* %17
%92 = load i8*, i8** %23
%93 = bitcast i8* %92 to i32*
store i32 %91, i32* %93
%94 = load i8*, i8** %22
%95 = getelementptr inbounds i8, i8* %94, i64 4
store i8* %95, i8** %23
%96 = load i32, i32* %19
%97 = load i8*, i8** %23
%98 = bitcast i8* %97 to i32*
store i32 %96, i32* %98
%99 = load i8*, i8** %22
%100 = getelementptr inbounds i8, i8* %99, i64 8
store i8* %100, i8** %23
%101 = load i32, i32* %21
%102 = load i8*, i8** %23
%103 = bitcast i8* %102 to i32*
store i32 %101, i32* %103
%104 = load i32, i32* %19
%105 = load i32, i32* %17
%106 = sub nsw i32 %104, %105
store i32 %106, i32* %24
%107 = load i32, i32* %24
%108 = load i32, i32* %21
%109 = mul nsw i32 %107, %108
store i32 %109, i32* %25
%110 = load i32, i32* %25
%111 = add i32 %110, 1
store i32 %111, i32* %25
%112 = load i8*, i8** %22
%113 = getelementptr inbounds i8, i8* %112, i64 12
store i8* %113, i8** %23
%114 = load i32, i32* %25
%115 = load i8*, i8** %23
%116 = bitcast i8* %115 to i32*
store i32 %114, i32* %116
%117 = getelementptr inbounds [128 x i8], [128 x i8]* %10, i64 0, i64 0
%118 = getelementptr inbounds i8, i8* %117, i64 4
store i8* %118, i8** %23
%119 = load i8*, i8** %6
%120 = getelementptr inbounds i8, i8* %119, i64 2704
store i8* %120, i8** %26
%121 = load i8*, i8** %23
%122 = getelementptr inbounds i8, i8* %121, i64 88
store i8* %122, i8** %27
%123 = load i8*, i8** %26
%124 = load i8*, i8** %27
%125 = bitcast i8* %124 to i8**
store i8* %123, i8** %125
%126 = load i32, i32* %15
%127 = call i64 @alloca(i32 %126)
%128 = inttoptr i64 %127 to i8*
store i8* %128, i8** %28
%129 = load i8*, i8** %23
%130 = getelementptr inbounds i8, i8* %129, i64 56
store i8* %130, i8** %29
%131 = load i8*, i8** %28
%132 = load i8*, i8** %29
%133 = bitcast i8* %132 to i8**
store i8* %131, i8** %133
%134 = load i8*, i8** %26
%135 = load i8*, i8** %28
%136 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%137 = call i32 @xsi_type_set_default_value(i8* %134, i8* %135, i8* %136)
%138 = load i8*, i8** %23
%139 = getelementptr inbounds i8, i8* %138, i64 64
store i8* %139, i8** %30
%140 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%141 = load i8*, i8** %30
%142 = bitcast i8* %141 to i8**
store i8* %140, i8** %142
%143 = load i8*, i8** %23
%144 = getelementptr inbounds i8, i8* %143, i64 80
store i8* %144, i8** %31
%145 = load i32, i32* %15
%146 = load i8*, i8** %31
%147 = bitcast i8* %146 to i32*
store i32 %145, i32* %147
%148 = getelementptr inbounds [24 x i8], [24 x i8]* %11, i64 0, i64 0
%149 = getelementptr inbounds i8, i8* %148, i64 4
store i8* %149, i8** %32
%150 = load i8*, i8** %8
%151 = icmp ne i8* %150, null
%152 = zext i1 %151 to i32
%153 = trunc i32 %152 to i8
store i8 %153, i8* %33
%154 = load i8, i8* %33
%155 = zext i8 %154 to i32
%156 = icmp eq i32 %155, 1
br i1 %156, label %157, label %158
157: ; preds = %64
br label %260
158: ; preds = %64
br label %159
159: ; preds = %260, %158
%160 = getelementptr inbounds [24 x i8], [24 x i8]* %11, i64 0, i64 0
%161 = getelementptr inbounds i8, i8* %160, i64 12
store i8* %161, i8** %34
%162 = load i8*, i8** %9
%163 = load i8*, i8** %34
%164 = bitcast i8* %163 to i8**
store i8* %162, i8** %164
%165 = load i8*, i8** %9
%166 = getelementptr inbounds i8, i8* %165, i64 8
store i8* %166, i8** %35
%167 = load i8*, i8** %35
%168 = bitcast i8* %167 to i32*
%169 = load i32, i32* %168
store i32 %169, i32* %36
%170 = load i8*, i8** %9
%171 = getelementptr inbounds i8, i8* %170, i64 4
store i8* %171, i8** %37
%172 = load i8*, i8** %37
%173 = bitcast i8* %172 to i32*
%174 = load i32, i32* %173
store i32 %174, i32* %38
%175 = load i8*, i8** %9
%176 = getelementptr inbounds i8, i8* %175, i64 0
store i8* %176, i8** %39
%177 = load i8*, i8** %39
%178 = bitcast i8* %177 to i32*
%179 = load i32, i32* %178
store i32 %179, i32* %40
%180 = load i32, i32* %40
store i32 %180, i32* %41
%181 = load i32, i32* %38
store i32 %181, i32* %42
br label %182
182: ; preds = %417, %159
%183 = load i32, i32* %42
%184 = load i32, i32* %36
%185 = mul nsw i32 %183, %184
store i32 %185, i32* %43
%186 = load i32, i32* %41
%187 = load i32, i32* %36
%188 = mul nsw i32 %186, %187
store i32 %188, i32* %44
%189 = load i32, i32* %44
%190 = load i32, i32* %43
%191 = icmp sle i32 %189, %190
br i1 %191, label %192, label %193
192: ; preds = %182
br label %264
193: ; preds = %182
br label %194
194: ; preds = %415, %193
%195 = load i8*, i8** %23
%196 = getelementptr inbounds i8, i8* %195, i64 56
store i8* %196, i8** %14
%197 = load i8*, i8** %14
%198 = bitcast i8* %197 to i8**
%199 = load i8*, i8** %198
store i8* %199, i8** %16
%200 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%201 = getelementptr inbounds i8, i8* %200, i64 12
store i8* %201, i8** %14
%202 = load i8*, i8** %14
%203 = bitcast i8* %202 to i32*
%204 = load i32, i32* %203
store i32 %204, i32* %15
%205 = load i32, i32* %15
%206 = mul i32 %205, 1
store i32 %206, i32* %15
%207 = load i32, i32* %15
%208 = call i8* @xsi_get_transient_memory(i32 %207)
store i8* %208, i8** %13
%209 = load i8*, i8** %13
%210 = load i8*, i8** %16
%211 = load i32, i32* %15
%212 = call i32 @memcpy(i8* %209, i8* %210, i32 %211)
%213 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%214 = getelementptr inbounds i8, i8* %213, i64 0
store i8* %214, i8** %18
%215 = load i8*, i8** %18
%216 = bitcast i8* %215 to i32*
%217 = load i32, i32* %216
store i32 %217, i32* %17
%218 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%219 = getelementptr inbounds i8, i8* %218, i64 4
store i8* %219, i8** %20
%220 = load i8*, i8** %20
%221 = bitcast i8* %220 to i32*
%222 = load i32, i32* %221
store i32 %222, i32* %19
%223 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%224 = getelementptr inbounds i8, i8* %223, i64 8
store i8* %224, i8** %22
%225 = load i8*, i8** %22
%226 = bitcast i8* %225 to i32*
%227 = load i32, i32* %226
store i32 %227, i32* %21
%228 = load i8*, i8** %7
%229 = getelementptr inbounds i8, i8* %228, i64 0
store i8* %229, i8** %26
%230 = load i8*, i8** %26
%231 = getelementptr inbounds i8, i8* %230, i64 0
store i8* %231, i8** %27
%232 = load i32, i32* %17
%233 = load i8*, i8** %27
%234 = bitcast i8* %233 to i32*
store i32 %232, i32* %234
%235 = load i8*, i8** %26
%236 = getelementptr inbounds i8, i8* %235, i64 4
store i8* %236, i8** %27
%237 = load i32, i32* %19
%238 = load i8*, i8** %27
%239 = bitcast i8* %238 to i32*
store i32 %237, i32* %239
%240 = load i8*, i8** %26
%241 = getelementptr inbounds i8, i8* %240, i64 8
store i8* %241, i8** %27
%242 = load i32, i32* %21
%243 = load i8*, i8** %27
%244 = bitcast i8* %243 to i32*
store i32 %242, i32* %244
%245 = load i32, i32* %19
%246 = load i32, i32* %17
%247 = sub nsw i32 %245, %246
store i32 %247, i32* %24
%248 = load i32, i32* %24
%249 = load i32, i32* %21
%250 = mul nsw i32 %248, %249
store i32 %250, i32* %25
%251 = load i32, i32* %25
%252 = add i32 %251, 1
store i32 %252, i32* %25
%253 = load i8*, i8** %26
%254 = getelementptr inbounds i8, i8* %253, i64 12
store i8* %254, i8** %27
%255 = load i32, i32* %25
%256 = load i8*, i8** %27
%257 = bitcast i8* %256 to i32*
store i32 %255, i32* %257
br label %258
258: ; preds = %423, %194
%259 = load i8*, i8** %13
store i8* %259, i8** %5
br label %528
260: ; preds = %157
%261 = load i8*, i8** %8
%262 = load i8*, i8** %32
%263 = bitcast i8* %262 to i8**
store i8* %261, i8** %263
br label %159
264: ; preds = %192
%265 = load i8*, i8** %6
%266 = getelementptr inbounds i8, i8* %265, i64 1288
store i8* %266, i8** %45
%267 = load i8*, i8** %45
%268 = bitcast i8* %267 to i8**
%269 = load i8*, i8** %268
store i8* %269, i8** %46
%270 = load i8*, i8** %9
%271 = getelementptr inbounds i8, i8* %270, i64 0
store i8* %271, i8** %45
%272 = load i8*, i8** %45
%273 = bitcast i8* %272 to i32*
%274 = load i32, i32* %273
store i32 %274, i32* %47
%275 = load i8*, i8** %9
%276 = getelementptr inbounds i8, i8* %275, i64 8
store i8* %276, i8** %48
%277 = load i8*, i8** %48
%278 = bitcast i8* %277 to i32*
%279 = load i32, i32* %278
store i32 %279, i32* %49
%280 = load i32, i32* %41
%281 = load i32, i32* %47
%282 = sub nsw i32 %280, %281
store i32 %282, i32* %50
%283 = load i32, i32* %50
%284 = load i32, i32* %49
%285 = mul nsw i32 %283, %284
store i32 %285, i32* %25
%286 = load i32, i32* %25
%287 = mul i32 1, %286
store i32 %287, i32* %51
%288 = load i32, i32* %51
%289 = add i32 0, %288
store i32 %289, i32* %52
%290 = load i8*, i8** %8
%291 = load i32, i32* %52
%292 = zext i32 %291 to i64
%293 = getelementptr inbounds i8, i8* %290, i64 %292
store i8* %293, i8** %53
%294 = load i8*, i8** %53
%295 = load i8, i8* %294
store i8 %295, i8* %54
%296 = load i8, i8* %54
%297 = zext i8 %296 to i32
%298 = sub nsw i32 %297, 0
store i32 %298, i32* %55
%299 = load i32, i32* %55
%300 = mul nsw i32 %299, 1
store i32 %300, i32* %56
%301 = load i8, i8* %54
%302 = zext i8 %301 to i32
%303 = call i32 @xsi_vhdl_check_range_of_index(i32 0, i32 8, i32 1, i32 %302)
%304 = load i32, i32* %56
%305 = mul i32 1, %304
store i32 %305, i32* %57
%306 = load i32, i32* %57
%307 = add i32 0, %306
store i32 %307, i32* %58
%308 = load i8*, i8** %46
%309 = load i32, i32* %58
%310 = zext i32 %309 to i64
%311 = getelementptr inbounds i8, i8* %308, i64 %310
store i8* %311, i8** %59
%312 = load i8*, i8** %59
%313 = load i8, i8* %312
store i8 %313, i8* %60
%314 = load i8, i8* %60
%315 = zext i8 %314 to i32
%316 = icmp ne i32 %315, 0
br i1 %316, label %317, label %318
317: ; preds = %264
br label %422
318: ; preds = %264
br label %319
319: ; preds = %318
br label %320
320: ; preds = %526, %319
%321 = load i8*, i8** %6
%322 = getelementptr inbounds i8, i8* %321, i64 1168
store i8* %322, i8** %14
%323 = load i8*, i8** %14
%324 = bitcast i8* %323 to i8**
%325 = load i8*, i8** %324
store i8* %325, i8** %16
%326 = load i8*, i8** %9
%327 = getelementptr inbounds i8, i8* %326, i64 0
store i8* %327, i8** %14
%328 = load i8*, i8** %14
%329 = bitcast i8* %328 to i32*
%330 = load i32, i32* %329
store i32 %330, i32* %17
%331 = load i8*, i8** %9
%332 = getelementptr inbounds i8, i8* %331, i64 8
store i8* %332, i8** %18
%333 = load i8*, i8** %18
%334 = bitcast i8* %333 to i32*
%335 = load i32, i32* %334
store i32 %335, i32* %19
%336 = load i32, i32* %41
%337 = load i32, i32* %17
%338 = sub nsw i32 %336, %337
store i32 %338, i32* %21
%339 = load i32, i32* %21
%340 = load i32, i32* %19
%341 = mul nsw i32 %339, %340
store i32 %341, i32* %15
%342 = load i32, i32* %15
%343 = mul i32 1, %342
store i32 %343, i32* %25
%344 = load i32, i32* %25
%345 = add i32 0, %344
store i32 %345, i32* %51
%346 = load i8*, i8** %8
%347 = load i32, i32* %51
%348 = zext i32 %347 to i64
%349 = getelementptr inbounds i8, i8* %346, i64 %348
store i8* %349, i8** %20
%350 = load i8*, i8** %20
%351 = load i8, i8* %350
store i8 %351, i8* %33
%352 = load i8, i8* %33
%353 = zext i8 %352 to i32
%354 = sub nsw i32 %353, 0
store i32 %354, i32* %24
%355 = load i32, i32* %24
%356 = mul nsw i32 %355, 1
store i32 %356, i32* %52
%357 = load i8, i8* %33
%358 = zext i8 %357 to i32
%359 = call i32 @xsi_vhdl_check_range_of_index(i32 0, i32 8, i32 1, i32 %358)
%360 = load i32, i32* %52
%361 = mul i32 1, %360
store i32 %361, i32* %56
%362 = load i32, i32* %56
%363 = add i32 0, %362
store i32 %363, i32* %57
%364 = load i8*, i8** %16
%365 = load i32, i32* %57
%366 = zext i32 %365 to i64
%367 = getelementptr inbounds i8, i8* %364, i64 %366
store i8* %367, i8** %22
%368 = load i8*, i8** %22
%369 = load i8, i8* %368
store i8 %369, i8* %54
%370 = load i8*, i8** %23
%371 = getelementptr inbounds i8, i8* %370, i64 56
store i8* %371, i8** %26
%372 = load i8*, i8** %26
%373 = bitcast i8* %372 to i8**
%374 = load i8*, i8** %373
store i8* %374, i8** %27
%375 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%376 = getelementptr inbounds i8, i8* %375, i64 0
store i8* %376, i8** %26
%377 = load i8*, i8** %26
%378 = bitcast i8* %377 to i32*
%379 = load i32, i32* %378
store i32 %379, i32* %38
%380 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%381 = getelementptr inbounds i8, i8* %380, i64 8
store i8* %381, i8** %29
%382 = load i8*, i8** %29
%383 = bitcast i8* %382 to i32*
%384 = load i32, i32* %383
store i32 %384, i32* %40
%385 = load i32, i32* %41
%386 = load i32, i32* %38
%387 = sub nsw i32 %385, %386
store i32 %387, i32* %43
%388 = load i32, i32* %43
%389 = load i32, i32* %40
%390 = mul nsw i32 %388, %389
store i32 %390, i32* %58
%391 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%392 = getelementptr inbounds i8, i8* %391, i64 4
store i8* %392, i8** %30
%393 = load i8*, i8** %30
%394 = bitcast i8* %393 to i32*
%395 = load i32, i32* %394
store i32 %395, i32* %44
%396 = load i32, i32* %38
%397 = load i32, i32* %44
%398 = load i32, i32* %40
%399 = load i32, i32* %41
%400 = call i32 @xsi_vhdl_check_range_of_index(i32 %396, i32 %397, i32 %398, i32 %399)
%401 = load i32, i32* %58
%402 = mul i32 1, %401
store i32 %402, i32* %62
%403 = load i32, i32* %62
%404 = add i32 0, %403
store i32 %404, i32* %63
%405 = load i8*, i8** %27
%406 = load i32, i32* %63
%407 = zext i32 %406 to i64
%408 = getelementptr inbounds i8, i8* %405, i64 %407
store i8* %408, i8** %31
%409 = load i8, i8* %54
%410 = load i8*, i8** %31
store i8 %409, i8* %410
br label %411
411: ; preds = %320
%412 = load i32, i32* %41
%413 = load i32, i32* %42
%414 = icmp eq i32 %412, %413
br i1 %414, label %415, label %416
415: ; preds = %411
br label %194
416: ; preds = %411
br label %417
417: ; preds = %416
%418 = load i32, i32* %41
%419 = load i32, i32* %36
%420 = add nsw i32 %418, %419
store i32 %420, i32* %17
%421 = load i32, i32* %17
store i32 %421, i32* %41
br label %182
422: ; preds = %317
br label %521
423: ; preds = %521
%424 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%425 = getelementptr inbounds i8, i8* %424, i64 12
store i8* %425, i8** %14
%426 = load i8*, i8** %14
%427 = bitcast i8* %426 to i32*
%428 = load i32, i32* %427
store i32 %428, i32* %15
%429 = load i32, i32* %15
%430 = mul i32 %429, 1
store i32 %430, i32* %15
%431 = load i32, i32* %15
%432 = call i8* @xsi_get_transient_memory(i32 %431)
store i8* %432, i8** %16
%433 = load i8*, i8** %16
%434 = load i32, i32* %15
%435 = call i32 @memset(i8* %433, i8 zeroext 0, i32 %434)
%436 = load i8*, i8** %16
store i8* %436, i8** %18
%437 = load i8*, i8** %18
%438 = load i32, i32* %15
%439 = call i32 @memset(i8* %437, i8 zeroext 1, i32 %438)
%440 = load i8*, i8** %23
%441 = getelementptr inbounds i8, i8* %440, i64 56
store i8* %441, i8** %20
%442 = load i8*, i8** %20
%443 = bitcast i8* %442 to i8**
%444 = load i8*, i8** %443
store i8* %444, i8** %22
%445 = load i8*, i8** %22
%446 = getelementptr inbounds i8, i8* %445, i64 0
store i8* %446, i8** %20
%447 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%448 = getelementptr inbounds i8, i8* %447, i64 12
store i8* %448, i8** %26
%449 = load i8*, i8** %26
%450 = bitcast i8* %449 to i32*
%451 = load i32, i32* %450
store i32 %451, i32* %25
%452 = load i32, i32* %25
%453 = mul i32 %452, 1
store i32 %453, i32* %25
%454 = load i8*, i8** %20
%455 = load i8*, i8** %16
%456 = load i32, i32* %25
%457 = call i32 @memcpy(i8* %454, i8* %455, i32 %456)
%458 = load i8*, i8** %23
%459 = getelementptr inbounds i8, i8* %458, i64 56
store i8* %459, i8** %14
%460 = load i8*, i8** %14
%461 = bitcast i8* %460 to i8**
%462 = load i8*, i8** %461
store i8* %462, i8** %16
%463 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%464 = getelementptr inbounds i8, i8* %463, i64 12
store i8* %464, i8** %14
%465 = load i8*, i8** %14
%466 = bitcast i8* %465 to i32*
%467 = load i32, i32* %466
store i32 %467, i32* %15
%468 = load i32, i32* %15
%469 = mul i32 %468, 1
store i32 %469, i32* %15
%470 = load i32, i32* %15
%471 = call i8* @xsi_get_transient_memory(i32 %470)
store i8* %471, i8** %13
%472 = load i8*, i8** %13
%473 = load i8*, i8** %16
%474 = load i32, i32* %15
%475 = call i32 @memcpy(i8* %472, i8* %473, i32 %474)
%476 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%477 = getelementptr inbounds i8, i8* %476, i64 0
store i8* %477, i8** %18
%478 = load i8*, i8** %18
%479 = bitcast i8* %478 to i32*
%480 = load i32, i32* %479
store i32 %480, i32* %17
%481 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%482 = getelementptr inbounds i8, i8* %481, i64 4
store i8* %482, i8** %20
%483 = load i8*, i8** %20
%484 = bitcast i8* %483 to i32*
%485 = load i32, i32* %484
store i32 %485, i32* %19
%486 = getelementptr inbounds [16 x i8], [16 x i8]* %12, i64 0, i64 0
%487 = getelementptr inbounds i8, i8* %486, i64 8
store i8* %487, i8** %22
%488 = load i8*, i8** %22
%489 = bitcast i8* %488 to i32*
%490 = load i32, i32* %489
store i32 %490, i32* %21
%491 = load i8*, i8** %7
%492 = getelementptr inbounds i8, i8* %491, i64 0
store i8* %492, i8** %26
%493 = load i8*, i8** %26
%494 = getelementptr inbounds i8, i8* %493, i64 0
store i8* %494, i8** %27
%495 = load i32, i32* %17
%496 = load i8*, i8** %27
%497 = bitcast i8* %496 to i32*
store i32 %495, i32* %497
%498 = load i8*, i8** %26
%499 = getelementptr inbounds i8, i8* %498, i64 4
store i8* %499, i8** %27
%500 = load i32, i32* %19
%501 = load i8*, i8** %27
%502 = bitcast i8* %501 to i32*
store i32 %500, i32* %502
%503 = load i8*, i8** %26
%504 = getelementptr inbounds i8, i8* %503, i64 8
store i8* %504, i8** %27
%505 = load i32, i32* %21
%506 = load i8*, i8** %27
%507 = bitcast i8* %506 to i32*
store i32 %505, i32* %507
%508 = load i32, i32* %19
%509 = load i32, i32* %17
%510 = sub nsw i32 %508, %509
store i32 %510, i32* %24
%511 = load i32, i32* %24
%512 = load i32, i32* %21
%513 = mul nsw i32 %511, %512
store i32 %513, i32* %25
%514 = load i32, i32* %25
%515 = add i32 %514, 1
store i32 %515, i32* %25
%516 = load i8*, i8** %26
%517 = getelementptr inbounds i8, i8* %516, i64 12
store i8* %517, i8** %27
%518 = load i32, i32* %25
%519 = load i8*, i8** %27
%520 = bitcast i8* %519 to i32*
store i32 %518, i32* %520
br label %258
521: ; preds = %422
%522 = load i8*, i8** %6
%523 = getelementptr inbounds i8, i8* %522, i64 5062
store i8* %523, i8** %61
%524 = load i8*, i8** %61
%525 = call i32 @xsi_report(i8* %524, i32 85, i8 zeroext 1)
br label %423
526: ; No predecessors!
br label %320
527: ; No predecessors!
br label %528
528: ; preds = %527, %258
%529 = load i8*, i8** %5
ret i8* %529
}

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