
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol**,
   std::vector<gold::Symbol*> >, __gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64> > > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64>_>_>
               (__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>
                __first,__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>
                        __last,_Iter_comp_iter<gold::Sort_commons<64>_> __comp)

{
  Symbol *pSVar1;
  bool bVar2;
  __normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>
  __last_00;
  Symbol **ppSVar3;
  ulong unaff_R12;
  _Val_comp_iter<gold::Sort_commons<64>_> __comp_00;
  Sort_commons<64> local_48;
  
  local_48._8_8_ = __comp._M_comp._8_8_;
  local_48.symtab_ = __comp._M_comp.symtab_;
  if (__first._M_current != __last._M_current) {
    for (__last_00._M_current = __first._M_current + 1; __last._M_current != __last_00._M_current;
        __last_00._M_current = __last_00._M_current + 1) {
      while (bVar2 = gold::Sort_commons<64>::operator()
                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {
        ppSVar3 = __last_00._M_current + 1;
        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;
        __comp_00._M_comp._8_8_ = unaff_R12;
        __comp_00._M_comp.symtab_ = local_48.symtab_;
        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>
                  (__last_00,__comp_00);
        __last_00._M_current = ppSVar3;
        if (__last._M_current == ppSVar3) {
          return;
        }
      }
      pSVar1 = *__last_00._M_current;
      if (__first._M_current != __last_00._M_current) {
        memmove(__first._M_current + 1,__first._M_current,
                (long)__last_00._M_current - (long)__first._M_current);
      }
      *__first._M_current = pSVar1;
    }
  }
  return;
}



void FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)

{
  undefined8 uVar1;
  char cVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulong unaff_R12;
  undefined8 local_48;
  ulong local_40;
  
  if (param_1 != param_2) {
    local_48 = param_3;
    local_40 = param_4;
    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {
      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {
        puVar4 = puVar3 + 1;
        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;
        FUN_0023a0b0(puVar3,local_48,unaff_R12);
        puVar3 = puVar4;
        if (param_2 == puVar4) {
          return;
        }
      }
      uVar1 = *puVar3;
      if (param_1 != puVar3) {
        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);
      }
      *param_1 = uVar1;
    }
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV qword ptr [RSP],RDX
MOV qword ptr [RSP + 0x8],RCX
CMP RDI,RSI
JZ 0x0023a199
LEA RBX,[RDI + 0x8]
CMP RSI,RBX
JZ 0x0023a199
MOV R13,RSI
MOV RBP,RDI
MOV R14,RSP
JMP 0x0023a157
MOV R15,qword ptr [RBX]
CMP RBP,RBX
JZ 0x0023a14a
MOV RDX,RBX
LEA RDI,[RBP + 0x8]
MOV RSI,RBP
SUB RDX,RBP
CALL 0x0013e6d0
ADD RBX,0x8
MOV qword ptr [RBP],R15
CMP R13,RBX
JZ 0x0023a199
MOV RDX,qword ptr [RBP]
MOV RSI,qword ptr [RBX]
MOV RDI,R14
CALL 0x00239fe0
TEST AL,AL
JNZ 0x0023a130
MOV RAX,qword ptr [RSP + 0x8]
MOV RSI,qword ptr [RSP]
MOV RDI,RBX
ADD RBX,0x8
MOV RCX,-0x100000000
MOV EAX,EAX
AND R12,RCX
OR R12,RAX
MOV RDX,R12
CALL 0x0023a0b0
CMP R13,RBX
JNZ 0x0023a157
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "void FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)" identifier (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "ulong unaff_R12;" type_identifier identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (declaration "ulong local_40;" type_identifier identifier ;) (if_statement "if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }" if (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) (compound_statement "{\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }" { (expression_statement "local_48 = param_3;" (assignment_expression "local_48 = param_3" identifier = identifier) ;) (expression_statement "local_40 = param_4;" (assignment_expression "local_40 = param_4" identifier = identifier) ;) (for_statement "for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }" for ( (assignment_expression "puVar3 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ; (binary_expression "param_2 != puVar3" identifier != identifier) ; (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ) (compound_statement "{\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }" { (while_statement "while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }" while (parenthesized_expression "(cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1)" identifier = (call_expression "FUN_00239fe0(&local_48,*puVar3,*param_1)" identifier (argument_list "(&local_48,*puVar3,*param_1)" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*puVar3" * identifier) , (pointer_expression "*param_1" * identifier) )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }" { (expression_statement "puVar4 = puVar3 + 1;" (assignment_expression "puVar4 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (expression_statement "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;" (assignment_expression "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff" identifier = (binary_expression "unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff" (binary_expression "unaff_R12 & 0xffffffff00000000" identifier & number_literal) | (binary_expression "local_40 & 0xffffffff" identifier & number_literal))) ;) (expression_statement "FUN_0023a0b0(puVar3,local_48,unaff_R12);" (call_expression "FUN_0023a0b0(puVar3,local_48,unaff_R12)" identifier (argument_list "(puVar3,local_48,unaff_R12)" ( identifier , identifier , identifier ))) ;) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" identifier = identifier) ;) (if_statement "if (param_2 == puVar4) {\n          return;\n        }" if (parenthesized_expression "(param_2 == puVar4)" ( (binary_expression "param_2 == puVar4" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (if_statement "if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" if (parenthesized_expression "(param_1 != puVar3)" ( (binary_expression "param_1 != puVar3" identifier != identifier) )) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" { (expression_statement "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" identifier (argument_list "(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" ( (binary_expression "param_1 + 1" identifier + number_literal) , identifier , (binary_expression "(long)puVar3 - (long)param_1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol**,\n   std::vector<gold::Symbol*> >, __gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64> > > */\n\nvoid std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64>_>_>\n               (__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                __first,__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_commons<64>_> __comp)\n\n{\n  Symbol *pSVar1;\n  bool bVar2;\n  __normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n  __last_00;\n  Symbol **ppSVar3;\n  ulong unaff_R12;\n  _Val_comp_iter<gold::Sort_commons<64>_> __comp_00;\n  Sort_commons<64> local_48;\n  \n  local_48._8_8_ = __comp._M_comp._8_8_;\n  local_48.symtab_ = __comp._M_comp.symtab_;\n  if (__first._M_current != __last._M_current) {\n    for (__last_00._M_current = __first._M_current + 1; __last._M_current != __last_00._M_current;\n        __last_00._M_current = __last_00._M_current + 1) {\n      while (bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }\n      pSVar1 = *__last_00._M_current;\n      if (__first._M_current != __last_00._M_current) {\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }\n      *__first._M_current = pSVar1;\n    }\n  }\n  return;\n}\n\n" comment comment (declaration "void std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64>_>_>\n               (__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                __first,__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_commons<64>_> __comp)\n\n{\n  Symbol *pSVar1;" primitive_type (ERROR "std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol" identifier : : identifier < identifier : : identifier < identifier : : identifier) (pointer_declarator "**,_std::vector<gold::Symbol*>_" * (pointer_declarator "*,_std::vector<gold::Symbol*>_" * (ERROR ",_std::vector<gold::Symbol*>" , identifier : : identifier < identifier : : identifier * >) identifier)) (ERROR ">" >) , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64>_>_>\n               (__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                __first,__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_commons<64>_> __comp)\n\n{\n  Symbol" identifier : : identifier : : identifier < identifier : : identifier < number_literal > identifier > (function_declarator "_>\n               (__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                __first,__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_commons<64>_> __comp)" identifier (ERROR ">" >) (parameter_list "(__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                __first,__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n                        __last,_Iter_comp_iter<gold::Sort_commons<64>_> __comp)" ( (parameter_declaration "__normal_iterator<gold::Symbol**" type_identifier (ERROR "<gold::Symbol" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Symbol*" type_identifier (ERROR "::vector<gold::Symbol" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Symbol*>_>_>\n                __first" type_identifier (ERROR "::allocator<gold::Symbol*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "__normal_iterator<gold::Symbol**" type_identifier (ERROR "<gold::Symbol" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Symbol*" type_identifier (ERROR "::vector<gold::Symbol" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Symbol*>_>_>\n                        __last" type_identifier (ERROR "::allocator<gold::Symbol*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "_Iter_comp_iter<gold::Sort_commons<64>_> __comp" type_identifier (ERROR "<gold::Sort_commons<64>_>" < identifier : : identifier < number_literal > identifier >) identifier) ))) { identifier) (pointer_declarator "*pSVar1" * identifier) ;) (declaration "bool bVar2;" primitive_type identifier ;) (expression_statement "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n  __last_00;" (update_expression "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n  __last_00" (binary_expression "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_>\n  __last_00" (binary_expression "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_>_" (binary_expression "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*,_std" (binary_expression "__normal_iterator<gold::Symbol**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Symbol**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Symbol" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) --) ;) (declaration "Symbol **ppSVar3;" type_identifier (pointer_declarator "**ppSVar3" * (pointer_declarator "*ppSVar3" * identifier)) ;) (declaration "ulong unaff_R12;" type_identifier identifier ;) (expression_statement "_Val_comp_iter<gold::Sort_commons<64>_> __comp_00;" (update_expression "_Val_comp_iter<gold::Sort_commons<64>_> __comp_00" (binary_expression "_Val_comp_iter<gold::Sort_commons<64>_> __comp_00" (binary_expression "_Val_comp_iter<gold::Sort_commons<64>_" (binary_expression "_Val_comp_iter<gold::Sort_commons<64" (binary_expression "_Val_comp_iter<gold" identifier < identifier) (ERROR "::Sort_commons" : : identifier) < number_literal) > identifier) > identifier) --) ;) (expression_statement "Sort_commons<64> local_48;" (update_expression "Sort_commons<64> local_48" (binary_expression "Sort_commons<64> local_48" (binary_expression "Sort_commons<64" identifier < number_literal) > identifier) --) ;) (expression_statement "local_48._8_8_ = __comp._M_comp._8_8_;" (assignment_expression "local_48._8_8_ = __comp._M_comp._8_8_" (field_expression "local_48._8_8_" identifier . field_identifier) = (field_expression "__comp._M_comp._8_8_" (field_expression "__comp._M_comp" identifier . field_identifier) . field_identifier)) ;) (expression_statement "local_48.symtab_ = __comp._M_comp.symtab_;" (assignment_expression "local_48.symtab_ = __comp._M_comp.symtab_" (field_expression "local_48.symtab_" identifier . field_identifier) = (field_expression "__comp._M_comp.symtab_" (field_expression "__comp._M_comp" identifier . field_identifier) . field_identifier)) ;) (if_statement "if (__first._M_current != __last._M_current) {\n    for (__last_00._M_current = __first._M_current + 1; __last._M_current != __last_00._M_current;\n        __last_00._M_current = __last_00._M_current + 1) {\n      while (bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }\n      pSVar1 = *__last_00._M_current;\n      if (__first._M_current != __last_00._M_current) {\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }\n      *__first._M_current = pSVar1;\n    }\n  }" if (parenthesized_expression "(__first._M_current != __last._M_current)" ( (binary_expression "__first._M_current != __last._M_current" (field_expression "__first._M_current" identifier . field_identifier) != (field_expression "__last._M_current" identifier . field_identifier)) )) (compound_statement "{\n    for (__last_00._M_current = __first._M_current + 1; __last._M_current != __last_00._M_current;\n        __last_00._M_current = __last_00._M_current + 1) {\n      while (bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }\n      pSVar1 = *__last_00._M_current;\n      if (__first._M_current != __last_00._M_current) {\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }\n      *__first._M_current = pSVar1;\n    }\n  }" { (for_statement "for (__last_00._M_current = __first._M_current + 1; __last._M_current != __last_00._M_current;\n        __last_00._M_current = __last_00._M_current + 1) {\n      while (bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }\n      pSVar1 = *__last_00._M_current;\n      if (__first._M_current != __last_00._M_current) {\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }\n      *__first._M_current = pSVar1;\n    }" for ( (assignment_expression "__last_00._M_current = __first._M_current + 1" (field_expression "__last_00._M_current" identifier . field_identifier) = (binary_expression "__first._M_current + 1" (field_expression "__first._M_current" identifier . field_identifier) + number_literal)) ; (binary_expression "__last._M_current != __last_00._M_current" (field_expression "__last._M_current" identifier . field_identifier) != (field_expression "__last_00._M_current" identifier . field_identifier)) ; (assignment_expression "__last_00._M_current = __last_00._M_current + 1" (field_expression "__last_00._M_current" identifier . field_identifier) = (binary_expression "__last_00._M_current + 1" (field_expression "__last_00._M_current" identifier . field_identifier) + number_literal)) ) (compound_statement "{\n      while (bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }\n      pSVar1 = *__last_00._M_current;\n      if (__first._M_current != __last_00._M_current) {\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }\n      *__first._M_current = pSVar1;\n    }" { (while_statement "while (bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2) {\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(bVar2 = gold::Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2)" ( (ERROR "bVar2 = gold::" (assignment_expression "bVar2 = gold" identifier = identifier) : :) (comma_expression "Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current), !bVar2" (binary_expression "Sort_commons<64>::operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current)" (binary_expression "Sort_commons<64" identifier < number_literal) > (ERROR "::" : :) (call_expression "operator()\n                               (&local_48,*__last_00._M_current,*__first._M_current)" (call_expression "operator()" identifier (argument_list "()" ( ))) (argument_list "(&local_48,*__last_00._M_current,*__first._M_current)" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*__last_00._M_current" * (field_expression "__last_00._M_current" identifier . field_identifier)) , (pointer_expression "*__first._M_current" * (field_expression "__first._M_current" identifier . field_identifier)) )))) , (unary_expression "!bVar2" ! identifier)) )) (compound_statement "{\n        ppSVar3 = __last_00._M_current + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;\n        __comp_00._M_comp._8_8_ = unaff_R12;\n        __comp_00._M_comp.symtab_ = local_48.symtab_;\n        __unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);\n        __last_00._M_current = ppSVar3;\n        if (__last._M_current == ppSVar3) {\n          return;\n        }\n      }" { (expression_statement "ppSVar3 = __last_00._M_current + 1;" (assignment_expression "ppSVar3 = __last_00._M_current + 1" identifier = (binary_expression "__last_00._M_current + 1" (field_expression "__last_00._M_current" identifier . field_identifier) + number_literal)) ;) (expression_statement "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff;" (assignment_expression "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff" identifier = (binary_expression "unaff_R12 & 0xffffffff00000000 | local_48._8_8_ & 0xffffffff" (binary_expression "unaff_R12 & 0xffffffff00000000" identifier & number_literal) | (binary_expression "local_48._8_8_ & 0xffffffff" (field_expression "local_48._8_8_" identifier . field_identifier) & number_literal))) ;) (expression_statement "__comp_00._M_comp._8_8_ = unaff_R12;" (assignment_expression "__comp_00._M_comp._8_8_ = unaff_R12" (field_expression "__comp_00._M_comp._8_8_" (field_expression "__comp_00._M_comp" identifier . field_identifier) . field_identifier) = identifier) ;) (expression_statement "__comp_00._M_comp.symtab_ = local_48.symtab_;" (assignment_expression "__comp_00._M_comp.symtab_ = local_48.symtab_" (field_expression "__comp_00._M_comp.symtab_" (field_expression "__comp_00._M_comp" identifier . field_identifier) . field_identifier) = (field_expression "local_48.symtab_" identifier . field_identifier)) ;) (expression_statement "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00);" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_>\n                  (__last_00,__comp_00)" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_>_" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64>_" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold::Sort_commons<64" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx::__ops::_Val_comp_iter<gold" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_>,___gnu_cxx" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold::Symbol*>_" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std::vector<gold" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold::Symbol**,_std" (binary_expression "__unguarded_linear_insert<__gnu_cxx::__normal_iterator<gold" (binary_expression "__unguarded_linear_insert<__gnu_cxx" identifier < identifier) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Val_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Sort_commons" : : identifier) < number_literal) > identifier) > identifier) > (parenthesized_expression "(__last_00,__comp_00)" ( (comma_expression "__last_00,__comp_00" identifier , identifier) ))) ;) (expression_statement "__last_00._M_current = ppSVar3;" (assignment_expression "__last_00._M_current = ppSVar3" (field_expression "__last_00._M_current" identifier . field_identifier) = identifier) ;) (if_statement "if (__last._M_current == ppSVar3) {\n          return;\n        }" if (parenthesized_expression "(__last._M_current == ppSVar3)" ( (binary_expression "__last._M_current == ppSVar3" (field_expression "__last._M_current" identifier . field_identifier) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "pSVar1 = *__last_00._M_current;" (assignment_expression "pSVar1 = *__last_00._M_current" identifier = (pointer_expression "*__last_00._M_current" * (field_expression "__last_00._M_current" identifier . field_identifier))) ;) (if_statement "if (__first._M_current != __last_00._M_current) {\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }" if (parenthesized_expression "(__first._M_current != __last_00._M_current)" ( (binary_expression "__first._M_current != __last_00._M_current" (field_expression "__first._M_current" identifier . field_identifier) != (field_expression "__last_00._M_current" identifier . field_identifier)) )) (compound_statement "{\n        memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);\n      }" { (expression_statement "memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current);" (call_expression "memmove(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current)" identifier (argument_list "(__first._M_current + 1,__first._M_current,\n                (long)__last_00._M_current - (long)__first._M_current)" ( (binary_expression "__first._M_current + 1" (field_expression "__first._M_current" identifier . field_identifier) + number_literal) , (field_expression "__first._M_current" identifier . field_identifier) , (binary_expression "(long)__last_00._M_current - (long)__first._M_current" (cast_expression "(long)__last_00._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__last_00._M_current" identifier . field_identifier)) - (cast_expression "(long)__first._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__first._M_current" identifier . field_identifier))) ))) ;) })) (expression_statement "*__first._M_current = pSVar1;" (assignment_expression "*__first._M_current = pSVar1" (pointer_expression "*__first._M_current" * (field_expression "__first._M_current" identifier . field_identifier)) = identifier) ;) })) })) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)" identifier (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "ulong unaff_R12;" type_identifier identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (declaration "ulong local_40;" type_identifier identifier ;) (if_statement "if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }" if (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) (compound_statement "{\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }" { (expression_statement "local_48 = param_3;" (assignment_expression "local_48 = param_3" identifier = identifier) ;) (expression_statement "local_40 = param_4;" (assignment_expression "local_40 = param_4" identifier = identifier) ;) (for_statement "for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }" for ( (assignment_expression "puVar3 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ; (binary_expression "param_2 != puVar3" identifier != identifier) ; (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ) (compound_statement "{\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }" { (while_statement "while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }" while (parenthesized_expression "(cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1)" identifier = (call_expression "FUN_00239fe0(&local_48,*puVar3,*param_1)" identifier (argument_list "(&local_48,*puVar3,*param_1)" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*puVar3" * identifier) , (pointer_expression "*param_1" * identifier) )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) )) (compound_statement "{\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }" { (expression_statement "puVar4 = puVar3 + 1;" (assignment_expression "puVar4 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (expression_statement "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;" (assignment_expression "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff" identifier = (binary_expression "unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff" (binary_expression "unaff_R12 & 0xffffffff00000000" identifier & number_literal) | (binary_expression "local_40 & 0xffffffff" identifier & number_literal))) ;) (expression_statement "FUN_0023a0b0(puVar3,local_48,unaff_R12);" (call_expression "FUN_0023a0b0(puVar3,local_48,unaff_R12)" identifier (argument_list "(puVar3,local_48,unaff_R12)" ( identifier , identifier , identifier ))) ;) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" identifier = identifier) ;) (if_statement "if (param_2 == puVar4) {\n          return;\n        }" if (parenthesized_expression "(param_2 == puVar4)" ( (binary_expression "param_2 == puVar4" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (if_statement "if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" if (parenthesized_expression "(param_1 != puVar3)" ( (binary_expression "param_1 != puVar3" identifier != identifier) )) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" { (expression_statement "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" identifier (argument_list "(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" ( (binary_expression "param_1 + 1" identifier + number_literal) , identifier , (binary_expression "(long)puVar3 - (long)param_1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (for_statement for ( (assignment_expression IDENT = (binary_expression IDENT + LIT)) ; (binary_expression IDENT != IDENT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression * IDENT) , (pointer_expression * IDENT) )))) , (binary_expression IDENT == (char_literal ' escape_sequence '))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT & LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0023a100(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)" (identifier "FUN_0023a100") (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  ulong unaff_R12;\n  undefined8 local_48;\n  ulong local_40;\n  \n  if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }\n  return;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "undefined8 *puVar3;" (type_identifier "undefined8") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "ulong unaff_R12;" (type_identifier "ulong") (identifier "unaff_R12") (; ";")) (declaration "undefined8 local_48;" (type_identifier "undefined8") (identifier "local_48") (; ";")) (declaration "ulong local_40;" (type_identifier "ulong") (identifier "local_40") (; ";")) (if_statement "if (param_1 != param_2) {\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }" (if "if") (parenthesized_expression "(param_1 != param_2)" (( "(") (binary_expression "param_1 != param_2" (identifier "param_1") (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n    local_48 = param_3;\n    local_40 = param_4;\n    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }\n  }" ({ "{") (expression_statement "local_48 = param_3;" (assignment_expression "local_48 = param_3" (identifier "local_48") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_40 = param_4;" (assignment_expression "local_40 = param_4" (identifier "local_40") (= "=") (identifier "param_4")) (; ";")) (for_statement "for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }" (for "for") (( "(") (assignment_expression "puVar3 = param_1 + 1" (identifier "puVar3") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";") (binary_expression "param_2 != puVar3" (identifier "param_2") (!= "!=") (identifier "puVar3")) (; ";") (assignment_expression "puVar3 = puVar3 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) () ")") (compound_statement "{\n      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }\n      uVar1 = *puVar3;\n      if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }\n      *param_1 = uVar1;\n    }" ({ "{") (while_statement "while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "(cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0')" (( "(") (comma_expression "cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1)" (identifier "cVar2") (= "=") (call_expression "FUN_00239fe0(&local_48,*puVar3,*param_1)" (identifier "FUN_00239fe0") (argument_list "(&local_48,*puVar3,*param_1)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (, ",") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")")))) (, ",") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")")) (compound_statement "{\n        puVar4 = puVar3 + 1;\n        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;\n        FUN_0023a0b0(puVar3,local_48,unaff_R12);\n        puVar3 = puVar4;\n        if (param_2 == puVar4) {\n          return;\n        }\n      }" ({ "{") (expression_statement "puVar4 = puVar3 + 1;" (assignment_expression "puVar4 = puVar3 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;" (assignment_expression "unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff" (identifier "unaff_R12") (= "=") (binary_expression "unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff" (binary_expression "unaff_R12 & 0xffffffff00000000" (identifier "unaff_R12") (& "&") (number_literal "0xffffffff00000000")) (| "|") (binary_expression "local_40 & 0xffffffff" (identifier "local_40") (& "&") (number_literal "0xffffffff")))) (; ";")) (expression_statement "FUN_0023a0b0(puVar3,local_48,unaff_R12);" (call_expression "FUN_0023a0b0(puVar3,local_48,unaff_R12)" (identifier "FUN_0023a0b0") (argument_list "(puVar3,local_48,unaff_R12)" (( "(") (identifier "puVar3") (, ",") (identifier "local_48") (, ",") (identifier "unaff_R12") () ")"))) (; ";")) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" (identifier "puVar3") (= "=") (identifier "puVar4")) (; ";")) (if_statement "if (param_2 == puVar4) {\n          return;\n        }" (if "if") (parenthesized_expression "(param_2 == puVar4)" (( "(") (binary_expression "param_2 == puVar4" (identifier "param_2") (== "==") (identifier "puVar4")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar1 = *puVar3;" (assignment_expression "uVar1 = *puVar3" (identifier "uVar1") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (if_statement "if (param_1 != puVar3) {\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" (if "if") (parenthesized_expression "(param_1 != puVar3)" (( "(") (binary_expression "param_1 != puVar3" (identifier "param_1") (!= "!=") (identifier "puVar3")) () ")")) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);\n      }" ({ "{") (expression_statement "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" (identifier "memmove") (argument_list "(param_1 + 1,param_1,(long)puVar3 - (long)param_1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (identifier "param_1") (, ",") (binary_expression "(long)puVar3 - (long)param_1" (cast_expression "(long)puVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar3")) (- "-") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1"))) () ")"))) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar1")) (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Symbol**,
   std::vector<gold::Symbol*> >, __gnu_cxx::__ops::_Iter_comp_iter<gold::Sort_commons<64> > > */

void std::
     __insertion_sort<var_13::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_14::__ops::_Iter_comp_iter<var_2::var_8<64>var_4>var_4>
               (var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
                __first,var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
                        __last,_Iter_comp_iter<var_2::var_8<64>var_4> __comp)

{
  type_1 *pSVar1;
  bool bVar2;
  var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
  var_5;
  type_1 **var_15;
  type_2 var_11;
  var_6<var_2::var_8<64>var_4> var_7;
  var_8<64> var_9;
  
  var_9._8_8_ = __comp._M_comp._8_8_;
  var_9.symtab_ = __comp._M_comp.symtab_;
  if (__first._M_current != __last._M_current) {
    for (var_5._M_current = __first._M_current + 1; __last._M_current != var_5._M_current;
        var_5._M_current = var_5._M_current + 1) {
      while (bVar2 = var_2::var_8<64>::var_10()
                               (&var_9,*var_5._M_current,*__first._M_current), !bVar2) {
        var_15 = var_5._M_current + 1;
        var_11 = var_11 & 0xffffffff00000000 | var_9._8_8_ & 0xffffffff;
        var_7._M_comp._8_8_ = var_11;
        var_7._M_comp.symtab_ = var_9.symtab_;
        var_12<var_13::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_14::__ops::var_6<var_2::var_8<64>var_4>var_4>
                  (var_5,var_7);
        var_5._M_current = var_15;
        if (__last._M_current == var_15) {
          return;
        }
      }
      pSVar1 = *var_5._M_current;
      if (__first._M_current != var_5._M_current) {
        var_16(__first._M_current + 1,__first._M_current,
                (long)var_5._M_current - (long)__first._M_current);
      }
      *__first._M_current = pSVar1;
    }
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (for_statement initializer: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) condition: (binary_expression left: (identifier) right: (identifier)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier))))) right: (binary_expression left: (identifier) right: (char_literal (escape_sequence))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))))))) (return_statement))))

void MASKED(undefined8 *param_1,undefined8 *param_2,undefined8 param_3,ulong param_4)

{
  undefined8 uVar1;
  char cVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulong unaff_R12;
  undefined8 local_48;
  ulong local_40;
  
  if (param_1 != param_2) {
    local_48 = param_3;
    local_40 = param_4;
    for (puVar3 = param_1 + 1; param_2 != puVar3; puVar3 = puVar3 + 1) {
      while (cVar2 = FUN_00239fe0(&local_48,*puVar3,*param_1), cVar2 == '\0') {
        puVar4 = puVar3 + 1;
        unaff_R12 = unaff_R12 & 0xffffffff00000000 | local_40 & 0xffffffff;
        FUN_0023a0b0(puVar3,local_48,unaff_R12);
        puVar3 = puVar4;
        if (param_2 == puVar4) {
          return;
        }
      }
      uVar1 = *puVar3;
      if (param_1 != puVar3) {
        memmove(param_1 + 1,param_1,(long)puVar3 - (long)param_1);
      }
      *param_1 = uVar1;
    }
  }
  return;
}

