
/* WARNING: Function: __x86.get_pc_thunk.dx replaced with injection: get_pc_thunk_dx */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: Address stub_address(Stub_table<64,_false> * this) */

Address __thiscall
anon_unknown.dwarf_2af53c::Stub_table<64,_false>::stub_address(Stub_table<64,_false> *this)

{
  int in_EAX;
  uint uVar1;
  Stub_table<64,_false> *unaff_EBX;
  int iVar2;
  uint uVar3;
  
  if (gold::parameters->options_ == (General_options *)0x0) {
                    /* WARNING: Subroutine does not return */
    stub_align(unaff_EBX);
  }
  uVar1 = 1 << ((byte)(gold::parameters->options_->plt_align_).value & 0x1f);
  if (uVar1 < 0x20) {
    uVar1 = 0x20;
  }
  if ((*(byte *)(in_EAX + 0x1c) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    stub_address(unaff_EBX);
  }
  iVar2 = uVar1 + *(uint *)(in_EAX + 4);
  uVar3 = iVar2 - 1;
  return CONCAT44(*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +
                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70)) &
                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(in_EAX + 0x70) & -uVar1);
}



/* WARNING: Function: __i686.get_pc_thunk.dx replaced with injection: get_pc_thunk_dx */

undefined8 __regparm3 FUN_00056b90(int param_1)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  
  if (*(int *)(DAT_004144e8 + 8) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00052750();
  }
  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);
  if (uVar1 < 0x20) {
    uVar1 = 0x20;
  }
  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00052f10();
  }
  iVar2 = uVar1 + *(uint *)(param_1 + 4);
  uVar3 = iVar2 - 1;
  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +
                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &
                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);
}


CALL 0x0003a345
ADD EDX,0x3bd46b
PUSH EDI
PUSH ESI
PUSH EBX
LEA EDX,[EDX + 0x4e8]
MOV EDX,dword ptr [EDX]
MOV EDX,dword ptr [EDX + 0x8]
TEST EDX,EDX
JZ 0x00056c04
MOV ECX,dword ptr [EDX + 0x2b20]
MOV EDX,0x1
SHL EDX,CL
CMP EDX,0x20
MOV ECX,EDX
MOV EDX,0x20
CMOVC ECX,EDX
XOR EBX,EBX
TEST byte ptr [EAX + 0x1c],0x1
JNZ 0x00056bd8
CALL 0x00052f10
MOV ESI,ECX
MOV EDI,EBX
ADD ESI,dword ptr [EAX + 0x4]
ADC EDI,dword ptr [EAX + 0x8]
MOV EAX,dword ptr [EAX + 0x70]
ADD ESI,-0x1
ADC EDI,-0x1
XOR EDX,EDX
ADD ESI,EAX
ADC EDI,EDX
NEG ECX
MOV EAX,ESI
ADC EBX,0x0
MOV EDX,EDI
AND EAX,ECX
NEG EBX
AND EDX,EBX
POP EBX
POP ESI
POP EDI
RET
CALL 0x00052750
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.dx replaced with injection: get_pc_thunk_dx */\n\nundefined8 __regparm3 FUN_00056b90(int param_1)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}\n\n" comment (function_definition "undefined8 __regparm3 FUN_00056b90(int param_1)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00056b90(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052750();\n  }" if (parenthesized_expression "(*(int *)(DAT_004144e8 + 8) == 0)" ( (binary_expression "*(int *)(DAT_004144e8 + 8) == 0" (pointer_expression "*(int *)(DAT_004144e8 + 8)" * (cast_expression "(int *)(DAT_004144e8 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_004144e8 + 8)" ( (binary_expression "DAT_004144e8 + 8" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00052750();\n  }" { comment (expression_statement "FUN_00052750();" (call_expression "FUN_00052750()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);" (assignment_expression "uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" identifier = (binary_expression "1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" number_literal << (parenthesized_expression "((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" ( (binary_expression "(byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f" (binary_expression "(byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20)" (parenthesized_expression "(byte)" ( identifier )) * (cast_expression "(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(DAT_004144e8 + 8) + 0x2b20)" ( (binary_expression "*(int *)(DAT_004144e8 + 8) + 0x2b20" (pointer_expression "*(int *)(DAT_004144e8 + 8)" * (cast_expression "(int *)(DAT_004144e8 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_004144e8 + 8)" ( (binary_expression "DAT_004144e8 + 8" identifier + number_literal) )))) + number_literal) )))) & number_literal) )))) ;) (if_statement "if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }" if (parenthesized_expression "(uVar1 < 0x20)" ( (binary_expression "uVar1 < 0x20" identifier < number_literal) )) (compound_statement "{\n    uVar1 = 0x20;\n  }" { (expression_statement "uVar1 = 0x20;" (assignment_expression "uVar1 = 0x20" identifier = number_literal) ;) })) (if_statement "if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00052f10();\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x1c) & 1) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x1c) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x1c) & 1)" ( (binary_expression "*(byte *)(param_1 + 0x1c) & 1" (pointer_expression "*(byte *)(param_1 + 0x1c)" * (cast_expression "(byte *)(param_1 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00052f10();\n  }" { comment (expression_statement "FUN_00052f10();" (call_expression "FUN_00052f10()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar2 = uVar1 + *(uint *)(param_1 + 4);" (assignment_expression "iVar2 = uVar1 + *(uint *)(param_1 + 4)" identifier = (binary_expression "uVar1 + *(uint *)(param_1 + 4)" identifier + (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))))) ;) (expression_statement "uVar3 = iVar2 - 1;" (assignment_expression "uVar3 = iVar2 - 1" identifier = (binary_expression "iVar2 - 1" identifier - number_literal)) ;) (return_statement "return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);" return (call_expression "CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1)" identifier (argument_list "(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1)" ( (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0)" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70))" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0)" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4))" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + (cast_expression "(uint)CARRY4(uVar1,*(uint *)(param_1 + 4))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,*(uint *)(param_1 + 4))" identifier (argument_list "(uVar1,*(uint *)(param_1 + 4))" ( identifier , (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) ))))) + number_literal) + (call_expression "(uint)(iVar2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )))) + (cast_expression "(uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,*(uint *)(param_1 + 0x70))" identifier (argument_list "(uVar3,*(uint *)(param_1 + 0x70))" ( identifier , (pointer_expression "*(uint *)(param_1 + 0x70)" * (cast_expression "(uint *)(param_1 + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) ))))) & (unary_expression "-(uint)(uVar1 != 0)" - (call_expression "(uint)(uVar1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) ))))) , (binary_expression "uVar3 + *(uint *)(param_1 + 0x70) & -uVar1" (binary_expression "uVar3 + *(uint *)(param_1 + 0x70)" identifier + (pointer_expression "*(uint *)(param_1 + 0x70)" * (cast_expression "(uint *)(param_1 + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) & (unary_expression "-uVar1" - identifier)) ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.dx replaced with injection: get_pc_thunk_dx */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": Some values do not have unique names */\n/* DWARF original prototype: Address stub_address(Stub_table<64,_false> * this) */\n\nAddress __thiscall\nanon_unknown.dwarf_2af53c::Stub_table<64,_false>::stub_address(Stub_table<64,_false> *this)\n\n{\n  int in_EAX;\n  uint uVar1;\n  Stub_table<64,_false> *unaff_EBX;\n  int iVar2;\n  uint uVar3;\n  \n  if (gold::parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    stub_align(unaff_EBX);\n  }\n  uVar1 = 1 << ((byte)(gold::parameters->options_->plt_align_).value & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(in_EAX + 0x1c) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    stub_address(unaff_EBX);\n  }\n  iVar2 = uVar1 + *(uint *)(in_EAX + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(in_EAX + 0x70) & -uVar1);\n}\n\n" comment comment comment comment (declaration "Address __thiscall\nanon_unknown.dwarf_2af53c::Stub_table<64,_false>::stub_address(Stub_table<64,_false> *this)\n\n{\n  int in_EAX;" type_identifier (ms_call_modifier "__thiscall" __thiscall) identifier (ERROR ".dwarf_2af53c::Stub_table<64" . identifier : : identifier < number_literal) , (ERROR "_false>::stub_address(Stub_table<64,_false> *this)\n\n{\n  int" identifier > : : (function_declarator "stub_address(Stub_table<64,_false> *this)" identifier (parameter_list "(Stub_table<64,_false> *this)" ( (parameter_declaration "Stub_table" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) ))) { primitive_type) identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (expression_statement "Stub_table<64,_false> *unaff_EBX;" (update_expression "Stub_table<64,_false> *unaff_EBX" (binary_expression "Stub_table<64,_false> *unaff_EBX" (binary_expression "Stub_table<64" identifier < number_literal) (ERROR ",_false" , identifier) > (pointer_expression "*unaff_EBX" * identifier)) --) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if (gold::parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    stub_align(unaff_EBX);\n  }" if (parenthesized_expression "(gold::parameters->options_ == (General_options *)0x0)" ( (ERROR "gold::" identifier : :) (binary_expression "parameters->options_ == (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    stub_align(unaff_EBX);\n  }" { comment (expression_statement "stub_align(unaff_EBX);" (call_expression "stub_align(unaff_EBX)" identifier (argument_list "(unaff_EBX)" ( identifier ))) ;) })) (expression_statement "uVar1 = 1 << ((byte)(gold::parameters->options_->plt_align_).value & 0x1f);" (assignment_expression "uVar1 = 1 << ((byte)(gold::parameters->options_->plt_align_).value & 0x1f)" identifier = (binary_expression "1 << ((byte)(gold::parameters->options_->plt_align_).value & 0x1f)" number_literal << (parenthesized_expression "((byte)(gold::parameters->options_->plt_align_).value & 0x1f)" ( (binary_expression "(byte)(gold::parameters->options_->plt_align_).value & 0x1f" (field_expression "(byte)(gold::parameters->options_->plt_align_).value" (call_expression "(byte)(gold::parameters->options_->plt_align_)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(gold::parameters->options_->plt_align_)" ( (ERROR "gold::" identifier : :) (field_expression "parameters->options_->plt_align_" (field_expression "parameters->options_" identifier -> field_identifier) -> field_identifier) ))) . field_identifier) & number_literal) )))) ;) (if_statement "if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }" if (parenthesized_expression "(uVar1 < 0x20)" ( (binary_expression "uVar1 < 0x20" identifier < number_literal) )) (compound_statement "{\n    uVar1 = 0x20;\n  }" { (expression_statement "uVar1 = 0x20;" (assignment_expression "uVar1 = 0x20" identifier = number_literal) ;) })) (if_statement "if ((*(byte *)(in_EAX + 0x1c) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    stub_address(unaff_EBX);\n  }" if (parenthesized_expression "((*(byte *)(in_EAX + 0x1c) & 1) == 0)" ( (binary_expression "(*(byte *)(in_EAX + 0x1c) & 1) == 0" (parenthesized_expression "(*(byte *)(in_EAX + 0x1c) & 1)" ( (binary_expression "*(byte *)(in_EAX + 0x1c) & 1" (pointer_expression "*(byte *)(in_EAX + 0x1c)" * (cast_expression "(byte *)(in_EAX + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EAX + 0x1c)" ( (binary_expression "in_EAX + 0x1c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    stub_address(unaff_EBX);\n  }" { comment (expression_statement "stub_address(unaff_EBX);" (call_expression "stub_address(unaff_EBX)" identifier (argument_list "(unaff_EBX)" ( identifier ))) ;) })) (expression_statement "iVar2 = uVar1 + *(uint *)(in_EAX + 4);" (assignment_expression "iVar2 = uVar1 + *(uint *)(in_EAX + 4)" identifier = (binary_expression "uVar1 + *(uint *)(in_EAX + 4)" identifier + (pointer_expression "*(uint *)(in_EAX + 4)" * (cast_expression "(uint *)(in_EAX + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EAX + 4)" ( (binary_expression "in_EAX + 4" identifier + number_literal) )))))) ;) (expression_statement "uVar3 = iVar2 - 1;" (assignment_expression "uVar3 = iVar2 - 1" identifier = (binary_expression "iVar2 - 1" identifier - number_literal)) ;) (return_statement "return CONCAT44(*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(in_EAX + 0x70) & -uVar1);" return (call_expression "CONCAT44(*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(in_EAX + 0x70) & -uVar1)" identifier (argument_list "(*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(in_EAX + 0x70) & -uVar1)" ( (binary_expression "*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70)) &\n                  -(uint)(uVar1 != 0)" (binary_expression "*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70))" (binary_expression "*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1 +\n                  (uint)(iVar2 != 0)" (binary_expression "*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4)) + -1" (binary_expression "*(int *)(in_EAX + 8) + (uint)CARRY4(uVar1,*(uint *)(in_EAX + 4))" (pointer_expression "*(int *)(in_EAX + 8)" * (cast_expression "(int *)(in_EAX + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EAX + 8)" ( (binary_expression "in_EAX + 8" identifier + number_literal) )))) + (cast_expression "(uint)CARRY4(uVar1,*(uint *)(in_EAX + 4))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,*(uint *)(in_EAX + 4))" identifier (argument_list "(uVar1,*(uint *)(in_EAX + 4))" ( identifier , (pointer_expression "*(uint *)(in_EAX + 4)" * (cast_expression "(uint *)(in_EAX + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EAX + 4)" ( (binary_expression "in_EAX + 4" identifier + number_literal) )))) ))))) + number_literal) + (call_expression "(uint)(iVar2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )))) + (cast_expression "(uint)CARRY4(uVar3,*(uint *)(in_EAX + 0x70))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,*(uint *)(in_EAX + 0x70))" identifier (argument_list "(uVar3,*(uint *)(in_EAX + 0x70))" ( identifier , (pointer_expression "*(uint *)(in_EAX + 0x70)" * (cast_expression "(uint *)(in_EAX + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EAX + 0x70)" ( (binary_expression "in_EAX + 0x70" identifier + number_literal) )))) ))))) & (unary_expression "-(uint)(uVar1 != 0)" - (call_expression "(uint)(uVar1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) ))))) , (binary_expression "uVar3 + *(uint *)(in_EAX + 0x70) & -uVar1" (binary_expression "uVar3 + *(uint *)(in_EAX + 0x70)" identifier + (pointer_expression "*(uint *)(in_EAX + 0x70)" * (cast_expression "(uint *)(in_EAX + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EAX + 0x70)" ( (binary_expression "in_EAX + 0x70" identifier + number_literal) ))))) & (unary_expression "-uVar1" - identifier)) ))) ;) (ERROR "}" }))
(translation_unit "undefined8 __regparm3 FUN_00056b90(int param_1)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}\n\n" (function_definition "undefined8 __regparm3 FUN_00056b90(int param_1)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00056b90(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }" if (parenthesized_expression "(*(int *)(DAT_004144e8 + 8) == 0)" ( (binary_expression "*(int *)(DAT_004144e8 + 8) == 0" (pointer_expression "*(int *)(DAT_004144e8 + 8)" * (cast_expression "(int *)(DAT_004144e8 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_004144e8 + 8)" ( (binary_expression "DAT_004144e8 + 8" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n    FUN_00052750();\n  }" { (expression_statement "FUN_00052750();" (call_expression "FUN_00052750()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);" (assignment_expression "uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" identifier = (binary_expression "1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" number_literal << (parenthesized_expression "((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" ( (binary_expression "(byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f" (binary_expression "(byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20)" (parenthesized_expression "(byte)" ( identifier )) * (cast_expression "(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(DAT_004144e8 + 8) + 0x2b20)" ( (binary_expression "*(int *)(DAT_004144e8 + 8) + 0x2b20" (pointer_expression "*(int *)(DAT_004144e8 + 8)" * (cast_expression "(int *)(DAT_004144e8 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_004144e8 + 8)" ( (binary_expression "DAT_004144e8 + 8" identifier + number_literal) )))) + number_literal) )))) & number_literal) )))) ;) (if_statement "if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }" if (parenthesized_expression "(uVar1 < 0x20)" ( (binary_expression "uVar1 < 0x20" identifier < number_literal) )) (compound_statement "{\n    uVar1 = 0x20;\n  }" { (expression_statement "uVar1 = 0x20;" (assignment_expression "uVar1 = 0x20" identifier = number_literal) ;) })) (if_statement "if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x1c) & 1) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x1c) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x1c) & 1)" ( (binary_expression "*(byte *)(param_1 + 0x1c) & 1" (pointer_expression "*(byte *)(param_1 + 0x1c)" * (cast_expression "(byte *)(param_1 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_00052f10();\n  }" { (expression_statement "FUN_00052f10();" (call_expression "FUN_00052f10()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar2 = uVar1 + *(uint *)(param_1 + 4);" (assignment_expression "iVar2 = uVar1 + *(uint *)(param_1 + 4)" identifier = (binary_expression "uVar1 + *(uint *)(param_1 + 4)" identifier + (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))))) ;) (expression_statement "uVar3 = iVar2 - 1;" (assignment_expression "uVar3 = iVar2 - 1" identifier = (binary_expression "iVar2 - 1" identifier - number_literal)) ;) (return_statement "return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);" return (call_expression "CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1)" identifier (argument_list "(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1)" ( (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0)" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70))" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0)" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4))" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + (cast_expression "(uint)CARRY4(uVar1,*(uint *)(param_1 + 4))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,*(uint *)(param_1 + 4))" identifier (argument_list "(uVar1,*(uint *)(param_1 + 4))" ( identifier , (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) ))))) + number_literal) + (call_expression "(uint)(iVar2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )))) + (cast_expression "(uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,*(uint *)(param_1 + 0x70))" identifier (argument_list "(uVar3,*(uint *)(param_1 + 0x70))" ( identifier , (pointer_expression "*(uint *)(param_1 + 0x70)" * (cast_expression "(uint *)(param_1 + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) ))))) & (unary_expression "-(uint)(uVar1 != 0)" - (call_expression "(uint)(uVar1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) ))))) , (binary_expression "uVar3 + *(uint *)(param_1 + 0x70) & -uVar1" (binary_expression "uVar3 + *(uint *)(param_1 + 0x70)" identifier + (pointer_expression "*(uint *)(param_1 + 0x70)" * (cast_expression "(uint *)(param_1 + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) & (unary_expression "-uVar1" - identifier)) ))) ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (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 (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (return_statement return (call_expression IDENT (argument_list ( (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))))) + LIT) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))))) & (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))))) , (binary_expression (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) & (unary_expression - IDENT)) ))) ;) })))
(function_definition "undefined8 __regparm3 FUN_00056b90(int param_1)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}" (type_identifier "undefined8") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00056b90(int param_1)" (identifier "FUN_00056b90") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  \n  if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }\n  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);\n  if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }\n  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }\n  iVar2 = uVar1 + *(uint *)(param_1 + 4);\n  uVar3 = iVar2 - 1;\n  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (if_statement "if (*(int *)(DAT_004144e8 + 8) == 0) {\n                    \n    FUN_00052750();\n  }" (if "if") (parenthesized_expression "(*(int *)(DAT_004144e8 + 8) == 0)" (( "(") (binary_expression "*(int *)(DAT_004144e8 + 8) == 0" (pointer_expression "*(int *)(DAT_004144e8 + 8)" (* "*") (cast_expression "(int *)(DAT_004144e8 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_004144e8 + 8)" (( "(") (binary_expression "DAT_004144e8 + 8" (identifier "DAT_004144e8") (+ "+") (number_literal "8")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00052750();\n  }" ({ "{") (expression_statement "FUN_00052750();" (call_expression "FUN_00052750()" (identifier "FUN_00052750") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);" (assignment_expression "uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" (identifier "uVar1") (= "=") (binary_expression "1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f)" (( "(") (binary_expression "(byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f" (binary_expression "(byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (* "*") (cast_expression "(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(DAT_004144e8 + 8) + 0x2b20)" (( "(") (binary_expression "*(int *)(DAT_004144e8 + 8) + 0x2b20" (pointer_expression "*(int *)(DAT_004144e8 + 8)" (* "*") (cast_expression "(int *)(DAT_004144e8 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_004144e8 + 8)" (( "(") (binary_expression "DAT_004144e8 + 8" (identifier "DAT_004144e8") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "0x2b20")) () ")")))) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (uVar1 < 0x20) {\n    uVar1 = 0x20;\n  }" (if "if") (parenthesized_expression "(uVar1 < 0x20)" (( "(") (binary_expression "uVar1 < 0x20" (identifier "uVar1") (< "<") (number_literal "0x20")) () ")")) (compound_statement "{\n    uVar1 = 0x20;\n  }" ({ "{") (expression_statement "uVar1 = 0x20;" (assignment_expression "uVar1 = 0x20" (identifier "uVar1") (= "=") (number_literal "0x20")) (; ";")) (} "}"))) (if_statement "if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {\n                    \n    FUN_00052f10();\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0x1c) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x1c) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x1c) & 1)" (( "(") (binary_expression "*(byte *)(param_1 + 0x1c) & 1" (pointer_expression "*(byte *)(param_1 + 0x1c)" (* "*") (cast_expression "(byte *)(param_1 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00052f10();\n  }" ({ "{") (expression_statement "FUN_00052f10();" (call_expression "FUN_00052f10()" (identifier "FUN_00052f10") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar2 = uVar1 + *(uint *)(param_1 + 4);" (assignment_expression "iVar2 = uVar1 + *(uint *)(param_1 + 4)" (identifier "iVar2") (= "=") (binary_expression "uVar1 + *(uint *)(param_1 + 4)" (identifier "uVar1") (+ "+") (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))))) (; ";")) (expression_statement "uVar3 = iVar2 - 1;" (assignment_expression "uVar3 = iVar2 - 1" (identifier "uVar3") (= "=") (binary_expression "iVar2 - 1" (identifier "iVar2") (- "-") (number_literal "1"))) (; ";")) (return_statement "return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);" (return "return") (call_expression "CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1)" (identifier "CONCAT44") (argument_list "(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1)" (( "(") (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &\n                  -(uint)(uVar1 != 0)" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70))" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +\n                  (uint)(iVar2 != 0)" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1" (binary_expression "*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4))" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar1,*(uint *)(param_1 + 4))" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar1,*(uint *)(param_1 + 4))" (identifier "CARRY4") (argument_list "(uVar1,*(uint *)(param_1 + 4))" (( "(") (identifier "uVar1") (, ",") (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) () ")"))))) (+ "+") (number_literal "-1")) (+ "+") (call_expression "(uint)(iVar2 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70))" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar3,*(uint *)(param_1 + 0x70))" (identifier "CARRY4") (argument_list "(uVar3,*(uint *)(param_1 + 0x70))" (( "(") (identifier "uVar3") (, ",") (pointer_expression "*(uint *)(param_1 + 0x70)" (* "*") (cast_expression "(uint *)(param_1 + 0x70)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) () ")"))))) (& "&") (unary_expression "-(uint)(uVar1 != 0)" (- "-") (call_expression "(uint)(uVar1 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar1 != 0)" (( "(") (binary_expression "uVar1 != 0" (identifier "uVar1") (!= "!=") (number_literal "0")) () ")"))))) (, ",") (binary_expression "uVar3 + *(uint *)(param_1 + 0x70) & -uVar1" (binary_expression "uVar3 + *(uint *)(param_1 + 0x70)" (identifier "uVar3") (+ "+") (pointer_expression "*(uint *)(param_1 + 0x70)" (* "*") (cast_expression "(uint *)(param_1 + 0x70)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")"))))) (& "&") (unary_expression "-uVar1" (- "-") (identifier "uVar1"))) () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.dx replaced with injection: get_pc_thunk_dx */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: Address stub_address(Stub_table<64,_false> * this) */

type_1 __thiscall
anon_unknown.dwarf_2af53c::var_1<64,_false>::var_5(var_1<64,_false> *this)

{
  int var_4;
  type_2 var_3;
  var_1<64,_false> *unaff_EBX;
  int var_6;
  type_2 var_9;
  
  if (gold::parameters->options_ == (type_3 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2(unaff_EBX);
  }
  var_3 = 1 << ((type_4)(gold::parameters->options_->plt_align_).value & 0x1f);
  if (var_3 < 0x20) {
    var_3 = 0x20;
  }
  if ((*(type_4 *)(var_4 + 0x1c) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    var_5(unaff_EBX);
  }
  var_6 = var_3 + *(type_2 *)(var_4 + 4);
  var_9 = var_6 - 1;
  return var_7(*(int *)(var_4 + 8) + (type_2)var_8(var_3,*(type_2 *)(var_4 + 4)) + -1 +
                  (type_2)(var_6 != 0) + (type_2)var_8(var_9,*(type_2 *)(var_4 + 0x70)) &
                  -(type_2)(var_3 != 0),var_9 + *(type_2 *)(var_4 + 0x70) & -var_3);
}


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

/* WARNING: Function: __i686.get_pc_thunk.dx replaced with injection: get_pc_thunk_dx */

undefined8 __regparm3 MASKED(int param_1)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  
  if (*(int *)(DAT_004144e8 + 8) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00052750();
  }
  uVar1 = 1 << ((byte)*(undefined4 *)(*(int *)(DAT_004144e8 + 8) + 0x2b20) & 0x1f);
  if (uVar1 < 0x20) {
    uVar1 = 0x20;
  }
  if ((*(byte *)(param_1 + 0x1c) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00052f10();
  }
  iVar2 = uVar1 + *(uint *)(param_1 + 4);
  uVar3 = iVar2 - 1;
  return CONCAT44(*(int *)(param_1 + 8) + (uint)CARRY4(uVar1,*(uint *)(param_1 + 4)) + -1 +
                  (uint)(iVar2 != 0) + (uint)CARRY4(uVar3,*(uint *)(param_1 + 0x70)) &
                  -(uint)(uVar1 != 0),uVar3 + *(uint *)(param_1 + 0x70) & -uVar1);
}

