
void __regparm3 exchange(char **argv,_getopt_data *d)

{
  int iVar1;
  int iVar2;
  int iVar3;
  char *pcVar4;
  char **ppcVar5;
  int iVar6;
  int iVar7;
  int local_20;
  
  iVar1 = d->__first_nonopt;
  iVar2 = d->__last_nonopt;
  iVar3 = d->rpl_optind;
  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {
    do {
      iVar6 = iVar2 - local_20;
      if (iVar6 < iVar7 - iVar2) {
        iVar7 = iVar7 - iVar6;
        ppcVar5 = argv + local_20;
        do {
          pcVar4 = *ppcVar5;
          *ppcVar5 = ppcVar5[iVar7 - local_20];
          ppcVar5[iVar7 - local_20] = pcVar4;
          ppcVar5 = ppcVar5 + 1;
        } while (ppcVar5 != argv + iVar6 + local_20);
      }
      else {
        ppcVar5 = argv + local_20;
        local_20 = local_20 + (iVar7 - iVar2);
        do {
          pcVar4 = *ppcVar5;
          *ppcVar5 = ppcVar5[iVar6];
          ppcVar5[iVar6] = pcVar4;
          ppcVar5 = ppcVar5 + 1;
        } while (argv + local_20 != ppcVar5);
      }
    } while ((iVar2 < iVar7) && (local_20 < iVar2));
  }
  d->__first_nonopt = (iVar3 - iVar2) + iVar1;
  d->__last_nonopt = iVar3;
  return;
}



void __regparm3 FUN_00015910(int param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  undefined4 *puVar5;
  int iVar6;
  int iVar7;
  int local_20;
  
  iVar1 = param_2[7];
  iVar2 = param_2[8];
  iVar3 = *param_2;
  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {
    do {
      iVar6 = iVar2 - local_20;
      if (iVar6 < iVar7 - iVar2) {
        iVar7 = iVar7 - iVar6;
        puVar5 = (undefined4 *)(param_1 + local_20 * 4);
        do {
          uVar4 = *puVar5;
          *puVar5 = puVar5[iVar7 - local_20];
          puVar5[iVar7 - local_20] = uVar4;
          puVar5 = puVar5 + 1;
        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));
      }
      else {
        puVar5 = (undefined4 *)(param_1 + local_20 * 4);
        local_20 = local_20 + (iVar7 - iVar2);
        do {
          uVar4 = *puVar5;
          *puVar5 = puVar5[iVar6];
          puVar5[iVar6] = uVar4;
          puVar5 = puVar5 + 1;
        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);
      }
    } while ((iVar2 < iVar7) && (local_20 < iVar2));
  }
  param_2[7] = (iVar3 - iVar2) + iVar1;
  param_2[8] = iVar3;
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x14
MOV ESI,dword ptr [EDX + 0x1c]
MOV EBX,dword ptr [EDX + 0x20]
MOV dword ptr [ESP],EAX
MOV EAX,dword ptr [EDX]
MOV dword ptr [ESP + 0x10],EDX
MOV dword ptr [ESP + 0x8],ESI
MOV dword ptr [ESP + 0xc],EAX
CMP ESI,EBX
JGE 0x00015985
CMP EBX,EAX
JGE 0x00015985
MOV ECX,ESI
MOV ESI,EAX
LEA ESI,[ESI]
MOV EDI,ESI
MOV EDX,EBX
SUB EDI,EBX
SUB EDX,ECX
CMP EDI,EDX
JLE 0x000159a8
MOV EDI,dword ptr [ESP]
SUB ESI,EDX
MOV dword ptr [ESP + 0x4],ECX
ADD EDX,ECX
LEA EBP,[EDI + EDX*0x4]
MOV EDX,ESI
LEA EAX,[EDI + ECX*0x4]
SUB EDX,ECX
LEA ESI,[ESI]
MOV EDI,dword ptr [EAX]
MOV ECX,dword ptr [EAX + EDX*0x4]
MOV dword ptr [EAX],ECX
MOV dword ptr [EAX + EDX*0x4],EDI
ADD EAX,0x4
CMP EAX,EBP
JNZ 0x00015968
MOV ECX,dword ptr [ESP + 0x4]
CMP ESI,EBX
JLE 0x00015985
CMP ECX,EBX
JL 0x00015940
MOV ESI,dword ptr [ESP + 0xc]
MOV EAX,ESI
SUB EAX,EBX
MOV EBX,dword ptr [ESP + 0x10]
ADD EAX,dword ptr [ESP + 0x8]
MOV dword ptr [EBX + 0x1c],EAX
MOV dword ptr [EBX + 0x20],ESI
ADD ESP,0x14
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBP,dword ptr [ESP]
LEA EAX,[EBP + ECX*0x4]
ADD ECX,EDI
MOV dword ptr [ESP + 0x4],ECX
LEA EDI,[EBP + ECX*0x4]
LEA ESI,[ESI]
MOV EBP,dword ptr [EAX]
MOV ECX,dword ptr [EAX + EDX*0x4]
MOV dword ptr [EAX],ECX
MOV dword ptr [EAX + EDX*0x4],EBP
ADD EAX,0x4
CMP EDI,EAX
JNZ 0x000159c0
JMP 0x00015979
(translation_unit "void __regparm3 FUN_00015910(int param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_00015910(int param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00015910(int param_1,int *param_2)" identifier (parameter_list "(int param_1,int *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "iVar1 = param_2[7];" (assignment_expression "iVar1 = param_2[7]" identifier = (subscript_expression "param_2[7]" identifier [ number_literal ])) ;) (expression_statement "iVar2 = param_2[8];" (assignment_expression "iVar2 = param_2[8]" identifier = (subscript_expression "param_2[8]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = *param_2;" (assignment_expression "iVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" if (parenthesized_expression "((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3))" ( (binary_expression "(iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" (parenthesized_expression "(iVar1 < iVar2)" ( (binary_expression "iVar1 < iVar2" identifier < identifier) )) && (parenthesized_expression "(local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" ( (comma_expression "local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "local_20 = iVar1" identifier = identifier) , (comma_expression "iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "iVar7 = iVar3" identifier = identifier) , (binary_expression "iVar2 < iVar3" identifier < identifier))) ))) )) (compound_statement "{\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" { (do_statement "do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));" do (compound_statement "{\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    }" { (expression_statement "iVar6 = iVar2 - local_20;" (assignment_expression "iVar6 = iVar2 - local_20" identifier = (binary_expression "iVar2 - local_20" identifier - identifier)) ;) (if_statement "if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" if (parenthesized_expression "(iVar6 < iVar7 - iVar2)" ( (binary_expression "iVar6 < iVar7 - iVar2" identifier < (binary_expression "iVar7 - iVar2" identifier - identifier)) )) (compound_statement "{\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }" { (expression_statement "iVar7 = iVar7 - iVar6;" (assignment_expression "iVar7 = iVar7 - iVar6" identifier = (binary_expression "iVar7 - iVar6" identifier - identifier)) ;) (expression_statement "puVar5 = (undefined4 *)(param_1 + local_20 * 4);" (assignment_expression "puVar5 = (undefined4 *)(param_1 + local_20 * 4)" identifier = (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + local_20 * 4)" ( (binary_expression "param_1 + local_20 * 4" identifier + (binary_expression "local_20 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));" do (compound_statement "{\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        }" { (expression_statement "uVar4 = *puVar5;" (assignment_expression "uVar4 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "*puVar5 = puVar5[iVar7 - local_20];" (assignment_expression "*puVar5 = puVar5[iVar7 - local_20]" (pointer_expression "*puVar5" * identifier) = (subscript_expression "puVar5[iVar7 - local_20]" identifier [ (binary_expression "iVar7 - local_20" identifier - identifier) ])) ;) (expression_statement "puVar5[iVar7 - local_20] = uVar4;" (assignment_expression "puVar5[iVar7 - local_20] = uVar4" (subscript_expression "puVar5[iVar7 - local_20]" identifier [ (binary_expression "iVar7 - local_20" identifier - identifier) ]) = identifier) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4))" ( (binary_expression "puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4)" identifier != (cast_expression "(undefined4 *)(param_1 + (iVar6 + local_20) * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (iVar6 + local_20) * 4)" ( (binary_expression "param_1 + (iVar6 + local_20) * 4" identifier + (binary_expression "(iVar6 + local_20) * 4" (parenthesized_expression "(iVar6 + local_20)" ( (binary_expression "iVar6 + local_20" identifier + identifier) )) * number_literal)) )))) )) ;) }) (else_clause "else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" else (compound_statement "{\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" { (expression_statement "puVar5 = (undefined4 *)(param_1 + local_20 * 4);" (assignment_expression "puVar5 = (undefined4 *)(param_1 + local_20 * 4)" identifier = (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + local_20 * 4)" ( (binary_expression "param_1 + local_20 * 4" identifier + (binary_expression "local_20 * 4" identifier * number_literal)) )))) ;) (expression_statement "local_20 = local_20 + (iVar7 - iVar2);" (assignment_expression "local_20 = local_20 + (iVar7 - iVar2)" identifier = (binary_expression "local_20 + (iVar7 - iVar2)" identifier + (parenthesized_expression "(iVar7 - iVar2)" ( (binary_expression "iVar7 - iVar2" identifier - identifier) )))) ;) (do_statement "do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);" do (compound_statement "{\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        }" { (expression_statement "uVar4 = *puVar5;" (assignment_expression "uVar4 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "*puVar5 = puVar5[iVar6];" (assignment_expression "*puVar5 = puVar5[iVar6]" (pointer_expression "*puVar5" * identifier) = (subscript_expression "puVar5[iVar6]" identifier [ identifier ])) ;) (expression_statement "puVar5[iVar6] = uVar4;" (assignment_expression "puVar5[iVar6] = uVar4" (subscript_expression "puVar5[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)(param_1 + local_20 * 4) != puVar5)" ( (binary_expression "(undefined4 *)(param_1 + local_20 * 4) != puVar5" (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + local_20 * 4)" ( (binary_expression "param_1 + local_20 * 4" identifier + (binary_expression "local_20 * 4" identifier * number_literal)) ))) != identifier) )) ;) }))) }) while (parenthesized_expression "((iVar2 < iVar7) && (local_20 < iVar2))" ( (binary_expression "(iVar2 < iVar7) && (local_20 < iVar2)" (parenthesized_expression "(iVar2 < iVar7)" ( (binary_expression "iVar2 < iVar7" identifier < identifier) )) && (parenthesized_expression "(local_20 < iVar2)" ( (binary_expression "local_20 < iVar2" identifier < identifier) ))) )) ;) })) (expression_statement "param_2[7] = (iVar3 - iVar2) + iVar1;" (assignment_expression "param_2[7] = (iVar3 - iVar2) + iVar1" (subscript_expression "param_2[7]" identifier [ number_literal ]) = (binary_expression "(iVar3 - iVar2) + iVar1" (parenthesized_expression "(iVar3 - iVar2)" ( (binary_expression "iVar3 - iVar2" identifier - identifier) )) + identifier)) ;) (expression_statement "param_2[8] = iVar3;" (assignment_expression "param_2[8] = iVar3" (subscript_expression "param_2[8]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 exchange(char **argv,_getopt_data *d)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  char *pcVar4;\n  char **ppcVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = d->__first_nonopt;\n  iVar2 = d->__last_nonopt;\n  iVar3 = d->rpl_optind;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  d->__first_nonopt = (iVar3 - iVar2) + iVar1;\n  d->__last_nonopt = iVar3;\n  return;\n}\n\n" (function_definition "void __regparm3 exchange(char **argv,_getopt_data *d)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  char *pcVar4;\n  char **ppcVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = d->__first_nonopt;\n  iVar2 = d->__last_nonopt;\n  iVar3 = d->rpl_optind;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  d->__first_nonopt = (iVar3 - iVar2) + iVar1;\n  d->__last_nonopt = iVar3;\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "exchange(char **argv,_getopt_data *d)" identifier (parameter_list "(char **argv,_getopt_data *d)" ( (parameter_declaration "char **argv" primitive_type (pointer_declarator "**argv" * (pointer_declarator "*argv" * identifier))) , (parameter_declaration "_getopt_data *d" type_identifier (pointer_declarator "*d" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  char *pcVar4;\n  char **ppcVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = d->__first_nonopt;\n  iVar2 = d->__last_nonopt;\n  iVar3 = d->rpl_optind;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  d->__first_nonopt = (iVar3 - iVar2) + iVar1;\n  d->__last_nonopt = iVar3;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char **ppcVar5;" primitive_type (pointer_declarator "**ppcVar5" * (pointer_declarator "*ppcVar5" * identifier)) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "iVar1 = d->__first_nonopt;" (assignment_expression "iVar1 = d->__first_nonopt" identifier = (field_expression "d->__first_nonopt" identifier -> field_identifier)) ;) (expression_statement "iVar2 = d->__last_nonopt;" (assignment_expression "iVar2 = d->__last_nonopt" identifier = (field_expression "d->__last_nonopt" identifier -> field_identifier)) ;) (expression_statement "iVar3 = d->rpl_optind;" (assignment_expression "iVar3 = d->rpl_optind" identifier = (field_expression "d->rpl_optind" identifier -> field_identifier)) ;) (if_statement "if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" if (parenthesized_expression "((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3))" ( (binary_expression "(iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" (parenthesized_expression "(iVar1 < iVar2)" ( (binary_expression "iVar1 < iVar2" identifier < identifier) )) && (parenthesized_expression "(local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" ( (comma_expression "local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "local_20 = iVar1" identifier = identifier) , (comma_expression "iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "iVar7 = iVar3" identifier = identifier) , (binary_expression "iVar2 < iVar3" identifier < identifier))) ))) )) (compound_statement "{\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" { (do_statement "do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));" do (compound_statement "{\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }\n    }" { (expression_statement "iVar6 = iVar2 - local_20;" (assignment_expression "iVar6 = iVar2 - local_20" identifier = (binary_expression "iVar2 - local_20" identifier - identifier)) ;) (if_statement "if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }\n      else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }" if (parenthesized_expression "(iVar6 < iVar7 - iVar2)" ( (binary_expression "iVar6 < iVar7 - iVar2" identifier < (binary_expression "iVar7 - iVar2" identifier - identifier)) )) (compound_statement "{\n        iVar7 = iVar7 - iVar6;\n        ppcVar5 = argv + local_20;\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);\n      }" { (expression_statement "iVar7 = iVar7 - iVar6;" (assignment_expression "iVar7 = iVar7 - iVar6" identifier = (binary_expression "iVar7 - iVar6" identifier - identifier)) ;) (expression_statement "ppcVar5 = argv + local_20;" (assignment_expression "ppcVar5 = argv + local_20" identifier = (binary_expression "argv + local_20" identifier + identifier)) ;) (do_statement "do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (ppcVar5 != argv + iVar6 + local_20);" do (compound_statement "{\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar7 - local_20];\n          ppcVar5[iVar7 - local_20] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        }" { (expression_statement "pcVar4 = *ppcVar5;" (assignment_expression "pcVar4 = *ppcVar5" identifier = (pointer_expression "*ppcVar5" * identifier)) ;) (expression_statement "*ppcVar5 = ppcVar5[iVar7 - local_20];" (assignment_expression "*ppcVar5 = ppcVar5[iVar7 - local_20]" (pointer_expression "*ppcVar5" * identifier) = (subscript_expression "ppcVar5[iVar7 - local_20]" identifier [ (binary_expression "iVar7 - local_20" identifier - identifier) ])) ;) (expression_statement "ppcVar5[iVar7 - local_20] = pcVar4;" (assignment_expression "ppcVar5[iVar7 - local_20] = pcVar4" (subscript_expression "ppcVar5[iVar7 - local_20]" identifier [ (binary_expression "iVar7 - local_20" identifier - identifier) ]) = identifier) ;) (expression_statement "ppcVar5 = ppcVar5 + 1;" (assignment_expression "ppcVar5 = ppcVar5 + 1" identifier = (binary_expression "ppcVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(ppcVar5 != argv + iVar6 + local_20)" ( (binary_expression "ppcVar5 != argv + iVar6 + local_20" identifier != (binary_expression "argv + iVar6 + local_20" (binary_expression "argv + iVar6" identifier + identifier) + identifier)) )) ;) }) (else_clause "else {\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }" else (compound_statement "{\n        ppcVar5 = argv + local_20;\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);\n      }" { (expression_statement "ppcVar5 = argv + local_20;" (assignment_expression "ppcVar5 = argv + local_20" identifier = (binary_expression "argv + local_20" identifier + identifier)) ;) (expression_statement "local_20 = local_20 + (iVar7 - iVar2);" (assignment_expression "local_20 = local_20 + (iVar7 - iVar2)" identifier = (binary_expression "local_20 + (iVar7 - iVar2)" identifier + (parenthesized_expression "(iVar7 - iVar2)" ( (binary_expression "iVar7 - iVar2" identifier - identifier) )))) ;) (do_statement "do {\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        } while (argv + local_20 != ppcVar5);" do (compound_statement "{\n          pcVar4 = *ppcVar5;\n          *ppcVar5 = ppcVar5[iVar6];\n          ppcVar5[iVar6] = pcVar4;\n          ppcVar5 = ppcVar5 + 1;\n        }" { (expression_statement "pcVar4 = *ppcVar5;" (assignment_expression "pcVar4 = *ppcVar5" identifier = (pointer_expression "*ppcVar5" * identifier)) ;) (expression_statement "*ppcVar5 = ppcVar5[iVar6];" (assignment_expression "*ppcVar5 = ppcVar5[iVar6]" (pointer_expression "*ppcVar5" * identifier) = (subscript_expression "ppcVar5[iVar6]" identifier [ identifier ])) ;) (expression_statement "ppcVar5[iVar6] = pcVar4;" (assignment_expression "ppcVar5[iVar6] = pcVar4" (subscript_expression "ppcVar5[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "ppcVar5 = ppcVar5 + 1;" (assignment_expression "ppcVar5 = ppcVar5 + 1" identifier = (binary_expression "ppcVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(argv + local_20 != ppcVar5)" ( (binary_expression "argv + local_20 != ppcVar5" (binary_expression "argv + local_20" identifier + identifier) != identifier) )) ;) }))) }) while (parenthesized_expression "((iVar2 < iVar7) && (local_20 < iVar2))" ( (binary_expression "(iVar2 < iVar7) && (local_20 < iVar2)" (parenthesized_expression "(iVar2 < iVar7)" ( (binary_expression "iVar2 < iVar7" identifier < identifier) )) && (parenthesized_expression "(local_20 < iVar2)" ( (binary_expression "local_20 < iVar2" identifier < identifier) ))) )) ;) })) (expression_statement "d->__first_nonopt = (iVar3 - iVar2) + iVar1;" (assignment_expression "d->__first_nonopt = (iVar3 - iVar2) + iVar1" (field_expression "d->__first_nonopt" identifier -> field_identifier) = (binary_expression "(iVar3 - iVar2) + iVar1" (parenthesized_expression "(iVar3 - iVar2)" ( (binary_expression "iVar3 - iVar2" identifier - identifier) )) + identifier)) ;) (expression_statement "d->__last_nonopt = iVar3;" (assignment_expression "d->__last_nonopt = iVar3" (field_expression "d->__last_nonopt" identifier -> field_identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_00015910(int param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_00015910(int param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00015910(int param_1,int *param_2)" identifier (parameter_list "(int param_1,int *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "iVar1 = param_2[7];" (assignment_expression "iVar1 = param_2[7]" identifier = (subscript_expression "param_2[7]" identifier [ number_literal ])) ;) (expression_statement "iVar2 = param_2[8];" (assignment_expression "iVar2 = param_2[8]" identifier = (subscript_expression "param_2[8]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = *param_2;" (assignment_expression "iVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" if (parenthesized_expression "((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3))" ( (binary_expression "(iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" (parenthesized_expression "(iVar1 < iVar2)" ( (binary_expression "iVar1 < iVar2" identifier < identifier) )) && (parenthesized_expression "(local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" ( (comma_expression "local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "local_20 = iVar1" identifier = identifier) , (comma_expression "iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "iVar7 = iVar3" identifier = identifier) , (binary_expression "iVar2 < iVar3" identifier < identifier))) ))) )) (compound_statement "{\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" { (do_statement "do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));" do (compound_statement "{\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    }" { (expression_statement "iVar6 = iVar2 - local_20;" (assignment_expression "iVar6 = iVar2 - local_20" identifier = (binary_expression "iVar2 - local_20" identifier - identifier)) ;) (if_statement "if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" if (parenthesized_expression "(iVar6 < iVar7 - iVar2)" ( (binary_expression "iVar6 < iVar7 - iVar2" identifier < (binary_expression "iVar7 - iVar2" identifier - identifier)) )) (compound_statement "{\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }" { (expression_statement "iVar7 = iVar7 - iVar6;" (assignment_expression "iVar7 = iVar7 - iVar6" identifier = (binary_expression "iVar7 - iVar6" identifier - identifier)) ;) (expression_statement "puVar5 = (undefined4 *)(param_1 + local_20 * 4);" (assignment_expression "puVar5 = (undefined4 *)(param_1 + local_20 * 4)" identifier = (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + local_20 * 4)" ( (binary_expression "param_1 + local_20 * 4" identifier + (binary_expression "local_20 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));" do (compound_statement "{\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        }" { (expression_statement "uVar4 = *puVar5;" (assignment_expression "uVar4 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "*puVar5 = puVar5[iVar7 - local_20];" (assignment_expression "*puVar5 = puVar5[iVar7 - local_20]" (pointer_expression "*puVar5" * identifier) = (subscript_expression "puVar5[iVar7 - local_20]" identifier [ (binary_expression "iVar7 - local_20" identifier - identifier) ])) ;) (expression_statement "puVar5[iVar7 - local_20] = uVar4;" (assignment_expression "puVar5[iVar7 - local_20] = uVar4" (subscript_expression "puVar5[iVar7 - local_20]" identifier [ (binary_expression "iVar7 - local_20" identifier - identifier) ]) = identifier) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4))" ( (binary_expression "puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4)" identifier != (cast_expression "(undefined4 *)(param_1 + (iVar6 + local_20) * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (iVar6 + local_20) * 4)" ( (binary_expression "param_1 + (iVar6 + local_20) * 4" identifier + (binary_expression "(iVar6 + local_20) * 4" (parenthesized_expression "(iVar6 + local_20)" ( (binary_expression "iVar6 + local_20" identifier + identifier) )) * number_literal)) )))) )) ;) }) (else_clause "else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" else (compound_statement "{\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" { (expression_statement "puVar5 = (undefined4 *)(param_1 + local_20 * 4);" (assignment_expression "puVar5 = (undefined4 *)(param_1 + local_20 * 4)" identifier = (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + local_20 * 4)" ( (binary_expression "param_1 + local_20 * 4" identifier + (binary_expression "local_20 * 4" identifier * number_literal)) )))) ;) (expression_statement "local_20 = local_20 + (iVar7 - iVar2);" (assignment_expression "local_20 = local_20 + (iVar7 - iVar2)" identifier = (binary_expression "local_20 + (iVar7 - iVar2)" identifier + (parenthesized_expression "(iVar7 - iVar2)" ( (binary_expression "iVar7 - iVar2" identifier - identifier) )))) ;) (do_statement "do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);" do (compound_statement "{\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        }" { (expression_statement "uVar4 = *puVar5;" (assignment_expression "uVar4 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "*puVar5 = puVar5[iVar6];" (assignment_expression "*puVar5 = puVar5[iVar6]" (pointer_expression "*puVar5" * identifier) = (subscript_expression "puVar5[iVar6]" identifier [ identifier ])) ;) (expression_statement "puVar5[iVar6] = uVar4;" (assignment_expression "puVar5[iVar6] = uVar4" (subscript_expression "puVar5[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)(param_1 + local_20 * 4) != puVar5)" ( (binary_expression "(undefined4 *)(param_1 + local_20 * 4) != puVar5" (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + local_20 * 4)" ( (binary_expression "param_1 + local_20 * 4" identifier + (binary_expression "local_20 * 4" identifier * number_literal)) ))) != identifier) )) ;) }))) }) while (parenthesized_expression "((iVar2 < iVar7) && (local_20 < iVar2))" ( (binary_expression "(iVar2 < iVar7) && (local_20 < iVar2)" (parenthesized_expression "(iVar2 < iVar7)" ( (binary_expression "iVar2 < iVar7" identifier < identifier) )) && (parenthesized_expression "(local_20 < iVar2)" ( (binary_expression "local_20 < iVar2" identifier < identifier) ))) )) ;) })) (expression_statement "param_2[7] = (iVar3 - iVar2) + iVar1;" (assignment_expression "param_2[7] = (iVar3 - iVar2) + iVar1" (subscript_expression "param_2[7]" identifier [ number_literal ]) = (binary_expression "(iVar3 - iVar2) + iVar1" (parenthesized_expression "(iVar3 - iVar2)" ( (binary_expression "iVar3 - iVar2" identifier - identifier) )) + identifier)) ;) (expression_statement "param_2[8] = iVar3;" (assignment_expression "param_2[8] = iVar3" (subscript_expression "param_2[8]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < IDENT))) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT - IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT)) )))) )) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))) != IDENT) )) ;) }))) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_00015910(int param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00015910(int param_1,int *param_2)" (identifier "FUN_00015910") (parameter_list "(int param_1,int *param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  undefined4 uVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int local_20;\n  \n  iVar1 = param_2[7];\n  iVar2 = param_2[8];\n  iVar3 = *param_2;\n  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }\n  param_2[7] = (iVar3 - iVar2) + iVar1;\n  param_2[8] = iVar3;\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (expression_statement "iVar1 = param_2[7];" (assignment_expression "iVar1 = param_2[7]" (identifier "iVar1") (= "=") (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "iVar2 = param_2[8];" (assignment_expression "iVar2 = param_2[8]" (identifier "iVar2") (= "=") (subscript_expression "param_2[8]" (identifier "param_2") ([ "[") (number_literal "8") (] "]"))) (; ";")) (expression_statement "iVar3 = *param_2;" (assignment_expression "iVar3 = *param_2" (identifier "iVar3") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" (if "if") (parenthesized_expression "((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3))" (( "(") (binary_expression "(iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" (parenthesized_expression "(iVar1 < iVar2)" (( "(") (binary_expression "iVar1 < iVar2" (identifier "iVar1") (< "<") (identifier "iVar2")) () ")")) (&& "&&") (parenthesized_expression "(local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)" (( "(") (comma_expression "local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "local_20 = iVar1" (identifier "local_20") (= "=") (identifier "iVar1")) (, ",") (comma_expression "iVar7 = iVar3, iVar2 < iVar3" (assignment_expression "iVar7 = iVar3" (identifier "iVar7") (= "=") (identifier "iVar3")) (, ",") (binary_expression "iVar2 < iVar3" (identifier "iVar2") (< "<") (identifier "iVar3")))) () ")"))) () ")")) (compound_statement "{\n    do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));\n  }" ({ "{") (do_statement "do {\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    } while ((iVar2 < iVar7) && (local_20 < iVar2));" (do "do") (compound_statement "{\n      iVar6 = iVar2 - local_20;\n      if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }\n    }" ({ "{") (expression_statement "iVar6 = iVar2 - local_20;" (assignment_expression "iVar6 = iVar2 - local_20" (identifier "iVar6") (= "=") (binary_expression "iVar2 - local_20" (identifier "iVar2") (- "-") (identifier "local_20"))) (; ";")) (if_statement "if (iVar6 < iVar7 - iVar2) {\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }\n      else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" (if "if") (parenthesized_expression "(iVar6 < iVar7 - iVar2)" (( "(") (binary_expression "iVar6 < iVar7 - iVar2" (identifier "iVar6") (< "<") (binary_expression "iVar7 - iVar2" (identifier "iVar7") (- "-") (identifier "iVar2"))) () ")")) (compound_statement "{\n        iVar7 = iVar7 - iVar6;\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));\n      }" ({ "{") (expression_statement "iVar7 = iVar7 - iVar6;" (assignment_expression "iVar7 = iVar7 - iVar6" (identifier "iVar7") (= "=") (binary_expression "iVar7 - iVar6" (identifier "iVar7") (- "-") (identifier "iVar6"))) (; ";")) (expression_statement "puVar5 = (undefined4 *)(param_1 + local_20 * 4);" (assignment_expression "puVar5 = (undefined4 *)(param_1 + local_20 * 4)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + local_20 * 4)" (( "(") (binary_expression "param_1 + local_20 * 4" (identifier "param_1") (+ "+") (binary_expression "local_20 * 4" (identifier "local_20") (* "*") (number_literal "4"))) () ")")))) (; ";")) (do_statement "do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));" (do "do") (compound_statement "{\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar7 - local_20];\n          puVar5[iVar7 - local_20] = uVar4;\n          puVar5 = puVar5 + 1;\n        }" ({ "{") (expression_statement "uVar4 = *puVar5;" (assignment_expression "uVar4 = *puVar5" (identifier "uVar4") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "*puVar5 = puVar5[iVar7 - local_20];" (assignment_expression "*puVar5 = puVar5[iVar7 - local_20]" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (subscript_expression "puVar5[iVar7 - local_20]" (identifier "puVar5") ([ "[") (binary_expression "iVar7 - local_20" (identifier "iVar7") (- "-") (identifier "local_20")) (] "]"))) (; ";")) (expression_statement "puVar5[iVar7 - local_20] = uVar4;" (assignment_expression "puVar5[iVar7 - local_20] = uVar4" (subscript_expression "puVar5[iVar7 - local_20]" (identifier "puVar5") ([ "[") (binary_expression "iVar7 - local_20" (identifier "iVar7") (- "-") (identifier "local_20")) (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4))" (( "(") (binary_expression "puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4)" (identifier "puVar5") (!= "!=") (cast_expression "(undefined4 *)(param_1 + (iVar6 + local_20) * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (iVar6 + local_20) * 4)" (( "(") (binary_expression "param_1 + (iVar6 + local_20) * 4" (identifier "param_1") (+ "+") (binary_expression "(iVar6 + local_20) * 4" (parenthesized_expression "(iVar6 + local_20)" (( "(") (binary_expression "iVar6 + local_20" (identifier "iVar6") (+ "+") (identifier "local_20")) () ")")) (* "*") (number_literal "4"))) () ")")))) () ")")) (; ";")) (} "}")) (else_clause "else {\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" (else "else") (compound_statement "{\n        puVar5 = (undefined4 *)(param_1 + local_20 * 4);\n        local_20 = local_20 + (iVar7 - iVar2);\n        do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);\n      }" ({ "{") (expression_statement "puVar5 = (undefined4 *)(param_1 + local_20 * 4);" (assignment_expression "puVar5 = (undefined4 *)(param_1 + local_20 * 4)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + local_20 * 4)" (( "(") (binary_expression "param_1 + local_20 * 4" (identifier "param_1") (+ "+") (binary_expression "local_20 * 4" (identifier "local_20") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "local_20 = local_20 + (iVar7 - iVar2);" (assignment_expression "local_20 = local_20 + (iVar7 - iVar2)" (identifier "local_20") (= "=") (binary_expression "local_20 + (iVar7 - iVar2)" (identifier "local_20") (+ "+") (parenthesized_expression "(iVar7 - iVar2)" (( "(") (binary_expression "iVar7 - iVar2" (identifier "iVar7") (- "-") (identifier "iVar2")) () ")")))) (; ";")) (do_statement "do {\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);" (do "do") (compound_statement "{\n          uVar4 = *puVar5;\n          *puVar5 = puVar5[iVar6];\n          puVar5[iVar6] = uVar4;\n          puVar5 = puVar5 + 1;\n        }" ({ "{") (expression_statement "uVar4 = *puVar5;" (assignment_expression "uVar4 = *puVar5" (identifier "uVar4") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "*puVar5 = puVar5[iVar6];" (assignment_expression "*puVar5 = puVar5[iVar6]" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (subscript_expression "puVar5[iVar6]" (identifier "puVar5") ([ "[") (identifier "iVar6") (] "]"))) (; ";")) (expression_statement "puVar5[iVar6] = uVar4;" (assignment_expression "puVar5[iVar6] = uVar4" (subscript_expression "puVar5[iVar6]" (identifier "puVar5") ([ "[") (identifier "iVar6") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((undefined4 *)(param_1 + local_20 * 4) != puVar5)" (( "(") (binary_expression "(undefined4 *)(param_1 + local_20 * 4) != puVar5" (cast_expression "(undefined4 *)(param_1 + local_20 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + local_20 * 4)" (( "(") (binary_expression "param_1 + local_20 * 4" (identifier "param_1") (+ "+") (binary_expression "local_20 * 4" (identifier "local_20") (* "*") (number_literal "4"))) () ")"))) (!= "!=") (identifier "puVar5")) () ")")) (; ";")) (} "}")))) (} "}")) (while "while") (parenthesized_expression "((iVar2 < iVar7) && (local_20 < iVar2))" (( "(") (binary_expression "(iVar2 < iVar7) && (local_20 < iVar2)" (parenthesized_expression "(iVar2 < iVar7)" (( "(") (binary_expression "iVar2 < iVar7" (identifier "iVar2") (< "<") (identifier "iVar7")) () ")")) (&& "&&") (parenthesized_expression "(local_20 < iVar2)" (( "(") (binary_expression "local_20 < iVar2" (identifier "local_20") (< "<") (identifier "iVar2")) () ")"))) () ")")) (; ";")) (} "}"))) (expression_statement "param_2[7] = (iVar3 - iVar2) + iVar1;" (assignment_expression "param_2[7] = (iVar3 - iVar2) + iVar1" (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]")) (= "=") (binary_expression "(iVar3 - iVar2) + iVar1" (parenthesized_expression "(iVar3 - iVar2)" (( "(") (binary_expression "iVar3 - iVar2" (identifier "iVar3") (- "-") (identifier "iVar2")) () ")")) (+ "+") (identifier "iVar1"))) (; ";")) (expression_statement "param_2[8] = iVar3;" (assignment_expression "param_2[8] = iVar3" (subscript_expression "param_2[8]" (identifier "param_2") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "iVar3")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void __regparm3 function_1(char **var_7,type_1 *d)

{
  int var_1;
  int var_2;
  int var_3;
  char *pcVar4;
  char **var_8;
  int var_5;
  int var_6;
  int var_4;
  
  var_1 = d->__first_nonopt;
  var_2 = d->__last_nonopt;
  var_3 = d->rpl_optind;
  if ((var_1 < var_2) && (var_4 = var_1, var_6 = var_3, var_2 < var_3)) {
    do {
      var_5 = var_2 - var_4;
      if (var_5 < var_6 - var_2) {
        var_6 = var_6 - var_5;
        var_8 = var_7 + var_4;
        do {
          pcVar4 = *var_8;
          *var_8 = var_8[var_6 - var_4];
          var_8[var_6 - var_4] = pcVar4;
          var_8 = var_8 + 1;
        } while (var_8 != var_7 + var_5 + var_4);
      }
      else {
        var_8 = var_7 + var_4;
        var_4 = var_4 + (var_6 - var_2);
        do {
          pcVar4 = *var_8;
          *var_8 = var_8[var_5];
          var_8[var_5] = pcVar4;
          var_8 = var_8 + 1;
        } while (var_7 + var_4 != var_8);
      }
    } while ((var_2 < var_6) && (var_4 < var_2));
  }
  d->__first_nonopt = (var_3 - var_2) + var_1;
  d->__last_nonopt = var_3;
  return;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (identifier))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (return_statement))))

void __regparm3 MASKED(int param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  undefined4 *puVar5;
  int iVar6;
  int iVar7;
  int local_20;
  
  iVar1 = param_2[7];
  iVar2 = param_2[8];
  iVar3 = *param_2;
  if ((iVar1 < iVar2) && (local_20 = iVar1, iVar7 = iVar3, iVar2 < iVar3)) {
    do {
      iVar6 = iVar2 - local_20;
      if (iVar6 < iVar7 - iVar2) {
        iVar7 = iVar7 - iVar6;
        puVar5 = (undefined4 *)(param_1 + local_20 * 4);
        do {
          uVar4 = *puVar5;
          *puVar5 = puVar5[iVar7 - local_20];
          puVar5[iVar7 - local_20] = uVar4;
          puVar5 = puVar5 + 1;
        } while (puVar5 != (undefined4 *)(param_1 + (iVar6 + local_20) * 4));
      }
      else {
        puVar5 = (undefined4 *)(param_1 + local_20 * 4);
        local_20 = local_20 + (iVar7 - iVar2);
        do {
          uVar4 = *puVar5;
          *puVar5 = puVar5[iVar6];
          puVar5[iVar6] = uVar4;
          puVar5 = puVar5 + 1;
        } while ((undefined4 *)(param_1 + local_20 * 4) != puVar5);
      }
    } while ((iVar2 < iVar7) && (local_20 < iVar2));
  }
  param_2[7] = (iVar3 - iVar2) + iVar1;
  param_2[8] = iVar3;
  return;
}

