
/* DWARF original prototype: uint lookup_reloc(Dwarf_info_reader * this, off_t attr_off, off_t *
   target_off) */

uint __thiscall
gold::Dwarf_info_reader::lookup_reloc(Dwarf_info_reader *this,off_t attr_off,off_t *target_off)

{
  longlong lVar1;
  off_t oVar2;
  uint uVar3;
  off_t value;
  
  lVar1 = attr_off + this->cu_offset_;
  uVar3 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])
                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value);
  if (uVar3 != 0) {
    if (this->reloc_type_ == 9) {
      oVar2 = *target_off;
      *(uint *)target_off = (int)*target_off + (uint)value;
      *(int *)((int)target_off + 4) =
           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);
      return uVar3;
    }
    *(uint *)target_off = (uint)value;
    *(int *)((int)target_off + 4) = value._4_4_;
  }
  return uVar3;
}



void FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)

{
  uint uVar1;
  int iVar2;
  uint local_14;
  uint local_10;
  
  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))
                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,
                     *(int *)(param_1 + 0x38) + param_3 +
                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);
  if (iVar2 != 0) {
    if (*(int *)(param_1 + 0x20) == 9) {
      uVar1 = *param_4;
      *param_4 = *param_4 + local_14;
      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);
      return;
    }
    *param_4 = local_14;
    param_4[1] = local_10;
  }
  return;
}


PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x10
MOV EBX,dword ptr [ESP + 0x20]
LEA EAX,[ESP + 0x8]
MOV ECX,dword ptr [EBX + 0x4ac]
MOV EDX,dword ptr [EBX + 0x38]
MOV ESI,dword ptr [ECX]
PUSH EAX
MOV EAX,dword ptr [EBX + 0x34]
ADD EAX,dword ptr [ESP + 0x28]
ADC EDX,dword ptr [ESP + 0x2c]
PUSH EDX
PUSH EAX
PUSH ECX
CALL dword ptr [ESI + 0x14]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00056b79
CMP dword ptr [EBX + 0x20],0x9
MOV ESI,dword ptr [ESP + 0x8]
MOV EDI,dword ptr [ESP + 0xc]
MOV EDX,dword ptr [ESP + 0x2c]
JZ 0x00056b80
MOV dword ptr [EDX],ESI
MOV dword ptr [EDX + 0x4],EDI
ADD ESP,0x10
POP EBX
POP ESI
POP EDI
RET
ADD dword ptr [EDX],ESI
ADC dword ptr [EDX + 0x4],EDI
ADD ESP,0x10
POP EBX
POP ESI
POP EDI
RET
(translation_unit "void FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)" identifier (parameter_list "(int param_1,uint param_2,int param_3,uint *param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint local_14;" type_identifier identifier ;) (declaration "uint local_10;" type_identifier identifier ;) (expression_statement "iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);" (assignment_expression "iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" identifier = (call_expression "(**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" (parenthesized_expression "(**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))" ( (pointer_expression "**(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" * (pointer_expression "*(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" * (cast_expression "(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(param_1 + 0x4ac) + 0x14)" ( (binary_expression "**(int **)(param_1 + 0x4ac) + 0x14" (pointer_expression "**(int **)(param_1 + 0x4ac)" * (pointer_expression "*(int **)(param_1 + 0x4ac)" * (cast_expression "(int **)(param_1 + 0x4ac)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4ac)" ( (binary_expression "param_1 + 0x4ac" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" ( (pointer_expression "*(int **)(param_1 + 0x4ac)" * (cast_expression "(int **)(param_1 + 0x4ac)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4ac)" ( (binary_expression "param_1 + 0x4ac" identifier + number_literal) )))) , (binary_expression "*(uint *)(param_1 + 0x34) + param_2" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) + identifier) , (binary_expression "*(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2)" (binary_expression "*(int *)(param_1 + 0x38) + param_3" (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) + identifier) + (cast_expression "(uint)CARRY4(*(uint *)(param_1 + 0x34),param_2)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(*(uint *)(param_1 + 0x34),param_2)" identifier (argument_list "(*(uint *)(param_1 + 0x34),param_2)" ( (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) , identifier ))))) , (pointer_expression "&local_14" & identifier) )))) ;) (if_statement "if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }" { (if_statement "if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x20) == 9)" ( (binary_expression "*(int *)(param_1 + 0x20) == 9" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }" { (expression_statement "uVar1 = *param_4;" (assignment_expression "uVar1 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (expression_statement "*param_4 = *param_4 + local_14;" (assignment_expression "*param_4 = *param_4 + local_14" (pointer_expression "*param_4" * identifier) = (binary_expression "*param_4 + local_14" (pointer_expression "*param_4" * identifier) + identifier)) ;) (expression_statement "param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);" (assignment_expression "param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14)" (subscript_expression "param_4[1]" identifier [ number_literal ]) = (binary_expression "param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14)" (binary_expression "param_4[1] + local_10" (subscript_expression "param_4[1]" identifier [ number_literal ]) + identifier) + (cast_expression "(uint)CARRY4(uVar1,local_14)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,local_14)" identifier (argument_list "(uVar1,local_14)" ( identifier , identifier )))))) ;) (return_statement "return;" return ;) })) (expression_statement "*param_4 = local_14;" (assignment_expression "*param_4 = local_14" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "param_4[1] = local_10;" (assignment_expression "param_4[1] = local_10" (subscript_expression "param_4[1]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: uint lookup_reloc(Dwarf_info_reader * this, off_t attr_off, off_t *\n   target_off) */\n\nuint __thiscall\ngold::Dwarf_info_reader::lookup_reloc(Dwarf_info_reader *this,off_t attr_off,off_t *target_off)\n\n{\n  longlong lVar1;\n  off_t oVar2;\n  uint uVar3;\n  off_t value;\n  \n  lVar1 = attr_off + this->cu_offset_;\n  uVar3 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value);\n  if (uVar3 != 0) {\n    if (this->reloc_type_ == 9) {\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }\n    *(uint *)target_off = (uint)value;\n    *(int *)((int)target_off + 4) = value._4_4_;\n  }\n  return uVar3;\n}\n\n" comment (function_definition "uint __thiscall\ngold::Dwarf_info_reader::lookup_reloc(Dwarf_info_reader *this,off_t attr_off,off_t *target_off)\n\n{\n  longlong lVar1;\n  off_t oVar2;\n  uint uVar3;\n  off_t value;\n  \n  lVar1 = attr_off + this->cu_offset_;\n  uVar3 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value);\n  if (uVar3 != 0) {\n    if (this->reloc_type_ == 9) {\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }\n    *(uint *)target_off = (uint)value;\n    *(int *)((int)target_off + 4) = value._4_4_;\n  }\n  return uVar3;\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Dwarf_info_reader::" identifier : : identifier : :) (function_declarator "lookup_reloc(Dwarf_info_reader *this,off_t attr_off,off_t *target_off)" identifier (parameter_list "(Dwarf_info_reader *this,off_t attr_off,off_t *target_off)" ( (parameter_declaration "Dwarf_info_reader *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "off_t attr_off" type_identifier identifier) , (parameter_declaration "off_t *target_off" type_identifier (pointer_declarator "*target_off" * identifier)) ))) (compound_statement "{\n  longlong lVar1;\n  off_t oVar2;\n  uint uVar3;\n  off_t value;\n  \n  lVar1 = attr_off + this->cu_offset_;\n  uVar3 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value);\n  if (uVar3 != 0) {\n    if (this->reloc_type_ == 9) {\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }\n    *(uint *)target_off = (uint)value;\n    *(int *)((int)target_off + 4) = value._4_4_;\n  }\n  return uVar3;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "off_t oVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "off_t value;" type_identifier identifier ;) (expression_statement "lVar1 = attr_off + this->cu_offset_;" (assignment_expression "lVar1 = attr_off + this->cu_offset_" identifier = (binary_expression "attr_off + this->cu_offset_" identifier + (field_expression "this->cu_offset_" identifier -> field_identifier))) ;) (expression_statement "uVar3 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value);" (assignment_expression "uVar3 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value)" identifier = (call_expression "(*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                    (this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value)" (parenthesized_expression "(*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])" ( (pointer_expression "*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5]" * (subscript_expression "this->reloc_mapper_->_vptr_Elf_reloc_mapper[5]" (field_expression "this->reloc_mapper_->_vptr_Elf_reloc_mapper" (field_expression "this->reloc_mapper_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(this->reloc_mapper_,(int)lVar1,(int)((ulonglong)lVar1 >> 0x20),&value)" ( (field_expression "this->reloc_mapper_" identifier -> field_identifier) , (cast_expression "(int)lVar1" ( (type_descriptor "int" primitive_type) ) identifier) , (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , (pointer_expression "&value" & identifier) )))) ;) (if_statement "if (uVar3 != 0) {\n    if (this->reloc_type_ == 9) {\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }\n    *(uint *)target_off = (uint)value;\n    *(int *)((int)target_off + 4) = value._4_4_;\n  }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    if (this->reloc_type_ == 9) {\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }\n    *(uint *)target_off = (uint)value;\n    *(int *)((int)target_off + 4) = value._4_4_;\n  }" { (if_statement "if (this->reloc_type_ == 9) {\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }" if (parenthesized_expression "(this->reloc_type_ == 9)" ( (binary_expression "this->reloc_type_ == 9" (field_expression "this->reloc_type_" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n      oVar2 = *target_off;\n      *(uint *)target_off = (int)*target_off + (uint)value;\n      *(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);\n      return uVar3;\n    }" { (expression_statement "oVar2 = *target_off;" (assignment_expression "oVar2 = *target_off" identifier = (pointer_expression "*target_off" * identifier)) ;) (expression_statement "*(uint *)target_off = (int)*target_off + (uint)value;" (assignment_expression "*(uint *)target_off = (int)*target_off + (uint)value" (pointer_expression "*(uint *)target_off" * (cast_expression "(uint *)target_off" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (binary_expression "(int)*target_off + (uint)value" (cast_expression "(int)*target_off" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*target_off" * identifier)) + (cast_expression "(uint)value" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "*(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value);" (assignment_expression "*(int *)((int)target_off + 4) =\n           *(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value)" (pointer_expression "*(int *)((int)target_off + 4)" * (cast_expression "(int *)((int)target_off + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)target_off + 4)" ( (binary_expression "(int)target_off + 4" (cast_expression "(int)target_off" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "*(int *)((int)target_off + 4) + value._4_4_ + (uint)CARRY4((uint)oVar2,(uint)value)" (binary_expression "*(int *)((int)target_off + 4) + value._4_4_" (pointer_expression "*(int *)((int)target_off + 4)" * (cast_expression "(int *)((int)target_off + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)target_off + 4)" ( (binary_expression "(int)target_off + 4" (cast_expression "(int)target_off" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + (field_expression "value._4_4_" identifier . field_identifier)) + (cast_expression "(uint)CARRY4((uint)oVar2,(uint)value)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4((uint)oVar2,(uint)value)" identifier (argument_list "((uint)oVar2,(uint)value)" ( (cast_expression "(uint)oVar2" ( (type_descriptor "uint" type_identifier) ) identifier) , (cast_expression "(uint)value" ( (type_descriptor "uint" type_identifier) ) identifier) )))))) ;) (return_statement "return uVar3;" return identifier ;) })) (expression_statement "*(uint *)target_off = (uint)value;" (assignment_expression "*(uint *)target_off = (uint)value" (pointer_expression "*(uint *)target_off" * (cast_expression "(uint *)target_off" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(uint)value" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*(int *)((int)target_off + 4) = value._4_4_;" (assignment_expression "*(int *)((int)target_off + 4) = value._4_4_" (pointer_expression "*(int *)((int)target_off + 4)" * (cast_expression "(int *)((int)target_off + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)target_off + 4)" ( (binary_expression "(int)target_off + 4" (cast_expression "(int)target_off" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (field_expression "value._4_4_" identifier . field_identifier)) ;) })) (return_statement "return uVar3;" return identifier ;) })))
(translation_unit "void FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)" identifier (parameter_list "(int param_1,uint param_2,int param_3,uint *param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint local_14;" type_identifier identifier ;) (declaration "uint local_10;" type_identifier identifier ;) (expression_statement "iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);" (assignment_expression "iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" identifier = (call_expression "(**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" (parenthesized_expression "(**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))" ( (pointer_expression "**(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" * (pointer_expression "*(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" * (cast_expression "(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(param_1 + 0x4ac) + 0x14)" ( (binary_expression "**(int **)(param_1 + 0x4ac) + 0x14" (pointer_expression "**(int **)(param_1 + 0x4ac)" * (pointer_expression "*(int **)(param_1 + 0x4ac)" * (cast_expression "(int **)(param_1 + 0x4ac)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4ac)" ( (binary_expression "param_1 + 0x4ac" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "(*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" ( (pointer_expression "*(int **)(param_1 + 0x4ac)" * (cast_expression "(int **)(param_1 + 0x4ac)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4ac)" ( (binary_expression "param_1 + 0x4ac" identifier + number_literal) )))) , (binary_expression "*(uint *)(param_1 + 0x34) + param_2" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) + identifier) , (binary_expression "*(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2)" (binary_expression "*(int *)(param_1 + 0x38) + param_3" (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) + identifier) + (cast_expression "(uint)CARRY4(*(uint *)(param_1 + 0x34),param_2)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(*(uint *)(param_1 + 0x34),param_2)" identifier (argument_list "(*(uint *)(param_1 + 0x34),param_2)" ( (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) , identifier ))))) , (pointer_expression "&local_14" & identifier) )))) ;) (if_statement "if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }" { (if_statement "if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x20) == 9)" ( (binary_expression "*(int *)(param_1 + 0x20) == 9" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }" { (expression_statement "uVar1 = *param_4;" (assignment_expression "uVar1 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (expression_statement "*param_4 = *param_4 + local_14;" (assignment_expression "*param_4 = *param_4 + local_14" (pointer_expression "*param_4" * identifier) = (binary_expression "*param_4 + local_14" (pointer_expression "*param_4" * identifier) + identifier)) ;) (expression_statement "param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);" (assignment_expression "param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14)" (subscript_expression "param_4[1]" identifier [ number_literal ]) = (binary_expression "param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14)" (binary_expression "param_4[1] + local_10" (subscript_expression "param_4[1]" identifier [ number_literal ]) + identifier) + (cast_expression "(uint)CARRY4(uVar1,local_14)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,local_14)" identifier (argument_list "(uVar1,local_14)" ( identifier , identifier )))))) ;) (return_statement "return;" return ;) })) (expression_statement "*param_4 = local_14;" (assignment_expression "*param_4 = local_14" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "param_4[1] = local_10;" (assignment_expression "param_4[1] = local_10" (subscript_expression "param_4[1]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) , (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT ))))) , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (return_statement return ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (return_statement return ;) })))
(function_definition "void FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00056b30(int param_1,uint param_2,int param_3,uint *param_4)" (identifier "FUN_00056b30") (parameter_list "(int param_1,uint param_2,int param_3,uint *param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "uint *param_4" (type_identifier "uint") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint local_14;\n  uint local_10;\n  \n  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);\n  if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint local_14;" (type_identifier "uint") (identifier "local_14") (; ";")) (declaration "uint local_10;" (type_identifier "uint") (identifier "local_10") (; ";")) (expression_statement "iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);" (assignment_expression "iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" (identifier "iVar2") (= "=") (call_expression "(**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))\n                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" (parenthesized_expression "(**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))" (( "(") (pointer_expression "**(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" (* "*") (pointer_expression "*(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" (* "*") (cast_expression "(code **)(**(int **)(param_1 + 0x4ac) + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(int **)(param_1 + 0x4ac) + 0x14)" (( "(") (binary_expression "**(int **)(param_1 + 0x4ac) + 0x14" (pointer_expression "**(int **)(param_1 + 0x4ac)" (* "*") (pointer_expression "*(int **)(param_1 + 0x4ac)" (* "*") (cast_expression "(int **)(param_1 + 0x4ac)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x4ac)" (( "(") (binary_expression "param_1 + 0x4ac" (identifier "param_1") (+ "+") (number_literal "0x4ac")) () ")"))))) (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (argument_list "(*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,\n                     *(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14)" (( "(") (pointer_expression "*(int **)(param_1 + 0x4ac)" (* "*") (cast_expression "(int **)(param_1 + 0x4ac)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x4ac)" (( "(") (binary_expression "param_1 + 0x4ac" (identifier "param_1") (+ "+") (number_literal "0x4ac")) () ")")))) (, ",") (binary_expression "*(uint *)(param_1 + 0x34) + param_2" (pointer_expression "*(uint *)(param_1 + 0x34)" (* "*") (cast_expression "(uint *)(param_1 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (+ "+") (identifier "param_2")) (, ",") (binary_expression "*(int *)(param_1 + 0x38) + param_3 +\n                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2)" (binary_expression "*(int *)(param_1 + 0x38) + param_3" (pointer_expression "*(int *)(param_1 + 0x38)" (* "*") (cast_expression "(int *)(param_1 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")")))) (+ "+") (identifier "param_3")) (+ "+") (cast_expression "(uint)CARRY4(*(uint *)(param_1 + 0x34),param_2)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(*(uint *)(param_1 + 0x34),param_2)" (identifier "CARRY4") (argument_list "(*(uint *)(param_1 + 0x34),param_2)" (( "(") (pointer_expression "*(uint *)(param_1 + 0x34)" (* "*") (cast_expression "(uint *)(param_1 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (, ",") (identifier "param_2") () ")"))))) (, ",") (pointer_expression "&local_14" (& "&") (identifier "local_14")) () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }\n    *param_4 = local_14;\n    param_4[1] = local_10;\n  }" ({ "{") (if_statement "if (*(int *)(param_1 + 0x20) == 9) {\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x20) == 9)" (( "(") (binary_expression "*(int *)(param_1 + 0x20) == 9" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (number_literal "9")) () ")")) (compound_statement "{\n      uVar1 = *param_4;\n      *param_4 = *param_4 + local_14;\n      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);\n      return;\n    }" ({ "{") (expression_statement "uVar1 = *param_4;" (assignment_expression "uVar1 = *param_4" (identifier "uVar1") (= "=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) (; ";")) (expression_statement "*param_4 = *param_4 + local_14;" (assignment_expression "*param_4 = *param_4 + local_14" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (binary_expression "*param_4 + local_14" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (+ "+") (identifier "local_14"))) (; ";")) (expression_statement "param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);" (assignment_expression "param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14)" (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14)" (binary_expression "param_4[1] + local_10" (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")) (+ "+") (identifier "local_10")) (+ "+") (cast_expression "(uint)CARRY4(uVar1,local_14)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar1,local_14)" (identifier "CARRY4") (argument_list "(uVar1,local_14)" (( "(") (identifier "uVar1") (, ",") (identifier "local_14") () ")")))))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "*param_4 = local_14;" (assignment_expression "*param_4 = local_14" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "local_14")) (; ";")) (expression_statement "param_4[1] = local_10;" (assignment_expression "param_4[1] = local_10" (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "local_10")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: uint lookup_reloc(Dwarf_info_reader * this, off_t attr_off, off_t *
   target_off) */

type_1 __thiscall
gold::type_2::function_1(type_2 *this,type_3 var_1,type_3 *target_off)

{
  type_4 lVar1;
  type_3 oVar2;
  type_1 var_2;
  type_3 value;
  
  lVar1 = var_1 + this->cu_offset_;
  var_2 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])
                    (this->reloc_mapper_,(int)lVar1,(int)((type_5)lVar1 >> 0x20),&value);
  if (var_2 != 0) {
    if (this->reloc_type_ == 9) {
      oVar2 = *target_off;
      *(type_1 *)target_off = (int)*target_off + (type_1)value;
      *(int *)((int)target_off + 4) =
           *(int *)((int)target_off + 4) + value._4_4_ + (type_1)var_3((type_1)oVar2,(type_1)value);
      return var_2;
    }
    *(type_1 *)target_off = (type_1)value;
    *(int *)((int)target_off + 4) = value._4_4_;
  }
  return var_2;
}


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

void MASKED(int param_1,uint param_2,int param_3,uint *param_4)

{
  uint uVar1;
  int iVar2;
  uint local_14;
  uint local_10;
  
  iVar2 = (**(code **)(**(int **)(param_1 + 0x4ac) + 0x14))
                    (*(int **)(param_1 + 0x4ac),*(uint *)(param_1 + 0x34) + param_2,
                     *(int *)(param_1 + 0x38) + param_3 +
                     (uint)CARRY4(*(uint *)(param_1 + 0x34),param_2),&local_14);
  if (iVar2 != 0) {
    if (*(int *)(param_1 + 0x20) == 9) {
      uVar1 = *param_4;
      *param_4 = *param_4 + local_14;
      param_4[1] = param_4[1] + local_10 + (uint)CARRY4(uVar1,local_14);
      return;
    }
    *param_4 = local_14;
    param_4[1] = local_10;
  }
  return;
}

