
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

double uint64_to_double(uint64 x)

{
  ulong uVar1;
  ulong uVar2;
  double dVar3;
  double dVar4;
  
  uVar1 = x.lo;
  uVar2 = x.hi;
  if ((long)uVar2 < 0) {
    dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));
    dVar3 = dVar3 + dVar3;
  }
  else {
    dVar3 = (double)(long)uVar2;
  }
  if ((long)uVar1 < 0) {
    dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));
    dVar4 = dVar4 + dVar4;
  }
  else {
    dVar4 = (double)(long)uVar1;
  }
  return dVar3 * _DAT_0015eea0 + dVar4;
}



/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

double FUN_0010caf8(ulong param_1,ulong param_2)

{
  return (double)param_1 * _DAT_0015eea0 + (double)param_2;
}


TEST RDI,RDI
JS 0x0010cb21
PXOR XMM0,XMM0
CVTSI2SD XMM0,RDI
MULSD XMM0,qword ptr [0x0015eea0]
TEST RSI,RSI
JS 0x0010cb3c
PXOR XMM1,XMM1
CVTSI2SD XMM1,RSI
ADDSD XMM0,XMM1
RET
MOV RAX,RDI
SHR RAX,0x1
AND EDI,0x1
OR RAX,RDI
PXOR XMM0,XMM0
CVTSI2SD XMM0,RAX
ADDSD XMM0,XMM0
JMP 0x0010cb06
MOV RAX,RSI
SHR RAX,0x1
AND ESI,0x1
OR RAX,RSI
PXOR XMM1,XMM1
CVTSI2SD XMM1,RAX
ADDSD XMM1,XMM1
JMP 0x0010cb1c
(translation_unit "/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */\n\ndouble FUN_0010caf8(ulong param_1,ulong param_2)\n\n{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}\n\n" comment (function_definition "double FUN_0010caf8(ulong param_1,ulong param_2)\n\n{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}" primitive_type (function_declarator "FUN_0010caf8(ulong param_1,ulong param_2)" identifier (parameter_list "(ulong param_1,ulong param_2)" ( (parameter_declaration "ulong param_1" type_identifier identifier) , (parameter_declaration "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}" { (return_statement "return (double)param_1 * _DAT_0015eea0 + (double)param_2;" return (binary_expression "(double)param_1 * _DAT_0015eea0 + (double)param_2" (binary_expression "(double)param_1 * _DAT_0015eea0" (cast_expression "(double)param_1" ( (type_descriptor "double" primitive_type) ) identifier) * identifier) + (cast_expression "(double)param_2" ( (type_descriptor "double" primitive_type) ) identifier)) ;) })))
(translation_unit "/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */\n\ndouble uint64_to_double(uint64 x)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  double dVar3;\n  double dVar4;\n  \n  uVar1 = x.lo;\n  uVar2 = x.hi;\n  if ((long)uVar2 < 0) {\n    dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));\n    dVar3 = dVar3 + dVar3;\n  }\n  else {\n    dVar3 = (double)(long)uVar2;\n  }\n  if ((long)uVar1 < 0) {\n    dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));\n    dVar4 = dVar4 + dVar4;\n  }\n  else {\n    dVar4 = (double)(long)uVar1;\n  }\n  return dVar3 * _DAT_0015eea0 + dVar4;\n}\n\n" comment (function_definition "double uint64_to_double(uint64 x)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  double dVar3;\n  double dVar4;\n  \n  uVar1 = x.lo;\n  uVar2 = x.hi;\n  if ((long)uVar2 < 0) {\n    dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));\n    dVar3 = dVar3 + dVar3;\n  }\n  else {\n    dVar3 = (double)(long)uVar2;\n  }\n  if ((long)uVar1 < 0) {\n    dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));\n    dVar4 = dVar4 + dVar4;\n  }\n  else {\n    dVar4 = (double)(long)uVar1;\n  }\n  return dVar3 * _DAT_0015eea0 + dVar4;\n}" primitive_type (function_declarator "uint64_to_double(uint64 x)" identifier (parameter_list "(uint64 x)" ( (parameter_declaration "uint64 x" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  ulong uVar2;\n  double dVar3;\n  double dVar4;\n  \n  uVar1 = x.lo;\n  uVar2 = x.hi;\n  if ((long)uVar2 < 0) {\n    dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));\n    dVar3 = dVar3 + dVar3;\n  }\n  else {\n    dVar3 = (double)(long)uVar2;\n  }\n  if ((long)uVar1 < 0) {\n    dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));\n    dVar4 = dVar4 + dVar4;\n  }\n  else {\n    dVar4 = (double)(long)uVar1;\n  }\n  return dVar3 * _DAT_0015eea0 + dVar4;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "double dVar3;" primitive_type identifier ;) (declaration "double dVar4;" primitive_type identifier ;) (expression_statement "uVar1 = x.lo;" (assignment_expression "uVar1 = x.lo" identifier = (field_expression "x.lo" identifier . field_identifier)) ;) (expression_statement "uVar2 = x.hi;" (assignment_expression "uVar2 = x.hi" identifier = (field_expression "x.hi" identifier . field_identifier)) ;) (if_statement "if ((long)uVar2 < 0) {\n    dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));\n    dVar3 = dVar3 + dVar3;\n  }\n  else {\n    dVar3 = (double)(long)uVar2;\n  }" if (parenthesized_expression "((long)uVar2 < 0)" ( (binary_expression "(long)uVar2 < 0" (cast_expression "(long)uVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));\n    dVar3 = dVar3 + dVar3;\n  }" { (expression_statement "dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1));" (assignment_expression "dVar3 = (double)(uVar2 >> 1 | (ulong)(x.hi & 1))" identifier = (cast_expression "(double)(uVar2 >> 1 | (ulong)(x.hi & 1))" ( (type_descriptor "double" primitive_type) ) (parenthesized_expression "(uVar2 >> 1 | (ulong)(x.hi & 1))" ( (binary_expression "uVar2 >> 1 | (ulong)(x.hi & 1)" (binary_expression "uVar2 >> 1" identifier >> number_literal) | (call_expression "(ulong)(x.hi & 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(x.hi & 1)" ( (binary_expression "x.hi & 1" (field_expression "x.hi" identifier . field_identifier) & number_literal) )))) )))) ;) (expression_statement "dVar3 = dVar3 + dVar3;" (assignment_expression "dVar3 = dVar3 + dVar3" identifier = (binary_expression "dVar3 + dVar3" identifier + identifier)) ;) }) (else_clause "else {\n    dVar3 = (double)(long)uVar2;\n  }" else (compound_statement "{\n    dVar3 = (double)(long)uVar2;\n  }" { (expression_statement "dVar3 = (double)(long)uVar2;" (assignment_expression "dVar3 = (double)(long)uVar2" identifier = (cast_expression "(double)(long)uVar2" ( (type_descriptor "double" primitive_type) ) (cast_expression "(long)uVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }))) (if_statement "if ((long)uVar1 < 0) {\n    dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));\n    dVar4 = dVar4 + dVar4;\n  }\n  else {\n    dVar4 = (double)(long)uVar1;\n  }" if (parenthesized_expression "((long)uVar1 < 0)" ( (binary_expression "(long)uVar1 < 0" (cast_expression "(long)uVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));\n    dVar4 = dVar4 + dVar4;\n  }" { (expression_statement "dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1));" (assignment_expression "dVar4 = (double)(uVar1 >> 1 | (ulong)(x.lo & 1))" identifier = (cast_expression "(double)(uVar1 >> 1 | (ulong)(x.lo & 1))" ( (type_descriptor "double" primitive_type) ) (parenthesized_expression "(uVar1 >> 1 | (ulong)(x.lo & 1))" ( (binary_expression "uVar1 >> 1 | (ulong)(x.lo & 1)" (binary_expression "uVar1 >> 1" identifier >> number_literal) | (call_expression "(ulong)(x.lo & 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(x.lo & 1)" ( (binary_expression "x.lo & 1" (field_expression "x.lo" identifier . field_identifier) & number_literal) )))) )))) ;) (expression_statement "dVar4 = dVar4 + dVar4;" (assignment_expression "dVar4 = dVar4 + dVar4" identifier = (binary_expression "dVar4 + dVar4" identifier + identifier)) ;) }) (else_clause "else {\n    dVar4 = (double)(long)uVar1;\n  }" else (compound_statement "{\n    dVar4 = (double)(long)uVar1;\n  }" { (expression_statement "dVar4 = (double)(long)uVar1;" (assignment_expression "dVar4 = (double)(long)uVar1" identifier = (cast_expression "(double)(long)uVar1" ( (type_descriptor "double" primitive_type) ) (cast_expression "(long)uVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }))) (return_statement "return dVar3 * _DAT_0015eea0 + dVar4;" return (binary_expression "dVar3 * _DAT_0015eea0 + dVar4" (binary_expression "dVar3 * _DAT_0015eea0" identifier * identifier) + identifier) ;) })))
(translation_unit "double FUN_0010caf8(ulong param_1,ulong param_2)\n\n{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}\n\n" (function_definition "double FUN_0010caf8(ulong param_1,ulong param_2)\n\n{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}" primitive_type (function_declarator "FUN_0010caf8(ulong param_1,ulong param_2)" identifier (parameter_list "(ulong param_1,ulong param_2)" ( (parameter_declaration "ulong param_1" type_identifier identifier) , (parameter_declaration "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}" { (return_statement "return (double)param_1 * _DAT_0015eea0 + (double)param_2;" return (binary_expression "(double)param_1 * _DAT_0015eea0 + (double)param_2" (binary_expression "(double)param_1 * _DAT_0015eea0" (cast_expression "(double)param_1" ( (type_descriptor "double" primitive_type) ) identifier) * identifier) + (cast_expression "(double)param_2" ( (type_descriptor "double" primitive_type) ) identifier)) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (return_statement return (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })))
(function_definition "double FUN_0010caf8(ulong param_1,ulong param_2)\n\n{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}" (primitive_type "double") (function_declarator "FUN_0010caf8(ulong param_1,ulong param_2)" (identifier "FUN_0010caf8") (parameter_list "(ulong param_1,ulong param_2)" (( "(") (parameter_declaration "ulong param_1" (type_identifier "ulong") (identifier "param_1")) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) () ")"))) (compound_statement "{\n  return (double)param_1 * _DAT_0015eea0 + (double)param_2;\n}" ({ "{") (return_statement "return (double)param_1 * _DAT_0015eea0 + (double)param_2;" (return "return") (binary_expression "(double)param_1 * _DAT_0015eea0 + (double)param_2" (binary_expression "(double)param_1 * _DAT_0015eea0" (cast_expression "(double)param_1" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "param_1")) (* "*") (identifier "_DAT_0015eea0")) (+ "+") (cast_expression "(double)param_2" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "param_2"))) (; ";")) (} "}")))

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

double function_1(type_1 x)

{
  type_2 var_3;
  type_2 var_1;
  double var_2;
  double var_4;
  
  var_3 = x.lo;
  var_1 = x.hi;
  if ((long)var_1 < 0) {
    var_2 = (double)(var_1 >> 1 | (type_2)(x.hi & 1));
    var_2 = var_2 + var_2;
  }
  else {
    var_2 = (double)(long)var_1;
  }
  if ((long)var_3 < 0) {
    var_4 = (double)(var_3 >> 1 | (type_2)(x.lo & 1));
    var_4 = var_4 + var_4;
  }
  else {
    var_4 = (double)(long)var_3;
  }
  return var_2 * var_5 + var_4;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (return_statement (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

double MASKED(ulong param_1,ulong param_2)

{
  return (double)param_1 * _DAT_0015eea0 + (double)param_2;
}

