
/* DWARF original prototype: void save_states(Output_section * this) */

void __thiscall gold::Output_section::save_states(Output_section *this)

{
  byte bVar1;
  Elf_Xword EVar2;
  off_t oVar3;
  uint64_t uVar4;
  pointer pIVar5;
  pointer pIVar6;
  Checkpoint_output_section *pCVar7;
  
  if (this->checkpoint_ != (Checkpoint_output_section *)0x0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");
  }
  pCVar7 = (Checkpoint_output_section *)operator_new(0x50);
  EVar2 = this->flags_;
  bVar1 = this->field_0xc9;
  oVar3 = this->first_input_offset_;
  uVar4 = this->addralign_;
  pCVar7->_vptr_Checkpoint_output_section =
       (_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8;
  pCVar7->flags_ = EVar2;
  pCVar7->input_sections_ = &this->input_sections_;
  pIVar5 = (this->input_sections_).
           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
           ._M_impl._M_finish;
  pIVar6 = (this->input_sections_).
           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
           ._M_impl._M_start;
  pCVar7->addralign_ = uVar4;
  (pCVar7->input_sections_copy_).
  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
  ._M_impl._M_start = (pointer)0x0;
  pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5;
  (pCVar7->input_sections_copy_).
  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
  ._M_impl._M_finish = (pointer)0x0;
  (pCVar7->input_sections_copy_).
  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
  ._M_impl._M_end_of_storage = (pointer)0x0;
  pCVar7->first_input_offset_ = oVar3;
  pCVar7->attached_input_sections_are_sorted_ = (bool)(bVar1 >> 4 & 1);
  this->checkpoint_ = pCVar7;
  if ((this->fills_).
      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.
      _M_impl._M_finish ==
      (this->fills_).
      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.
      _M_impl._M_start) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/output.cc",0xf87,"save_states");
}



void FUN_003caf90(long param_1)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined8 *puVar7;
  
  if (*(long *)(param_1 + 0xe8) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");
  }
  puVar7 = (undefined8 *)FUN_0049cb60(0x50);
  uVar2 = *(undefined8 *)(param_1 + 0x70);
  bVar1 = *(byte *)(param_1 + 0xc9);
  uVar3 = *(undefined8 *)(param_1 + 0xa0);
  uVar4 = *(undefined8 *)(param_1 + 0x30);
  *puVar7 = &PTR_FUN_006571d8;
  puVar7[2] = uVar2;
  puVar7[3] = param_1 + 0x88;
  lVar5 = *(long *)(param_1 + 0x90);
  lVar6 = *(long *)(param_1 + 0x88);
  puVar7[1] = uVar4;
  puVar7[5] = 0;
  puVar7[4] = lVar5 - lVar6 >> 5;
  puVar7[6] = 0;
  puVar7[7] = 0;
  puVar7[8] = uVar3;
  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;
  *(undefined8 **)(param_1 + 0xe8) = puVar7;
  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");
}


PUSH RBX
CMP qword ptr [RDI + 0xe8],0x0
JNZ 0x003cb033
MOV RBX,RDI
MOV EDI,0x50
CALL 0x0049cb60
MOV RCX,qword ptr [RBX + 0x70]
MOVZX EDX,byte ptr [RBX + 0xc9]
LEA R8,[0x6571d8]
MOV RSI,qword ptr [RBX + 0xa0]
MOV RDI,qword ptr [RBX + 0x30]
MOV qword ptr [RAX],R8
MOV qword ptr [RAX + 0x10],RCX
LEA RCX,[RBX + 0x88]
SHR DL,0x4
MOV qword ptr [RAX + 0x18],RCX
MOV RCX,qword ptr [RBX + 0x90]
AND EDX,0x1
SUB RCX,qword ptr [RBX + 0x88]
MOV qword ptr [RAX + 0x8],RDI
SAR RCX,0x5
MOV qword ptr [RAX + 0x28],0x0
MOV qword ptr [RAX + 0x20],RCX
MOV qword ptr [RAX + 0x30],0x0
MOV qword ptr [RAX + 0x38],0x0
MOV qword ptr [RAX + 0x40],RSI
MOV byte ptr [RAX + 0x48],DL
MOV qword ptr [RBX + 0xe8],RAX
MOV RAX,qword ptr [RBX + 0xa8]
CMP qword ptr [RBX + 0xb0],RAX
JNZ 0x003cb04b
POP RBX
RET
LEA RDX,[0x57b0b8]
MOV ESI,0xf80
LEA RDI,[0x579596]
CALL 0x00352af0
LEA RDX,[0x57b0b8]
MOV ESI,0xf87
LEA RDI,[0x579596]
CALL 0x00352af0
(translation_unit "void FUN_003caf90(long param_1)\n\n{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}\n\n" (function_definition "void FUN_003caf90(long param_1)\n\n{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}" primitive_type (function_declarator "FUN_003caf90(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (if_statement "if (*(long *)(param_1 + 0xe8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0xe8) != 0)" ( (binary_expression "*(long *)(param_1 + 0xe8) != 0" (pointer_expression "*(long *)(param_1 + 0xe8)" * (cast_expression "(long *)(param_1 + 0xe8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe8)" ( (binary_expression "param_1 + 0xe8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }" { comment (expression_statement "FUN_00352af0("../../gold/output.cc",0xf80,"save_states");" (call_expression "FUN_00352af0("../../gold/output.cc",0xf80,"save_states")" identifier (argument_list "("../../gold/output.cc",0xf80,"save_states")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""save_states"" " string_content ") ))) ;) })) (expression_statement "puVar7 = (undefined8 *)FUN_0049cb60(0x50);" (assignment_expression "puVar7 = (undefined8 *)FUN_0049cb60(0x50)" identifier = (cast_expression "(undefined8 *)FUN_0049cb60(0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049cb60(0x50)" identifier (argument_list "(0x50)" ( number_literal ))))) ;) (expression_statement "uVar2 = *(undefined8 *)(param_1 + 0x70);" (assignment_expression "uVar2 = *(undefined8 *)(param_1 + 0x70)" identifier = (pointer_expression "*(undefined8 *)(param_1 + 0x70)" * (cast_expression "(undefined8 *)(param_1 + 0x70)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "bVar1 = *(byte *)(param_1 + 0xc9);" (assignment_expression "bVar1 = *(byte *)(param_1 + 0xc9)" identifier = (pointer_expression "*(byte *)(param_1 + 0xc9)" * (cast_expression "(byte *)(param_1 + 0xc9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc9)" ( (binary_expression "param_1 + 0xc9" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(undefined8 *)(param_1 + 0xa0);" (assignment_expression "uVar3 = *(undefined8 *)(param_1 + 0xa0)" identifier = (pointer_expression "*(undefined8 *)(param_1 + 0xa0)" * (cast_expression "(undefined8 *)(param_1 + 0xa0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa0)" ( (binary_expression "param_1 + 0xa0" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(undefined8 *)(param_1 + 0x30);" (assignment_expression "uVar4 = *(undefined8 *)(param_1 + 0x30)" identifier = (pointer_expression "*(undefined8 *)(param_1 + 0x30)" * (cast_expression "(undefined8 *)(param_1 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "*puVar7 = &PTR_FUN_006571d8;" (assignment_expression "*puVar7 = &PTR_FUN_006571d8" (pointer_expression "*puVar7" * identifier) = (pointer_expression "&PTR_FUN_006571d8" & identifier)) ;) (expression_statement "puVar7[2] = uVar2;" (assignment_expression "puVar7[2] = uVar2" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = param_1 + 0x88;" (assignment_expression "puVar7[3] = param_1 + 0x88" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = (binary_expression "param_1 + 0x88" identifier + number_literal)) ;) (expression_statement "lVar5 = *(long *)(param_1 + 0x90);" (assignment_expression "lVar5 = *(long *)(param_1 + 0x90)" identifier = (pointer_expression "*(long *)(param_1 + 0x90)" * (cast_expression "(long *)(param_1 + 0x90)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x90)" ( (binary_expression "param_1 + 0x90" identifier + number_literal) ))))) ;) (expression_statement "lVar6 = *(long *)(param_1 + 0x88);" (assignment_expression "lVar6 = *(long *)(param_1 + 0x88)" identifier = (pointer_expression "*(long *)(param_1 + 0x88)" * (cast_expression "(long *)(param_1 + 0x88)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x88)" ( (binary_expression "param_1 + 0x88" identifier + number_literal) ))))) ;) (expression_statement "puVar7[1] = uVar4;" (assignment_expression "puVar7[1] = uVar4" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[5] = 0;" (assignment_expression "puVar7[5] = 0" (subscript_expression "puVar7[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7[4] = lVar5 - lVar6 >> 5;" (assignment_expression "puVar7[4] = lVar5 - lVar6 >> 5" (subscript_expression "puVar7[4]" identifier [ number_literal ]) = (binary_expression "lVar5 - lVar6 >> 5" (binary_expression "lVar5 - lVar6" identifier - identifier) >> number_literal)) ;) (expression_statement "puVar7[6] = 0;" (assignment_expression "puVar7[6] = 0" (subscript_expression "puVar7[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7[7] = 0;" (assignment_expression "puVar7[7] = 0" (subscript_expression "puVar7[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7[8] = uVar3;" (assignment_expression "puVar7[8] = uVar3" (subscript_expression "puVar7[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;" (assignment_expression "*(byte *)(puVar7 + 9) = bVar1 >> 4 & 1" (pointer_expression "*(byte *)(puVar7 + 9)" * (cast_expression "(byte *)(puVar7 + 9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 9)" ( (binary_expression "puVar7 + 9" identifier + number_literal) )))) = (binary_expression "bVar1 >> 4 & 1" (binary_expression "bVar1 >> 4" identifier >> number_literal) & number_literal)) ;) (expression_statement "*(undefined8 **)(param_1 + 0xe8) = puVar7;" (assignment_expression "*(undefined8 **)(param_1 + 0xe8) = puVar7" (pointer_expression "*(undefined8 **)(param_1 + 0xe8)" * (cast_expression "(undefined8 **)(param_1 + 0xe8)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xe8)" ( (binary_expression "param_1 + 0xe8" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8))" ( (binary_expression "*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)" (pointer_expression "*(long *)(param_1 + 0xb0)" * (cast_expression "(long *)(param_1 + 0xb0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb0)" ( (binary_expression "param_1 + 0xb0" identifier + number_literal) )))) == (pointer_expression "*(long *)(param_1 + 0xa8)" * (cast_expression "(long *)(param_1 + 0xa8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa8)" ( (binary_expression "param_1 + 0xa8" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) comment (expression_statement "FUN_00352af0("../../gold/output.cc",0xf87,"save_states");" (call_expression "FUN_00352af0("../../gold/output.cc",0xf87,"save_states")" identifier (argument_list "("../../gold/output.cc",0xf87,"save_states")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""save_states"" " string_content ") ))) ;) })))
(translation_unit "/* DWARF original prototype: void save_states(Output_section * this) */\n\nvoid __thiscall gold::Output_section::save_states(Output_section *this)\n\n{\n  byte bVar1;\n  Elf_Xword EVar2;\n  off_t oVar3;\n  uint64_t uVar4;\n  pointer pIVar5;\n  pointer pIVar6;\n  Checkpoint_output_section *pCVar7;\n  \n  if (this->checkpoint_ != (Checkpoint_output_section *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");\n  }\n  pCVar7 = (Checkpoint_output_section *)operator_new(0x50);\n  EVar2 = this->flags_;\n  bVar1 = this->field_0xc9;\n  oVar3 = this->first_input_offset_;\n  uVar4 = this->addralign_;\n  pCVar7->_vptr_Checkpoint_output_section =\n       (_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8;\n  pCVar7->flags_ = EVar2;\n  pCVar7->input_sections_ = &this->input_sections_;\n  pIVar5 = (this->input_sections_).\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_finish;\n  pIVar6 = (this->input_sections_).\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_start;\n  pCVar7->addralign_ = uVar4;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_start = (pointer)0x0;\n  pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0;\n  pCVar7->first_input_offset_ = oVar3;\n  pCVar7->attached_input_sections_are_sorted_ = (bool)(bVar1 >> 4 & 1);\n  this->checkpoint_ = pCVar7;\n  if ((this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_start) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.cc",0xf87,"save_states");\n}\n\n" comment (function_definition "void __thiscall gold::Output_section::save_states(Output_section *this)\n\n{\n  byte bVar1;\n  Elf_Xword EVar2;\n  off_t oVar3;\n  uint64_t uVar4;\n  pointer pIVar5;\n  pointer pIVar6;\n  Checkpoint_output_section *pCVar7;\n  \n  if (this->checkpoint_ != (Checkpoint_output_section *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");\n  }\n  pCVar7 = (Checkpoint_output_section *)operator_new(0x50);\n  EVar2 = this->flags_;\n  bVar1 = this->field_0xc9;\n  oVar3 = this->first_input_offset_;\n  uVar4 = this->addralign_;\n  pCVar7->_vptr_Checkpoint_output_section =\n       (_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8;\n  pCVar7->flags_ = EVar2;\n  pCVar7->input_sections_ = &this->input_sections_;\n  pIVar5 = (this->input_sections_).\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_finish;\n  pIVar6 = (this->input_sections_).\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_start;\n  pCVar7->addralign_ = uVar4;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_start = (pointer)0x0;\n  pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0;\n  pCVar7->first_input_offset_ = oVar3;\n  pCVar7->attached_input_sections_are_sorted_ = (bool)(bVar1 >> 4 & 1);\n  this->checkpoint_ = pCVar7;\n  if ((this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_start) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.cc",0xf87,"save_states");\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_section::" identifier : : identifier : :) (function_declarator "save_states(Output_section *this)" identifier (parameter_list "(Output_section *this)" ( (parameter_declaration "Output_section *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  Elf_Xword EVar2;\n  off_t oVar3;\n  uint64_t uVar4;\n  pointer pIVar5;\n  pointer pIVar6;\n  Checkpoint_output_section *pCVar7;\n  \n  if (this->checkpoint_ != (Checkpoint_output_section *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");\n  }\n  pCVar7 = (Checkpoint_output_section *)operator_new(0x50);\n  EVar2 = this->flags_;\n  bVar1 = this->field_0xc9;\n  oVar3 = this->first_input_offset_;\n  uVar4 = this->addralign_;\n  pCVar7->_vptr_Checkpoint_output_section =\n       (_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8;\n  pCVar7->flags_ = EVar2;\n  pCVar7->input_sections_ = &this->input_sections_;\n  pIVar5 = (this->input_sections_).\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_finish;\n  pIVar6 = (this->input_sections_).\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_start;\n  pCVar7->addralign_ = uVar4;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_start = (pointer)0x0;\n  pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0;\n  (pCVar7->input_sections_copy_).\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0;\n  pCVar7->first_input_offset_ = oVar3;\n  pCVar7->attached_input_sections_are_sorted_ = (bool)(bVar1 >> 4 & 1);\n  this->checkpoint_ = pCVar7;\n  if ((this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_start) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.cc",0xf87,"save_states");\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "Elf_Xword EVar2;" type_identifier identifier ;) (declaration "off_t oVar3;" type_identifier identifier ;) (declaration "uint64_t uVar4;" primitive_type identifier ;) (declaration "pointer pIVar5;" type_identifier identifier ;) (declaration "pointer pIVar6;" type_identifier identifier ;) (declaration "Checkpoint_output_section *pCVar7;" type_identifier (pointer_declarator "*pCVar7" * identifier) ;) (if_statement "if (this->checkpoint_ != (Checkpoint_output_section *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");\n  }" if (parenthesized_expression "(this->checkpoint_ != (Checkpoint_output_section *)0x0)" ( (binary_expression "this->checkpoint_ != (Checkpoint_output_section *)0x0" (field_expression "this->checkpoint_" identifier -> field_identifier) != (cast_expression "(Checkpoint_output_section *)0x0" ( (type_descriptor "Checkpoint_output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/output.cc",0xf80,"save_states");" (call_expression "do_gold_unreachable("../../gold/output.cc",0xf80,"save_states")" identifier (argument_list "("../../gold/output.cc",0xf80,"save_states")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""save_states"" " string_content ") ))) ;) })) (expression_statement "pCVar7 = (Checkpoint_output_section *)operator_new(0x50);" (assignment_expression "pCVar7 = (Checkpoint_output_section *)operator_new(0x50)" identifier = (cast_expression "(Checkpoint_output_section *)operator_new(0x50)" ( (type_descriptor "Checkpoint_output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x50)" identifier (argument_list "(0x50)" ( number_literal ))))) ;) (expression_statement "EVar2 = this->flags_;" (assignment_expression "EVar2 = this->flags_" identifier = (field_expression "this->flags_" identifier -> field_identifier)) ;) (expression_statement "bVar1 = this->field_0xc9;" (assignment_expression "bVar1 = this->field_0xc9" identifier = (field_expression "this->field_0xc9" identifier -> field_identifier)) ;) (expression_statement "oVar3 = this->first_input_offset_;" (assignment_expression "oVar3 = this->first_input_offset_" identifier = (field_expression "this->first_input_offset_" identifier -> field_identifier)) ;) (expression_statement "uVar4 = this->addralign_;" (assignment_expression "uVar4 = this->addralign_" identifier = (field_expression "this->addralign_" identifier -> field_identifier)) ;) (expression_statement "pCVar7->_vptr_Checkpoint_output_section =\n       (_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8;" (assignment_expression "pCVar7->_vptr_Checkpoint_output_section =\n       (_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8" (field_expression "pCVar7->_vptr_Checkpoint_output_section" identifier -> field_identifier) = (cast_expression "(_func_int_varargs **)&PTR__Checkpoint_output_section_006571d8" ( (type_descriptor "_func_int_varargs **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&PTR__Checkpoint_output_section_006571d8" & identifier))) ;) (expression_statement "pCVar7->flags_ = EVar2;" (assignment_expression "pCVar7->flags_ = EVar2" (field_expression "pCVar7->flags_" identifier -> field_identifier) = identifier) ;) (expression_statement "pCVar7->input_sections_ = &this->input_sections_;" (assignment_expression "pCVar7->input_sections_ = &this->input_sections_" (field_expression "pCVar7->input_sections_" identifier -> field_identifier) = (pointer_expression "&this->input_sections_" & (field_expression "this->input_sections_" identifier -> field_identifier))) ;) (ERROR "pIVar5 = (this->input_sections_).\n           super__Vector_base<gold::" (assignment_expression "pIVar5 = (this->input_sections_).\n           super__Vector_base<gold" identifier = (binary_expression "(this->input_sections_).\n           super__Vector_base<gold" (field_expression "(this->input_sections_).\n           super__Vector_base" (parenthesized_expression "(this->input_sections_)" ( (field_expression "this->input_sections_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_finish;" statement_identifier (ERROR "::Input_section,_std::allocator<gold:" : : (comma_expression "Input_section,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Output_section::Input_section>_>\n           ._M_impl._M_finish;" statement_identifier : (ERROR ":" :) (expression_statement "Input_section>_>\n           ._M_impl._M_finish;" (field_expression "Input_section>_>\n           ._M_impl._M_finish" (field_expression "Input_section>_>\n           ._M_impl" (binary_expression "Input_section>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (ERROR "pIVar6 = (this->input_sections_).\n           super__Vector_base<gold::" (assignment_expression "pIVar6 = (this->input_sections_).\n           super__Vector_base<gold" identifier = (binary_expression "(this->input_sections_).\n           super__Vector_base<gold" (field_expression "(this->input_sections_).\n           super__Vector_base" (parenthesized_expression "(this->input_sections_)" ( (field_expression "this->input_sections_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           ._M_impl._M_start;" statement_identifier (ERROR "::Input_section,_std::allocator<gold:" : : (comma_expression "Input_section,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Output_section::Input_section>_>\n           ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Input_section>_>\n           ._M_impl._M_start;" (field_expression "Input_section>_>\n           ._M_impl._M_start" (field_expression "Input_section>_>\n           ._M_impl" (binary_expression "Input_section>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (expression_statement "pCVar7->addralign_ = uVar4;" (assignment_expression "pCVar7->addralign_ = uVar4" (field_expression "pCVar7->addralign_" identifier -> field_identifier) = identifier) ;) (ERROR "(pCVar7->input_sections_copy_).\n  super__Vector_base<gold::" (binary_expression "(pCVar7->input_sections_copy_).\n  super__Vector_base<gold" (field_expression "(pCVar7->input_sections_copy_).\n  super__Vector_base" (parenthesized_expression "(pCVar7->input_sections_copy_)" ( (field_expression "pCVar7->input_sections_copy_" identifier -> field_identifier) )) . field_identifier) < identifier) : :) (labeled_statement "Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_start = (pointer)0x0;" statement_identifier (ERROR "::Input_section,_std::allocator<gold:" : : (comma_expression "Input_section,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Output_section::Input_section>_>\n  ._M_impl._M_start = (pointer)0x0;" statement_identifier : (ERROR ":" :) (expression_statement "Input_section>_>\n  ._M_impl._M_start = (pointer)0x0;" (assignment_expression "Input_section>_>\n  ._M_impl._M_start = (pointer)0x0" (field_expression "Input_section>_>\n  ._M_impl._M_start" (field_expression "Input_section>_>\n  ._M_impl" (binary_expression "Input_section>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;))) (expression_statement "pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5;" (assignment_expression "pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5" (field_expression "pCVar7->input_sections_size_" identifier -> field_identifier) = (binary_expression "(long)pIVar5 - (long)pIVar6 >> 5" (binary_expression "(long)pIVar5 - (long)pIVar6" (cast_expression "(long)pIVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pIVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (ERROR "(pCVar7->input_sections_copy_).\n  super__Vector_base<gold::" (binary_expression "(pCVar7->input_sections_copy_).\n  super__Vector_base<gold" (field_expression "(pCVar7->input_sections_copy_).\n  super__Vector_base" (parenthesized_expression "(pCVar7->input_sections_copy_)" ( (field_expression "pCVar7->input_sections_copy_" identifier -> field_identifier) )) . field_identifier) < identifier) : :) (labeled_statement "Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0;" statement_identifier (ERROR "::Input_section,_std::allocator<gold:" : : (comma_expression "Input_section,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Output_section::Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0;" statement_identifier : (ERROR ":" :) (expression_statement "Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0;" (assignment_expression "Input_section>_>\n  ._M_impl._M_finish = (pointer)0x0" (field_expression "Input_section>_>\n  ._M_impl._M_finish" (field_expression "Input_section>_>\n  ._M_impl" (binary_expression "Input_section>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;))) (ERROR "(pCVar7->input_sections_copy_).\n  super__Vector_base<gold::" (binary_expression "(pCVar7->input_sections_copy_).\n  super__Vector_base<gold" (field_expression "(pCVar7->input_sections_copy_).\n  super__Vector_base" (parenthesized_expression "(pCVar7->input_sections_copy_)" ( (field_expression "pCVar7->input_sections_copy_" identifier -> field_identifier) )) . field_identifier) < identifier) : :) (labeled_statement "Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0;" statement_identifier (ERROR "::Input_section,_std::allocator<gold:" : : (comma_expression "Input_section,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Output_section::Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0;" statement_identifier : (ERROR ":" :) (expression_statement "Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0;" (assignment_expression "Input_section>_>\n  ._M_impl._M_end_of_storage = (pointer)0x0" (field_expression "Input_section>_>\n  ._M_impl._M_end_of_storage" (field_expression "Input_section>_>\n  ._M_impl" (binary_expression "Input_section>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;))) (expression_statement "pCVar7->first_input_offset_ = oVar3;" (assignment_expression "pCVar7->first_input_offset_ = oVar3" (field_expression "pCVar7->first_input_offset_" identifier -> field_identifier) = identifier) ;) (expression_statement "pCVar7->attached_input_sections_are_sorted_ = (bool)(bVar1 >> 4 & 1);" (assignment_expression "pCVar7->attached_input_sections_are_sorted_ = (bool)(bVar1 >> 4 & 1)" (field_expression "pCVar7->attached_input_sections_are_sorted_" identifier -> field_identifier) = (cast_expression "(bool)(bVar1 >> 4 & 1)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar1 >> 4 & 1)" ( (binary_expression "bVar1 >> 4 & 1" (binary_expression "bVar1 >> 4" identifier >> number_literal) & number_literal) )))) ;) (expression_statement "this->checkpoint_ = pCVar7;" (assignment_expression "this->checkpoint_ = pCVar7" (field_expression "this->checkpoint_" identifier -> field_identifier) = identifier) ;) (if_statement "if ((this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_start) {\n    return;\n  }" if (parenthesized_expression "((this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_start)" ( (ERROR "(this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std::allocator<gold::Output_section::" (comma_expression "(this->fills_).\n      super__Vector_base<gold::Output_section::Fill,_std" (binary_expression "(this->fills_).\n      super__Vector_base<gold" (field_expression "(this->fills_).\n      super__Vector_base" (parenthesized_expression "(this->fills_)" ( (field_expression "this->fills_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Output_section::Fill" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : : (binary_expression "Fill>_>.\n      _M_impl._M_finish ==\n      (this->fills_).\n      super__Vector_base<gold" (field_expression "Fill>_>.\n      _M_impl._M_finish" (field_expression "Fill>_>.\n      _M_impl" (binary_expression "Fill>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) == (binary_expression "(this->fills_).\n      super__Vector_base<gold" (field_expression "(this->fills_).\n      super__Vector_base" (parenthesized_expression "(this->fills_)" ( (field_expression "this->fills_" identifier -> field_identifier) )) . field_identifier) < identifier)) : : identifier : : (comma_expression "Fill,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (field_expression "Fill>_>.\n      _M_impl._M_start" (field_expression "Fill>_>.\n      _M_impl" (binary_expression "Fill>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) comment (expression_statement "do_gold_unreachable("../../gold/output.cc",0xf87,"save_states");" (call_expression "do_gold_unreachable("../../gold/output.cc",0xf87,"save_states")" identifier (argument_list "("../../gold/output.cc",0xf87,"save_states")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""save_states"" " string_content ") ))) ;) })))
(translation_unit "void FUN_003caf90(long param_1)\n\n{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    \n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}\n\n" (function_definition "void FUN_003caf90(long param_1)\n\n{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    \n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}" primitive_type (function_declarator "FUN_003caf90(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    \n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (if_statement "if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0xe8) != 0)" ( (binary_expression "*(long *)(param_1 + 0xe8) != 0" (pointer_expression "*(long *)(param_1 + 0xe8)" * (cast_expression "(long *)(param_1 + 0xe8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe8)" ( (binary_expression "param_1 + 0xe8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }" { (expression_statement "FUN_00352af0("../../gold/output.cc",0xf80,"save_states");" (call_expression "FUN_00352af0("../../gold/output.cc",0xf80,"save_states")" identifier (argument_list "("../../gold/output.cc",0xf80,"save_states")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""save_states"" " string_content ") ))) ;) })) (expression_statement "puVar7 = (undefined8 *)FUN_0049cb60(0x50);" (assignment_expression "puVar7 = (undefined8 *)FUN_0049cb60(0x50)" identifier = (cast_expression "(undefined8 *)FUN_0049cb60(0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049cb60(0x50)" identifier (argument_list "(0x50)" ( number_literal ))))) ;) (expression_statement "uVar2 = *(undefined8 *)(param_1 + 0x70);" (assignment_expression "uVar2 = *(undefined8 *)(param_1 + 0x70)" identifier = (pointer_expression "*(undefined8 *)(param_1 + 0x70)" * (cast_expression "(undefined8 *)(param_1 + 0x70)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "bVar1 = *(byte *)(param_1 + 0xc9);" (assignment_expression "bVar1 = *(byte *)(param_1 + 0xc9)" identifier = (pointer_expression "*(byte *)(param_1 + 0xc9)" * (cast_expression "(byte *)(param_1 + 0xc9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc9)" ( (binary_expression "param_1 + 0xc9" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(undefined8 *)(param_1 + 0xa0);" (assignment_expression "uVar3 = *(undefined8 *)(param_1 + 0xa0)" identifier = (pointer_expression "*(undefined8 *)(param_1 + 0xa0)" * (cast_expression "(undefined8 *)(param_1 + 0xa0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa0)" ( (binary_expression "param_1 + 0xa0" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(undefined8 *)(param_1 + 0x30);" (assignment_expression "uVar4 = *(undefined8 *)(param_1 + 0x30)" identifier = (pointer_expression "*(undefined8 *)(param_1 + 0x30)" * (cast_expression "(undefined8 *)(param_1 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "*puVar7 = &PTR_FUN_006571d8;" (assignment_expression "*puVar7 = &PTR_FUN_006571d8" (pointer_expression "*puVar7" * identifier) = (pointer_expression "&PTR_FUN_006571d8" & identifier)) ;) (expression_statement "puVar7[2] = uVar2;" (assignment_expression "puVar7[2] = uVar2" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = param_1 + 0x88;" (assignment_expression "puVar7[3] = param_1 + 0x88" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = (binary_expression "param_1 + 0x88" identifier + number_literal)) ;) (expression_statement "lVar5 = *(long *)(param_1 + 0x90);" (assignment_expression "lVar5 = *(long *)(param_1 + 0x90)" identifier = (pointer_expression "*(long *)(param_1 + 0x90)" * (cast_expression "(long *)(param_1 + 0x90)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x90)" ( (binary_expression "param_1 + 0x90" identifier + number_literal) ))))) ;) (expression_statement "lVar6 = *(long *)(param_1 + 0x88);" (assignment_expression "lVar6 = *(long *)(param_1 + 0x88)" identifier = (pointer_expression "*(long *)(param_1 + 0x88)" * (cast_expression "(long *)(param_1 + 0x88)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x88)" ( (binary_expression "param_1 + 0x88" identifier + number_literal) ))))) ;) (expression_statement "puVar7[1] = uVar4;" (assignment_expression "puVar7[1] = uVar4" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[5] = 0;" (assignment_expression "puVar7[5] = 0" (subscript_expression "puVar7[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7[4] = lVar5 - lVar6 >> 5;" (assignment_expression "puVar7[4] = lVar5 - lVar6 >> 5" (subscript_expression "puVar7[4]" identifier [ number_literal ]) = (binary_expression "lVar5 - lVar6 >> 5" (binary_expression "lVar5 - lVar6" identifier - identifier) >> number_literal)) ;) (expression_statement "puVar7[6] = 0;" (assignment_expression "puVar7[6] = 0" (subscript_expression "puVar7[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7[7] = 0;" (assignment_expression "puVar7[7] = 0" (subscript_expression "puVar7[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7[8] = uVar3;" (assignment_expression "puVar7[8] = uVar3" (subscript_expression "puVar7[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;" (assignment_expression "*(byte *)(puVar7 + 9) = bVar1 >> 4 & 1" (pointer_expression "*(byte *)(puVar7 + 9)" * (cast_expression "(byte *)(puVar7 + 9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 9)" ( (binary_expression "puVar7 + 9" identifier + number_literal) )))) = (binary_expression "bVar1 >> 4 & 1" (binary_expression "bVar1 >> 4" identifier >> number_literal) & number_literal)) ;) (expression_statement "*(undefined8 **)(param_1 + 0xe8) = puVar7;" (assignment_expression "*(undefined8 **)(param_1 + 0xe8) = puVar7" (pointer_expression "*(undefined8 **)(param_1 + 0xe8)" * (cast_expression "(undefined8 **)(param_1 + 0xe8)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xe8)" ( (binary_expression "param_1 + 0xe8" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8))" ( (binary_expression "*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)" (pointer_expression "*(long *)(param_1 + 0xb0)" * (cast_expression "(long *)(param_1 + 0xb0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb0)" ( (binary_expression "param_1 + 0xb0" identifier + number_literal) )))) == (pointer_expression "*(long *)(param_1 + 0xa8)" * (cast_expression "(long *)(param_1 + 0xa8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa8)" ( (binary_expression "param_1 + 0xa8" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "FUN_00352af0("../../gold/output.cc",0xf87,"save_states");" (call_expression "FUN_00352af0("../../gold/output.cc",0xf87,"save_states")" identifier (argument_list "("../../gold/output.cc",0xf87,"save_states")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""save_states"" " string_content ") ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression IDENT - IDENT) >> LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT >> LIT) & LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))
(function_definition "void FUN_003caf90(long param_1)\n\n{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    \n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}" (primitive_type "void") (function_declarator "FUN_003caf90(long param_1)" (identifier "FUN_003caf90") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  byte bVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  long lVar6;\n  undefined8 *puVar7;\n  \n  if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }\n  puVar7 = (undefined8 *)FUN_0049cb60(0x50);\n  uVar2 = *(undefined8 *)(param_1 + 0x70);\n  bVar1 = *(byte *)(param_1 + 0xc9);\n  uVar3 = *(undefined8 *)(param_1 + 0xa0);\n  uVar4 = *(undefined8 *)(param_1 + 0x30);\n  *puVar7 = &PTR_FUN_006571d8;\n  puVar7[2] = uVar2;\n  puVar7[3] = param_1 + 0x88;\n  lVar5 = *(long *)(param_1 + 0x90);\n  lVar6 = *(long *)(param_1 + 0x88);\n  puVar7[1] = uVar4;\n  puVar7[5] = 0;\n  puVar7[4] = lVar5 - lVar6 >> 5;\n  puVar7[6] = 0;\n  puVar7[7] = 0;\n  puVar7[8] = uVar3;\n  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;\n  *(undefined8 **)(param_1 + 0xe8) = puVar7;\n  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }\n                    \n  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "undefined8 *puVar7;" (type_identifier "undefined8") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (if_statement "if (*(long *)(param_1 + 0xe8) != 0) {\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0xe8) != 0)" (( "(") (binary_expression "*(long *)(param_1 + 0xe8) != 0" (pointer_expression "*(long *)(param_1 + 0xe8)" (* "*") (cast_expression "(long *)(param_1 + 0xe8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe8)" (( "(") (binary_expression "param_1 + 0xe8" (identifier "param_1") (+ "+") (number_literal "0xe8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");\n  }" ({ "{") (expression_statement "FUN_00352af0("../../gold/output.cc",0xf80,"save_states");" (call_expression "FUN_00352af0("../../gold/output.cc",0xf80,"save_states")" (identifier "FUN_00352af0") (argument_list "("../../gold/output.cc",0xf80,"save_states")" (( "(") (string_literal ""../../gold/output.cc"" (" """) (string_content "../../gold/output.cc") (" """)) (, ",") (number_literal "0xf80") (, ",") (string_literal ""save_states"" (" """) (string_content "save_states") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "puVar7 = (undefined8 *)FUN_0049cb60(0x50);" (assignment_expression "puVar7 = (undefined8 *)FUN_0049cb60(0x50)" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)FUN_0049cb60(0x50)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0049cb60(0x50)" (identifier "FUN_0049cb60") (argument_list "(0x50)" (( "(") (number_literal "0x50") () ")"))))) (; ";")) (expression_statement "uVar2 = *(undefined8 *)(param_1 + 0x70);" (assignment_expression "uVar2 = *(undefined8 *)(param_1 + 0x70)" (identifier "uVar2") (= "=") (pointer_expression "*(undefined8 *)(param_1 + 0x70)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x70)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")"))))) (; ";")) (expression_statement "bVar1 = *(byte *)(param_1 + 0xc9);" (assignment_expression "bVar1 = *(byte *)(param_1 + 0xc9)" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)(param_1 + 0xc9)" (* "*") (cast_expression "(byte *)(param_1 + 0xc9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc9)" (( "(") (binary_expression "param_1 + 0xc9" (identifier "param_1") (+ "+") (number_literal "0xc9")) () ")"))))) (; ";")) (expression_statement "uVar3 = *(undefined8 *)(param_1 + 0xa0);" (assignment_expression "uVar3 = *(undefined8 *)(param_1 + 0xa0)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined8 *)(param_1 + 0xa0)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0xa0)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xa0)" (( "(") (binary_expression "param_1 + 0xa0" (identifier "param_1") (+ "+") (number_literal "0xa0")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(undefined8 *)(param_1 + 0x30);" (assignment_expression "uVar4 = *(undefined8 *)(param_1 + 0x30)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined8 *)(param_1 + 0x30)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "*puVar7 = &PTR_FUN_006571d8;" (assignment_expression "*puVar7 = &PTR_FUN_006571d8" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (pointer_expression "&PTR_FUN_006571d8" (& "&") (identifier "PTR_FUN_006571d8"))) (; ";")) (expression_statement "puVar7[2] = uVar2;" (assignment_expression "puVar7[2] = uVar2" (subscript_expression "puVar7[2]" (identifier "puVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "puVar7[3] = param_1 + 0x88;" (assignment_expression "puVar7[3] = param_1 + 0x88" (subscript_expression "puVar7[3]" (identifier "puVar7") ([ "[") (number_literal "3") (] "]")) (= "=") (binary_expression "param_1 + 0x88" (identifier "param_1") (+ "+") (number_literal "0x88"))) (; ";")) (expression_statement "lVar5 = *(long *)(param_1 + 0x90);" (assignment_expression "lVar5 = *(long *)(param_1 + 0x90)" (identifier "lVar5") (= "=") (pointer_expression "*(long *)(param_1 + 0x90)" (* "*") (cast_expression "(long *)(param_1 + 0x90)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x90)" (( "(") (binary_expression "param_1 + 0x90" (identifier "param_1") (+ "+") (number_literal "0x90")) () ")"))))) (; ";")) (expression_statement "lVar6 = *(long *)(param_1 + 0x88);" (assignment_expression "lVar6 = *(long *)(param_1 + 0x88)" (identifier "lVar6") (= "=") (pointer_expression "*(long *)(param_1 + 0x88)" (* "*") (cast_expression "(long *)(param_1 + 0x88)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x88)" (( "(") (binary_expression "param_1 + 0x88" (identifier "param_1") (+ "+") (number_literal "0x88")) () ")"))))) (; ";")) (expression_statement "puVar7[1] = uVar4;" (assignment_expression "puVar7[1] = uVar4" (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar7[5] = 0;" (assignment_expression "puVar7[5] = 0" (subscript_expression "puVar7[5]" (identifier "puVar7") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7[4] = lVar5 - lVar6 >> 5;" (assignment_expression "puVar7[4] = lVar5 - lVar6 >> 5" (subscript_expression "puVar7[4]" (identifier "puVar7") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "lVar5 - lVar6 >> 5" (binary_expression "lVar5 - lVar6" (identifier "lVar5") (- "-") (identifier "lVar6")) (>> ">>") (number_literal "5"))) (; ";")) (expression_statement "puVar7[6] = 0;" (assignment_expression "puVar7[6] = 0" (subscript_expression "puVar7[6]" (identifier "puVar7") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7[7] = 0;" (assignment_expression "puVar7[7] = 0" (subscript_expression "puVar7[7]" (identifier "puVar7") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7[8] = uVar3;" (assignment_expression "puVar7[8] = uVar3" (subscript_expression "puVar7[8]" (identifier "puVar7") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;" (assignment_expression "*(byte *)(puVar7 + 9) = bVar1 >> 4 & 1" (pointer_expression "*(byte *)(puVar7 + 9)" (* "*") (cast_expression "(byte *)(puVar7 + 9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + 9)" (( "(") (binary_expression "puVar7 + 9" (identifier "puVar7") (+ "+") (number_literal "9")) () ")")))) (= "=") (binary_expression "bVar1 >> 4 & 1" (binary_expression "bVar1 >> 4" (identifier "bVar1") (>> ">>") (number_literal "4")) (& "&") (number_literal "1"))) (; ";")) (expression_statement "*(undefined8 **)(param_1 + 0xe8) = puVar7;" (assignment_expression "*(undefined8 **)(param_1 + 0xe8) = puVar7" (pointer_expression "*(undefined8 **)(param_1 + 0xe8)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0xe8)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xe8)" (( "(") (binary_expression "param_1 + 0xe8" (identifier "param_1") (+ "+") (number_literal "0xe8")) () ")")))) (= "=") (identifier "puVar7")) (; ";")) (if_statement "if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {\n    return;\n  }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8))" (( "(") (binary_expression "*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)" (pointer_expression "*(long *)(param_1 + 0xb0)" (* "*") (cast_expression "(long *)(param_1 + 0xb0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb0)" (( "(") (binary_expression "param_1 + 0xb0" (identifier "param_1") (+ "+") (number_literal "0xb0")) () ")")))) (== "==") (pointer_expression "*(long *)(param_1 + 0xa8)" (* "*") (cast_expression "(long *)(param_1 + 0xa8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xa8)" (( "(") (binary_expression "param_1 + 0xa8" (identifier "param_1") (+ "+") (number_literal "0xa8")) () ")"))))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_00352af0("../../gold/output.cc",0xf87,"save_states");" (call_expression "FUN_00352af0("../../gold/output.cc",0xf87,"save_states")" (identifier "FUN_00352af0") (argument_list "("../../gold/output.cc",0xf87,"save_states")" (( "(") (string_literal ""../../gold/output.cc"" (" """) (string_content "../../gold/output.cc") (" """)) (, ",") (number_literal "0xf87") (, ",") (string_literal ""save_states"" (" """) (string_content "save_states") (" """)) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: void save_states(Output_section * this) */

void __thiscall gold::type_1::function_1(type_1 *this)

{
  type_2 var_5;
  type_3 EVar2;
  type_4 oVar3;
  uint64_t uVar4;
  type_5 pIVar5;
  type_5 pIVar6;
  type_6 *pCVar7;
  
  if (this->checkpoint_ != (type_6 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_1("../../gold/output.cc",0xf80,"save_states");
  }
  pCVar7 = (type_6 *)var_2(0x50);
  EVar2 = this->flags_;
  var_5 = this->field_0xc9;
  oVar3 = this->first_input_offset_;
  uVar4 = this->addralign_;
  pCVar7->_vptr_Checkpoint_output_section =
       (type_7 **)&PTR__Checkpoint_output_section_006571d8;
  pCVar7->flags_ = EVar2;
  pCVar7->input_sections_ = &this->input_sections_;
  pIVar5 = (this->input_sections_).
           super__Vector_base<gold::Output_section::var_3,_std::allocator<gold::Output_section::var_3>var_4>
           ._M_impl._M_finish;
  pIVar6 = (this->input_sections_).
           super__Vector_base<gold::Output_section::var_3,_std::allocator<gold::Output_section::var_3>var_4>
           ._M_impl._M_start;
  pCVar7->addralign_ = uVar4;
  (pCVar7->input_sections_copy_).
  super__Vector_base<gold::Output_section::var_3,_std::allocator<gold::Output_section::var_3>var_4>
  ._M_impl._M_start = (type_5)0x0;
  pCVar7->input_sections_size_ = (long)pIVar5 - (long)pIVar6 >> 5;
  (pCVar7->input_sections_copy_).
  super__Vector_base<gold::Output_section::var_3,_std::allocator<gold::Output_section::var_3>var_4>
  ._M_impl._M_finish = (type_5)0x0;
  (pCVar7->input_sections_copy_).
  super__Vector_base<gold::Output_section::var_3,_std::allocator<gold::Output_section::var_3>var_4>
  ._M_impl._M_end_of_storage = (type_5)0x0;
  pCVar7->first_input_offset_ = oVar3;
  pCVar7->attached_input_sections_are_sorted_ = (bool)(var_5 >> 4 & 1);
  this->checkpoint_ = pCVar7;
  if ((this->fills_).
      super__Vector_base<gold::type_1::var_6,_std::allocator<gold::type_1::var_6>var_4>.
      _M_impl._M_finish ==
      (this->fills_).
      super__Vector_base<gold::type_1::var_6,_std::allocator<gold::type_1::var_6>var_4>.
      _M_impl._M_start) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  var_1("../../gold/output.cc",0xf87,"save_states");
}


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

void MASKED(long param_1)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined8 *puVar7;
  
  if (*(long *)(param_1 + 0xe8) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.cc",0xf80,"save_states");
  }
  puVar7 = (undefined8 *)FUN_0049cb60(0x50);
  uVar2 = *(undefined8 *)(param_1 + 0x70);
  bVar1 = *(byte *)(param_1 + 0xc9);
  uVar3 = *(undefined8 *)(param_1 + 0xa0);
  uVar4 = *(undefined8 *)(param_1 + 0x30);
  *puVar7 = &PTR_FUN_006571d8;
  puVar7[2] = uVar2;
  puVar7[3] = param_1 + 0x88;
  lVar5 = *(long *)(param_1 + 0x90);
  lVar6 = *(long *)(param_1 + 0x88);
  puVar7[1] = uVar4;
  puVar7[5] = 0;
  puVar7[4] = lVar5 - lVar6 >> 5;
  puVar7[6] = 0;
  puVar7[7] = 0;
  puVar7[8] = uVar3;
  *(byte *)(puVar7 + 9) = bVar1 >> 4 & 1;
  *(undefined8 **)(param_1 + 0xe8) = puVar7;
  if (*(long *)(param_1 + 0xb0) == *(long *)(param_1 + 0xa8)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00352af0("../../gold/output.cc",0xf87,"save_states");
}

