
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

void flonum_copy(FLONUM_TYPE *in,FLONUM_TYPE *out)

{
  uint uVar1;
  LITTLENUM_TYPE *__src;
  LITTLENUM_TYPE *__dest;
  uint uVar2;
  
  __dest = out->low;
  out->sign = in->sign;
  __src = in->low;
  if (in->leader < __src) {
    out->leader = __dest + -1;
    return;
  }
  uVar2 = (int)in->leader - (int)__src >> 1;
  uVar1 = (int)out->high - (int)__dest >> 1;
  if (uVar2 <= uVar1) {
    if (uVar2 < uVar1) {
      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);
      __src = in->low;
      __dest = out->low;
    }
    memcpy(__dest,__src,uVar2 * 2 + 2);
    out->exponent = in->exponent;
    out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));
    return;
  }
  memcpy(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2);
  out->exponent = (uVar2 - uVar1) + in->exponent;
  out->leader = out->high;
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void FUN_00024310(uint *param_1,int *param_2)

{
  size_t __n;
  uint uVar1;
  void *__src;
  void *__dest;
  uint uVar2;
  
  __dest = (void *)*param_2;
  *(char *)(param_2 + 4) = (char)param_1[4];
  __src = (void *)*param_1;
  if ((void *)param_1[2] < __src) {
    param_2[2] = (int)__dest + -2;
    return;
  }
  uVar2 = (int)param_1[2] - (int)__src >> 1;
  uVar1 = param_2[1] - (int)__dest >> 1;
  if (uVar2 <= uVar1) {
    __n = uVar2 * 2 + 2;
    if (uVar2 < uVar1) {
      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);
      __src = (void *)*param_1;
      __dest = (void *)*param_2;
    }
    memcpy(__dest,__src,__n);
    param_2[3] = param_1[3];
    param_2[2] = (param_1[2] - *param_1) + *param_2;
    return;
  }
  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);
  param_2[3] = (uVar2 - uVar1) + param_1[3];
  param_2[2] = param_2[1];
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00016000
ADD EBX,0x5bce7
SUB ESP,0x1c
MOV EBP,dword ptr [ESP + 0x30]
MOV EDI,dword ptr [ESP + 0x34]
MOVZX EAX,byte ptr [EBP + 0x10]
MOV EDX,dword ptr [EDI]
MOV byte ptr [EDI + 0x10],AL
MOV ESI,dword ptr [EBP + 0x8]
MOV ECX,dword ptr [EBP]
CMP ESI,ECX
JNC 0x00024350
SUB EDX,0x2
MOV dword ptr [EDI + 0x8],EDX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EDI + 0x4]
SUB ESI,ECX
SAR ESI,0x1
SUB EAX,EDX
SAR EAX,0x1
MOV dword ptr [ESP + 0x8],EAX
CMP ESI,EAX
JA 0x000243a0
LEA EAX,[ESI + ESI*0x1 + 0x2]
MOV dword ptr [ESP + 0xc],EAX
JC 0x000243d0
SUB ESP,0x4
PUSH dword ptr [ESP + 0x10]
PUSH ECX
PUSH EDX
CALL 0x000140f0
MOV EAX,dword ptr [EBP + 0xc]
ADD ESP,0x10
MOV dword ptr [EDI + 0xc],EAX
MOV EAX,dword ptr [EBP + 0x8]
SUB EAX,dword ptr [EBP]
ADD EAX,dword ptr [EDI]
MOV dword ptr [EDI + 0x8],EAX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESP + 0x8]
SUB ESP,0x4
SUB ESI,EAX
LEA EAX,[EAX + EAX*0x1 + 0x2]
LEA ECX,[ECX + ESI*0x2]
PUSH EAX
PUSH ECX
PUSH EDX
CALL 0x000140f0
MOV EAX,dword ptr [EDI + 0x4]
ADD ESI,dword ptr [EBP + 0xc]
ADD ESP,0x10
MOV dword ptr [EDI + 0xc],ESI
MOV dword ptr [EDI + 0x8],EAX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESP + 0x8]
ADD EDX,dword ptr [ESP + 0xc]
SUB ESP,0x4
SUB EAX,ESI
PUSH EAX
PUSH 0x0
PUSH EDX
CALL 0x000144a0
MOV ECX,dword ptr [EBP]
MOV EDX,dword ptr [EDI]
ADD ESP,0x10
JMP 0x0002436d
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_00024310(uint *param_1,int *param_2)\n\n{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}\n\n" comment (function_definition "void FUN_00024310(uint *param_1,int *param_2)\n\n{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}" primitive_type (function_declarator "FUN_00024310(uint *param_1,int *param_2)" identifier (parameter_list "(uint *param_1,int *param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}" { (declaration "size_t __n;" primitive_type identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (expression_statement "__dest = (void *)*param_2;" (assignment_expression "__dest = (void *)*param_2" identifier = (cast_expression "(void *)*param_2" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "*(char *)(param_2 + 4) = (char)param_1[4];" (assignment_expression "*(char *)(param_2 + 4) = (char)param_1[4]" (pointer_expression "*(char *)(param_2 + 4)" * (cast_expression "(char *)(param_2 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (cast_expression "(char)param_1[4]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }" if (parenthesized_expression "((void *)param_1[2] < __src)" ( (binary_expression "(void *)param_1[2] < __src" (cast_expression "(void *)param_1[2]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) < identifier) )) (compound_statement "{\n    param_2[2] = (int)__dest + -2;\n    return;\n  }" { (expression_statement "param_2[2] = (int)__dest + -2;" (assignment_expression "param_2[2] = (int)__dest + -2" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (binary_expression "(int)__dest + -2" (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "uVar2 = (int)param_1[2] - (int)__src >> 1;" (assignment_expression "uVar2 = (int)param_1[2] - (int)__src >> 1" identifier = (binary_expression "(int)param_1[2] - (int)__src >> 1" (binary_expression "(int)param_1[2] - (int)__src" (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) - (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar1 = param_2[1] - (int)__dest >> 1;" (assignment_expression "uVar1 = param_2[1] - (int)__dest >> 1" identifier = (binary_expression "param_2[1] - (int)__dest >> 1" (binary_expression "param_2[1] - (int)__dest" (subscript_expression "param_2[1]" identifier [ number_literal ]) - (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }" if (parenthesized_expression "(uVar2 <= uVar1)" ( (binary_expression "uVar2 <= uVar1" identifier <= identifier) )) (compound_statement "{\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }" { (expression_statement "__n = uVar2 * 2 + 2;" (assignment_expression "__n = uVar2 * 2 + 2" identifier = (binary_expression "uVar2 * 2 + 2" (binary_expression "uVar2 * 2" identifier * number_literal) + number_literal)) ;) (if_statement "if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (compound_statement "{\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }" { (expression_statement "memset((void *)((int)__dest + __n),0,uVar1 - uVar2);" (call_expression "memset((void *)((int)__dest + __n),0,uVar1 - uVar2)" identifier (argument_list "((void *)((int)__dest + __n),0,uVar1 - uVar2)" ( (cast_expression "(void *)((int)__dest + __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__dest + __n)" ( (binary_expression "(int)__dest + __n" (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) ))) , number_literal , (binary_expression "uVar1 - uVar2" identifier - identifier) ))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "__dest = (void *)*param_2;" (assignment_expression "__dest = (void *)*param_2" identifier = (cast_expression "(void *)*param_2" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) })) (expression_statement "memcpy(__dest,__src,__n);" (call_expression "memcpy(__dest,__src,__n)" identifier (argument_list "(__dest,__src,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "param_2[3] = param_1[3];" (assignment_expression "param_2[3] = param_1[3]" (subscript_expression "param_2[3]" identifier [ number_literal ]) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_2[2] = (param_1[2] - *param_1) + *param_2;" (assignment_expression "param_2[2] = (param_1[2] - *param_1) + *param_2" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (binary_expression "(param_1[2] - *param_1) + *param_2" (parenthesized_expression "(param_1[2] - *param_1)" ( (binary_expression "param_1[2] - *param_1" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (pointer_expression "*param_1" * identifier)) )) + (pointer_expression "*param_2" * identifier))) ;) (return_statement "return;" return ;) })) (expression_statement "memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);" (call_expression "memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2)" identifier (argument_list "(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2)" ( identifier , (cast_expression "(void *)((int)__src + (uVar2 - uVar1) * 2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__src + (uVar2 - uVar1) * 2)" ( (binary_expression "(int)__src + (uVar2 - uVar1) * 2" (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uVar2 - uVar1) * 2" (parenthesized_expression "(uVar2 - uVar1)" ( (binary_expression "uVar2 - uVar1" identifier - identifier) )) * number_literal)) ))) , (binary_expression "uVar1 * 2 + 2" (binary_expression "uVar1 * 2" identifier * number_literal) + number_literal) ))) ;) (expression_statement "param_2[3] = (uVar2 - uVar1) + param_1[3];" (assignment_expression "param_2[3] = (uVar2 - uVar1) + param_1[3]" (subscript_expression "param_2[3]" identifier [ number_literal ]) = (binary_expression "(uVar2 - uVar1) + param_1[3]" (parenthesized_expression "(uVar2 - uVar1)" ( (binary_expression "uVar2 - uVar1" identifier - identifier) )) + (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "param_2[2] = param_2[1];" (assignment_expression "param_2[2] = param_2[1]" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nvoid flonum_copy(FLONUM_TYPE *in,FLONUM_TYPE *out)\n\n{\n  uint uVar1;\n  LITTLENUM_TYPE *__src;\n  LITTLENUM_TYPE *__dest;\n  uint uVar2;\n  \n  __dest = out->low;\n  out->sign = in->sign;\n  __src = in->low;\n  if (in->leader < __src) {\n    out->leader = __dest + -1;\n    return;\n  }\n  uVar2 = (int)in->leader - (int)__src >> 1;\n  uVar1 = (int)out->high - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    if (uVar2 < uVar1) {\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }\n    memcpy(__dest,__src,uVar2 * 2 + 2);\n    out->exponent = in->exponent;\n    out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));\n    return;\n  }\n  memcpy(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2);\n  out->exponent = (uVar2 - uVar1) + in->exponent;\n  out->leader = out->high;\n  return;\n}\n\n" comment comment (function_definition "void flonum_copy(FLONUM_TYPE *in,FLONUM_TYPE *out)\n\n{\n  uint uVar1;\n  LITTLENUM_TYPE *__src;\n  LITTLENUM_TYPE *__dest;\n  uint uVar2;\n  \n  __dest = out->low;\n  out->sign = in->sign;\n  __src = in->low;\n  if (in->leader < __src) {\n    out->leader = __dest + -1;\n    return;\n  }\n  uVar2 = (int)in->leader - (int)__src >> 1;\n  uVar1 = (int)out->high - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    if (uVar2 < uVar1) {\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }\n    memcpy(__dest,__src,uVar2 * 2 + 2);\n    out->exponent = in->exponent;\n    out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));\n    return;\n  }\n  memcpy(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2);\n  out->exponent = (uVar2 - uVar1) + in->exponent;\n  out->leader = out->high;\n  return;\n}" primitive_type (function_declarator "flonum_copy(FLONUM_TYPE *in,FLONUM_TYPE *out)" identifier (parameter_list "(FLONUM_TYPE *in,FLONUM_TYPE *out)" ( (parameter_declaration "FLONUM_TYPE *in" type_identifier (pointer_declarator "*in" * identifier)) , (parameter_declaration "FLONUM_TYPE *out" type_identifier (pointer_declarator "*out" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  LITTLENUM_TYPE *__src;\n  LITTLENUM_TYPE *__dest;\n  uint uVar2;\n  \n  __dest = out->low;\n  out->sign = in->sign;\n  __src = in->low;\n  if (in->leader < __src) {\n    out->leader = __dest + -1;\n    return;\n  }\n  uVar2 = (int)in->leader - (int)__src >> 1;\n  uVar1 = (int)out->high - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    if (uVar2 < uVar1) {\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }\n    memcpy(__dest,__src,uVar2 * 2 + 2);\n    out->exponent = in->exponent;\n    out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));\n    return;\n  }\n  memcpy(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2);\n  out->exponent = (uVar2 - uVar1) + in->exponent;\n  out->leader = out->high;\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "LITTLENUM_TYPE *__src;" type_identifier (pointer_declarator "*__src" * identifier) ;) (declaration "LITTLENUM_TYPE *__dest;" type_identifier (pointer_declarator "*__dest" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (expression_statement "__dest = out->low;" (assignment_expression "__dest = out->low" identifier = (field_expression "out->low" identifier -> field_identifier)) ;) (expression_statement "out->sign = in->sign;" (assignment_expression "out->sign = in->sign" (field_expression "out->sign" identifier -> field_identifier) = (field_expression "in->sign" identifier -> field_identifier)) ;) (expression_statement "__src = in->low;" (assignment_expression "__src = in->low" identifier = (field_expression "in->low" identifier -> field_identifier)) ;) (if_statement "if (in->leader < __src) {\n    out->leader = __dest + -1;\n    return;\n  }" if (parenthesized_expression "(in->leader < __src)" ( (binary_expression "in->leader < __src" (field_expression "in->leader" identifier -> field_identifier) < identifier) )) (compound_statement "{\n    out->leader = __dest + -1;\n    return;\n  }" { (expression_statement "out->leader = __dest + -1;" (assignment_expression "out->leader = __dest + -1" (field_expression "out->leader" identifier -> field_identifier) = (binary_expression "__dest + -1" identifier + number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "uVar2 = (int)in->leader - (int)__src >> 1;" (assignment_expression "uVar2 = (int)in->leader - (int)__src >> 1" identifier = (binary_expression "(int)in->leader - (int)__src >> 1" (binary_expression "(int)in->leader - (int)__src" (cast_expression "(int)in->leader" ( (type_descriptor "int" primitive_type) ) (field_expression "in->leader" identifier -> field_identifier)) - (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar1 = (int)out->high - (int)__dest >> 1;" (assignment_expression "uVar1 = (int)out->high - (int)__dest >> 1" identifier = (binary_expression "(int)out->high - (int)__dest >> 1" (binary_expression "(int)out->high - (int)__dest" (cast_expression "(int)out->high" ( (type_descriptor "int" primitive_type) ) (field_expression "out->high" identifier -> field_identifier)) - (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if (uVar2 <= uVar1) {\n    if (uVar2 < uVar1) {\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }\n    memcpy(__dest,__src,uVar2 * 2 + 2);\n    out->exponent = in->exponent;\n    out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));\n    return;\n  }" if (parenthesized_expression "(uVar2 <= uVar1)" ( (binary_expression "uVar2 <= uVar1" identifier <= identifier) )) (compound_statement "{\n    if (uVar2 < uVar1) {\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }\n    memcpy(__dest,__src,uVar2 * 2 + 2);\n    out->exponent = in->exponent;\n    out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));\n    return;\n  }" { (if_statement "if (uVar2 < uVar1) {\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (compound_statement "{\n      memset(__dest + uVar2 + 1,0,uVar1 - uVar2);\n      __src = in->low;\n      __dest = out->low;\n    }" { (expression_statement "memset(__dest + uVar2 + 1,0,uVar1 - uVar2);" (call_expression "memset(__dest + uVar2 + 1,0,uVar1 - uVar2)" identifier (argument_list "(__dest + uVar2 + 1,0,uVar1 - uVar2)" ( (binary_expression "__dest + uVar2 + 1" (binary_expression "__dest + uVar2" identifier + identifier) + number_literal) , number_literal , (binary_expression "uVar1 - uVar2" identifier - identifier) ))) ;) (expression_statement "__src = in->low;" (assignment_expression "__src = in->low" identifier = (field_expression "in->low" identifier -> field_identifier)) ;) (expression_statement "__dest = out->low;" (assignment_expression "__dest = out->low" identifier = (field_expression "out->low" identifier -> field_identifier)) ;) })) (expression_statement "memcpy(__dest,__src,uVar2 * 2 + 2);" (call_expression "memcpy(__dest,__src,uVar2 * 2 + 2)" identifier (argument_list "(__dest,__src,uVar2 * 2 + 2)" ( identifier , identifier , (binary_expression "uVar2 * 2 + 2" (binary_expression "uVar2 * 2" identifier * number_literal) + number_literal) ))) ;) (expression_statement "out->exponent = in->exponent;" (assignment_expression "out->exponent = in->exponent" (field_expression "out->exponent" identifier -> field_identifier) = (field_expression "in->exponent" identifier -> field_identifier)) ;) (expression_statement "out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low));" (assignment_expression "out->leader = (LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low))" (field_expression "out->leader" identifier -> field_identifier) = (cast_expression "(LITTLENUM_TYPE *)((int)in->leader + ((int)out->low - (int)in->low))" ( (type_descriptor "LITTLENUM_TYPE *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)in->leader + ((int)out->low - (int)in->low))" ( (binary_expression "(int)in->leader + ((int)out->low - (int)in->low)" (cast_expression "(int)in->leader" ( (type_descriptor "int" primitive_type) ) (field_expression "in->leader" identifier -> field_identifier)) + (parenthesized_expression "((int)out->low - (int)in->low)" ( (binary_expression "(int)out->low - (int)in->low" (cast_expression "(int)out->low" ( (type_descriptor "int" primitive_type) ) (field_expression "out->low" identifier -> field_identifier)) - (cast_expression "(int)in->low" ( (type_descriptor "int" primitive_type) ) (field_expression "in->low" identifier -> field_identifier))) ))) )))) ;) (return_statement "return;" return ;) })) (expression_statement "memcpy(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2);" (call_expression "memcpy(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2)" identifier (argument_list "(__dest,__src + (uVar2 - uVar1),uVar1 * 2 + 2)" ( identifier , (binary_expression "__src + (uVar2 - uVar1)" identifier + (parenthesized_expression "(uVar2 - uVar1)" ( (binary_expression "uVar2 - uVar1" identifier - identifier) ))) , (binary_expression "uVar1 * 2 + 2" (binary_expression "uVar1 * 2" identifier * number_literal) + number_literal) ))) ;) (expression_statement "out->exponent = (uVar2 - uVar1) + in->exponent;" (assignment_expression "out->exponent = (uVar2 - uVar1) + in->exponent" (field_expression "out->exponent" identifier -> field_identifier) = (binary_expression "(uVar2 - uVar1) + in->exponent" (parenthesized_expression "(uVar2 - uVar1)" ( (binary_expression "uVar2 - uVar1" identifier - identifier) )) + (field_expression "in->exponent" identifier -> field_identifier))) ;) (expression_statement "out->leader = out->high;" (assignment_expression "out->leader = out->high" (field_expression "out->leader" identifier -> field_identifier) = (field_expression "out->high" identifier -> field_identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00024310(uint *param_1,int *param_2)\n\n{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}\n\n" (function_definition "void FUN_00024310(uint *param_1,int *param_2)\n\n{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}" primitive_type (function_declarator "FUN_00024310(uint *param_1,int *param_2)" identifier (parameter_list "(uint *param_1,int *param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}" { (declaration "size_t __n;" primitive_type identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (declaration "void *__dest;" primitive_type (pointer_declarator "*__dest" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (expression_statement "__dest = (void *)*param_2;" (assignment_expression "__dest = (void *)*param_2" identifier = (cast_expression "(void *)*param_2" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "*(char *)(param_2 + 4) = (char)param_1[4];" (assignment_expression "*(char *)(param_2 + 4) = (char)param_1[4]" (pointer_expression "*(char *)(param_2 + 4)" * (cast_expression "(char *)(param_2 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (cast_expression "(char)param_1[4]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }" if (parenthesized_expression "((void *)param_1[2] < __src)" ( (binary_expression "(void *)param_1[2] < __src" (cast_expression "(void *)param_1[2]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) < identifier) )) (compound_statement "{\n    param_2[2] = (int)__dest + -2;\n    return;\n  }" { (expression_statement "param_2[2] = (int)__dest + -2;" (assignment_expression "param_2[2] = (int)__dest + -2" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (binary_expression "(int)__dest + -2" (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "uVar2 = (int)param_1[2] - (int)__src >> 1;" (assignment_expression "uVar2 = (int)param_1[2] - (int)__src >> 1" identifier = (binary_expression "(int)param_1[2] - (int)__src >> 1" (binary_expression "(int)param_1[2] - (int)__src" (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) - (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar1 = param_2[1] - (int)__dest >> 1;" (assignment_expression "uVar1 = param_2[1] - (int)__dest >> 1" identifier = (binary_expression "param_2[1] - (int)__dest >> 1" (binary_expression "param_2[1] - (int)__dest" (subscript_expression "param_2[1]" identifier [ number_literal ]) - (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }" if (parenthesized_expression "(uVar2 <= uVar1)" ( (binary_expression "uVar2 <= uVar1" identifier <= identifier) )) (compound_statement "{\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }" { (expression_statement "__n = uVar2 * 2 + 2;" (assignment_expression "__n = uVar2 * 2 + 2" identifier = (binary_expression "uVar2 * 2 + 2" (binary_expression "uVar2 * 2" identifier * number_literal) + number_literal)) ;) (if_statement "if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (compound_statement "{\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }" { (expression_statement "memset((void *)((int)__dest + __n),0,uVar1 - uVar2);" (call_expression "memset((void *)((int)__dest + __n),0,uVar1 - uVar2)" identifier (argument_list "((void *)((int)__dest + __n),0,uVar1 - uVar2)" ( (cast_expression "(void *)((int)__dest + __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__dest + __n)" ( (binary_expression "(int)__dest + __n" (cast_expression "(int)__dest" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) ))) , number_literal , (binary_expression "uVar1 - uVar2" identifier - identifier) ))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "__dest = (void *)*param_2;" (assignment_expression "__dest = (void *)*param_2" identifier = (cast_expression "(void *)*param_2" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) })) (expression_statement "memcpy(__dest,__src,__n);" (call_expression "memcpy(__dest,__src,__n)" identifier (argument_list "(__dest,__src,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "param_2[3] = param_1[3];" (assignment_expression "param_2[3] = param_1[3]" (subscript_expression "param_2[3]" identifier [ number_literal ]) = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_2[2] = (param_1[2] - *param_1) + *param_2;" (assignment_expression "param_2[2] = (param_1[2] - *param_1) + *param_2" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (binary_expression "(param_1[2] - *param_1) + *param_2" (parenthesized_expression "(param_1[2] - *param_1)" ( (binary_expression "param_1[2] - *param_1" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (pointer_expression "*param_1" * identifier)) )) + (pointer_expression "*param_2" * identifier))) ;) (return_statement "return;" return ;) })) (expression_statement "memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);" (call_expression "memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2)" identifier (argument_list "(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2)" ( identifier , (cast_expression "(void *)((int)__src + (uVar2 - uVar1) * 2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__src + (uVar2 - uVar1) * 2)" ( (binary_expression "(int)__src + (uVar2 - uVar1) * 2" (cast_expression "(int)__src" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uVar2 - uVar1) * 2" (parenthesized_expression "(uVar2 - uVar1)" ( (binary_expression "uVar2 - uVar1" identifier - identifier) )) * number_literal)) ))) , (binary_expression "uVar1 * 2 + 2" (binary_expression "uVar1 * 2" identifier * number_literal) + number_literal) ))) ;) (expression_statement "param_2[3] = (uVar2 - uVar1) + param_1[3];" (assignment_expression "param_2[3] = (uVar2 - uVar1) + param_1[3]" (subscript_expression "param_2[3]" identifier [ number_literal ]) = (binary_expression "(uVar2 - uVar1) + param_1[3]" (parenthesized_expression "(uVar2 - uVar1)" ( (binary_expression "uVar2 - uVar1" identifier - identifier) )) + (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "param_2[2] = param_2[1];" (assignment_expression "param_2[2] = param_2[1]" (subscript_expression "param_2[2]" identifier [ number_literal ]) = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT)) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) ))) , LIT , (binary_expression IDENT - IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) - (pointer_expression * IDENT)) )) + (pointer_expression * IDENT))) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) * LIT)) ))) , (binary_expression (binary_expression IDENT * LIT) + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (return_statement return ;) })))
(function_definition "void FUN_00024310(uint *param_1,int *param_2)\n\n{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00024310(uint *param_1,int *param_2)" (identifier "FUN_00024310") (parameter_list "(uint *param_1,int *param_2)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  size_t __n;\n  uint uVar1;\n  void *__src;\n  void *__dest;\n  uint uVar2;\n  \n  __dest = (void *)*param_2;\n  *(char *)(param_2 + 4) = (char)param_1[4];\n  __src = (void *)*param_1;\n  if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }\n  uVar2 = (int)param_1[2] - (int)__src >> 1;\n  uVar1 = param_2[1] - (int)__dest >> 1;\n  if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }\n  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);\n  param_2[3] = (uVar2 - uVar1) + param_1[3];\n  param_2[2] = param_2[1];\n  return;\n}" ({ "{") (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "void *__src;" (primitive_type "void") (pointer_declarator "*__src" (* "*") (identifier "__src")) (; ";")) (declaration "void *__dest;" (primitive_type "void") (pointer_declarator "*__dest" (* "*") (identifier "__dest")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (expression_statement "__dest = (void *)*param_2;" (assignment_expression "__dest = (void *)*param_2" (identifier "__dest") (= "=") (cast_expression "(void *)*param_2" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "*(char *)(param_2 + 4) = (char)param_1[4];" (assignment_expression "*(char *)(param_2 + 4) = (char)param_1[4]" (pointer_expression "*(char *)(param_2 + 4)" (* "*") (cast_expression "(char *)(param_2 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (= "=") (cast_expression "(char)param_1[4]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";")) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" (identifier "__src") (= "=") (cast_expression "(void *)*param_1" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if ((void *)param_1[2] < __src) {\n    param_2[2] = (int)__dest + -2;\n    return;\n  }" (if "if") (parenthesized_expression "((void *)param_1[2] < __src)" (( "(") (binary_expression "(void *)param_1[2] < __src" (cast_expression "(void *)param_1[2]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (< "<") (identifier "__src")) () ")")) (compound_statement "{\n    param_2[2] = (int)__dest + -2;\n    return;\n  }" ({ "{") (expression_statement "param_2[2] = (int)__dest + -2;" (assignment_expression "param_2[2] = (int)__dest + -2" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "(int)__dest + -2" (cast_expression "(int)__dest" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__dest")) (+ "+") (number_literal "-2"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar2 = (int)param_1[2] - (int)__src >> 1;" (assignment_expression "uVar2 = (int)param_1[2] - (int)__src >> 1" (identifier "uVar2") (= "=") (binary_expression "(int)param_1[2] - (int)__src >> 1" (binary_expression "(int)param_1[2] - (int)__src" (cast_expression "(int)param_1[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (- "-") (cast_expression "(int)__src" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__src"))) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "uVar1 = param_2[1] - (int)__dest >> 1;" (assignment_expression "uVar1 = param_2[1] - (int)__dest >> 1" (identifier "uVar1") (= "=") (binary_expression "param_2[1] - (int)__dest >> 1" (binary_expression "param_2[1] - (int)__dest" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (- "-") (cast_expression "(int)__dest" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__dest"))) (>> ">>") (number_literal "1"))) (; ";")) (if_statement "if (uVar2 <= uVar1) {\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }" (if "if") (parenthesized_expression "(uVar2 <= uVar1)" (( "(") (binary_expression "uVar2 <= uVar1" (identifier "uVar2") (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n    __n = uVar2 * 2 + 2;\n    if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }\n    memcpy(__dest,__src,__n);\n    param_2[3] = param_1[3];\n    param_2[2] = (param_1[2] - *param_1) + *param_2;\n    return;\n  }" ({ "{") (expression_statement "__n = uVar2 * 2 + 2;" (assignment_expression "__n = uVar2 * 2 + 2" (identifier "__n") (= "=") (binary_expression "uVar2 * 2 + 2" (binary_expression "uVar2 * 2" (identifier "uVar2") (* "*") (number_literal "2")) (+ "+") (number_literal "2"))) (; ";")) (if_statement "if (uVar2 < uVar1) {\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }" (if "if") (parenthesized_expression "(uVar2 < uVar1)" (( "(") (binary_expression "uVar2 < uVar1" (identifier "uVar2") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);\n      __src = (void *)*param_1;\n      __dest = (void *)*param_2;\n    }" ({ "{") (expression_statement "memset((void *)((int)__dest + __n),0,uVar1 - uVar2);" (call_expression "memset((void *)((int)__dest + __n),0,uVar1 - uVar2)" (identifier "memset") (argument_list "((void *)((int)__dest + __n),0,uVar1 - uVar2)" (( "(") (cast_expression "(void *)((int)__dest + __n)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)__dest + __n)" (( "(") (binary_expression "(int)__dest + __n" (cast_expression "(int)__dest" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__dest")) (+ "+") (identifier "__n")) () ")"))) (, ",") (number_literal "0") (, ",") (binary_expression "uVar1 - uVar2" (identifier "uVar1") (- "-") (identifier "uVar2")) () ")"))) (; ";")) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" (identifier "__src") (= "=") (cast_expression "(void *)*param_1" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "__dest = (void *)*param_2;" (assignment_expression "__dest = (void *)*param_2" (identifier "__dest") (= "=") (cast_expression "(void *)*param_2" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (} "}"))) (expression_statement "memcpy(__dest,__src,__n);" (call_expression "memcpy(__dest,__src,__n)" (identifier "memcpy") (argument_list "(__dest,__src,__n)" (( "(") (identifier "__dest") (, ",") (identifier "__src") (, ",") (identifier "__n") () ")"))) (; ";")) (expression_statement "param_2[3] = param_1[3];" (assignment_expression "param_2[3] = param_1[3]" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "param_2[2] = (param_1[2] - *param_1) + *param_2;" (assignment_expression "param_2[2] = (param_1[2] - *param_1) + *param_2" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "(param_1[2] - *param_1) + *param_2" (parenthesized_expression "(param_1[2] - *param_1)" (( "(") (binary_expression "param_1[2] - *param_1" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (- "-") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")) (+ "+") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);" (call_expression "memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2)" (identifier "memcpy") (argument_list "(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2)" (( "(") (identifier "__dest") (, ",") (cast_expression "(void *)((int)__src + (uVar2 - uVar1) * 2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)__src + (uVar2 - uVar1) * 2)" (( "(") (binary_expression "(int)__src + (uVar2 - uVar1) * 2" (cast_expression "(int)__src" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__src")) (+ "+") (binary_expression "(uVar2 - uVar1) * 2" (parenthesized_expression "(uVar2 - uVar1)" (( "(") (binary_expression "uVar2 - uVar1" (identifier "uVar2") (- "-") (identifier "uVar1")) () ")")) (* "*") (number_literal "2"))) () ")"))) (, ",") (binary_expression "uVar1 * 2 + 2" (binary_expression "uVar1 * 2" (identifier "uVar1") (* "*") (number_literal "2")) (+ "+") (number_literal "2")) () ")"))) (; ";")) (expression_statement "param_2[3] = (uVar2 - uVar1) + param_1[3];" (assignment_expression "param_2[3] = (uVar2 - uVar1) + param_1[3]" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (= "=") (binary_expression "(uVar2 - uVar1) + param_1[3]" (parenthesized_expression "(uVar2 - uVar1)" (( "(") (binary_expression "uVar2 - uVar1" (identifier "uVar2") (- "-") (identifier "uVar1")) () ")")) (+ "+") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "param_2[2] = param_2[1];" (assignment_expression "param_2[2] = param_2[1]" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

void function_1(type_1 *in,type_1 *out)

{
  type_2 var_4;
  type_3 *var_1;
  type_3 *var_2;
  type_2 var_3;
  
  var_2 = out->low;
  out->sign = in->sign;
  var_1 = in->low;
  if (in->leader < var_1) {
    out->leader = var_2 + -1;
    return;
  }
  var_3 = (int)in->leader - (int)var_1 >> 1;
  var_4 = (int)out->high - (int)var_2 >> 1;
  if (var_3 <= var_4) {
    if (var_3 < var_4) {
      var_5(var_2 + var_3 + 1,0,var_4 - var_3);
      var_1 = in->low;
      var_2 = out->low;
    }
    var_6(var_2,var_1,var_3 * 2 + 2);
    out->exponent = in->exponent;
    out->leader = (type_3 *)((int)in->leader + ((int)out->low - (int)in->low));
    return;
  }
  var_6(var_2,var_1 + (var_3 - var_4),var_4 * 2 + 2);
  out->exponent = (var_3 - var_4) + in->exponent;
  out->leader = out->high;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))) (number_literal) (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier)))) right: (pointer_expression argument: (identifier))))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))) (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void MASKED(uint *param_1,int *param_2)

{
  size_t __n;
  uint uVar1;
  void *__src;
  void *__dest;
  uint uVar2;
  
  __dest = (void *)*param_2;
  *(char *)(param_2 + 4) = (char)param_1[4];
  __src = (void *)*param_1;
  if ((void *)param_1[2] < __src) {
    param_2[2] = (int)__dest + -2;
    return;
  }
  uVar2 = (int)param_1[2] - (int)__src >> 1;
  uVar1 = param_2[1] - (int)__dest >> 1;
  if (uVar2 <= uVar1) {
    __n = uVar2 * 2 + 2;
    if (uVar2 < uVar1) {
      memset((void *)((int)__dest + __n),0,uVar1 - uVar2);
      __src = (void *)*param_1;
      __dest = (void *)*param_2;
    }
    memcpy(__dest,__src,__n);
    param_2[3] = param_1[3];
    param_2[2] = (param_1[2] - *param_1) + *param_2;
    return;
  }
  memcpy(__dest,(void *)((int)__src + (uVar2 - uVar1) * 2),uVar1 * 2 + 2);
  param_2[3] = (uVar2 - uVar1) + param_1[3];
  param_2[2] = param_2[1];
  return;
}

