
Bitmask __regparm3 sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet,ExprList *pList)

{
  Expr *p;
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  Bitmask BVar5;
  
  uVar3 = 0;
  uVar4 = 0;
  iVar2 = 0;
  iVar1 = pList->nExpr;
  if (0 < iVar1) {
    do {
      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {
        iVar2 = iVar2 + 1;
        if (iVar1 <= iVar2) {
          return CONCAT44(uVar4,uVar3);
        }
      }
      iVar2 = iVar2 + 1;
      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);
      uVar3 = uVar3 | (uint)BVar5;
      iVar1 = pList->nExpr;
      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);
    } while (iVar2 < iVar1);
  }
  return CONCAT44(uVar4,uVar3);
}



undefined8 __regparm3 FUN_0004e9c0(undefined4 param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  
  uVar3 = 0;
  uVar4 = 0;
  iVar2 = 0;
  iVar1 = *param_2;
  if (0 < iVar1) {
    do {
      while (param_2[iVar2 * 5 + 1] == 0) {
        iVar2 = iVar2 + 1;
        if (iVar1 <= iVar2) {
          return CONCAT44(uVar4,uVar3);
        }
      }
      iVar2 = iVar2 + 1;
      uVar5 = FUN_0004e7e0();
      uVar3 = uVar3 | (uint)uVar5;
      iVar1 = *param_2;
      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);
    } while (iVar2 < iVar1);
  }
  return CONCAT44(uVar4,uVar3);
}


PUSH EBP
XOR EBP,EBP
PUSH EDI
XOR EDI,EDI
PUSH ESI
MOV ESI,EDX
PUSH EBX
XOR EBX,EBX
SUB ESP,0x1c
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [EDX]
TEST EAX,EAX
JLE 0x0004ea01
LEA ESI,[ESI]
LEA EDX,[EBX + EBX*0x4]
MOV EDX,dword ptr [ESI + EDX*0x4 + 0x4]
TEST EDX,EDX
JZ 0x0004ea10
MOV EAX,dword ptr [ESP + 0xc]
ADD EBX,0x1
CALL 0x0004e7e0
OR EBP,EAX
MOV EAX,dword ptr [ESI]
OR EDI,EDX
CMP EAX,EBX
JG 0x0004e9e0
ADD ESP,0x1c
MOV EAX,EBP
MOV EDX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD EBX,0x1
CMP EAX,EBX
JG 0x0004e9e0
ADD ESP,0x1c
MOV EAX,EBP
MOV EDX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "undefined8 __regparm3 FUN_0004e9c0(undefined4 param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}\n\n" (function_definition "undefined8 __regparm3 FUN_0004e9c0(undefined4 param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0004e9c0(undefined4 param_1,int *param_2)" identifier (parameter_list "(undefined4 param_1,int *param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" if (parenthesized_expression "(0 < iVar1)" ( (binary_expression "0 < iVar1" number_literal < identifier) )) (compound_statement "{\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" { (do_statement "do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);" do (compound_statement "{\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    }" { (while_statement "while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" while (parenthesized_expression "(param_2[iVar2 * 5 + 1] == 0)" ( (binary_expression "param_2[iVar2 * 5 + 1] == 0" (subscript_expression "param_2[iVar2 * 5 + 1]" identifier [ (binary_expression "iVar2 * 5 + 1" (binary_expression "iVar2 * 5" identifier * number_literal) + number_literal) ]) == number_literal) )) (compound_statement "{\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }" if (parenthesized_expression "(iVar1 <= iVar2)" ( (binary_expression "iVar1 <= iVar2" identifier <= identifier) )) (compound_statement "{\n          return CONCAT44(uVar4,uVar3);\n        }" { (return_statement "return CONCAT44(uVar4,uVar3);" return (call_expression "CONCAT44(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) ;) })) })) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = FUN_0004e7e0();" (assignment_expression "uVar5 = FUN_0004e7e0()" identifier = (call_expression "FUN_0004e7e0()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar3 = uVar3 | (uint)uVar5;" (assignment_expression "uVar3 = uVar3 | (uint)uVar5" identifier = (binary_expression "uVar3 | (uint)uVar5" identifier | (cast_expression "(uint)uVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);" (assignment_expression "uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20)" identifier = (binary_expression "uVar4 | (uint)((ulonglong)uVar5 >> 0x20)" identifier | (call_expression "(uint)((ulonglong)uVar5 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar5 >> 0x20)" ( (binary_expression "(ulonglong)uVar5 >> 0x20" (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) }) while (parenthesized_expression "(iVar2 < iVar1)" ( (binary_expression "iVar2 < iVar1" identifier < identifier) )) ;) })) (return_statement "return CONCAT44(uVar4,uVar3);" return (call_expression "CONCAT44(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) ;) })))
(translation_unit "Bitmask __regparm3 sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet,ExprList *pList)\n\n{\n  Expr *p;\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  Bitmask BVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = pList->nExpr;\n  if (0 < iVar1) {\n    do {\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}\n\n" (function_definition "Bitmask __regparm3 sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet,ExprList *pList)\n\n{\n  Expr *p;\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  Bitmask BVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = pList->nExpr;\n  if (0 < iVar1) {\n    do {\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet,ExprList *pList)" identifier (parameter_list "(WhereMaskSet *pMaskSet,ExprList *pList)" ( (parameter_declaration "WhereMaskSet *pMaskSet" type_identifier (pointer_declarator "*pMaskSet" * identifier)) , (parameter_declaration "ExprList *pList" type_identifier (pointer_declarator "*pList" * identifier)) ))) (compound_statement "{\n  Expr *p;\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  Bitmask BVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = pList->nExpr;\n  if (0 < iVar1) {\n    do {\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" { (declaration "Expr *p;" type_identifier (pointer_declarator "*p" * identifier) ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "Bitmask BVar5;" type_identifier identifier ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = pList->nExpr;" (assignment_expression "iVar1 = pList->nExpr" identifier = (field_expression "pList->nExpr" identifier -> field_identifier)) ;) (if_statement "if (0 < iVar1) {\n    do {\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" if (parenthesized_expression "(0 < iVar1)" ( (binary_expression "0 < iVar1" number_literal < identifier) )) (compound_statement "{\n    do {\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" { (do_statement "do {\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    } while (iVar2 < iVar1);" do (compound_statement "{\n      while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);\n      uVar3 = uVar3 | (uint)BVar5;\n      iVar1 = pList->nExpr;\n      uVar4 = uVar4 | (uint)(BVar5 >> 0x20);\n    }" { (while_statement "while (p = pList->a[iVar2].pExpr, p == (Expr *)0x0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" while (parenthesized_expression "(p = pList->a[iVar2].pExpr, p == (Expr *)0x0)" ( (comma_expression "p = pList->a[iVar2].pExpr, p == (Expr *)0x0" (assignment_expression "p = pList->a[iVar2].pExpr" identifier = (field_expression "pList->a[iVar2].pExpr" (subscript_expression "pList->a[iVar2]" (field_expression "pList->a" identifier -> field_identifier) [ identifier ]) . field_identifier)) , (binary_expression "p == (Expr *)0x0" identifier == (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }" if (parenthesized_expression "(iVar1 <= iVar2)" ( (binary_expression "iVar1 <= iVar2" identifier <= identifier) )) (compound_statement "{\n          return CONCAT44(uVar4,uVar3);\n        }" { (return_statement "return CONCAT44(uVar4,uVar3);" return (call_expression "CONCAT44(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) ;) })) })) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p);" (assignment_expression "BVar5 = sqlite3WhereExprUsageNN(pMaskSet,p)" identifier = (call_expression "sqlite3WhereExprUsageNN(pMaskSet,p)" identifier (argument_list "(pMaskSet,p)" ( identifier , identifier )))) ;) (expression_statement "uVar3 = uVar3 | (uint)BVar5;" (assignment_expression "uVar3 = uVar3 | (uint)BVar5" identifier = (binary_expression "uVar3 | (uint)BVar5" identifier | (cast_expression "(uint)BVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "iVar1 = pList->nExpr;" (assignment_expression "iVar1 = pList->nExpr" identifier = (field_expression "pList->nExpr" identifier -> field_identifier)) ;) (expression_statement "uVar4 = uVar4 | (uint)(BVar5 >> 0x20);" (assignment_expression "uVar4 = uVar4 | (uint)(BVar5 >> 0x20)" identifier = (binary_expression "uVar4 | (uint)(BVar5 >> 0x20)" identifier | (call_expression "(uint)(BVar5 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(BVar5 >> 0x20)" ( (binary_expression "BVar5 >> 0x20" identifier >> number_literal) ))))) ;) }) while (parenthesized_expression "(iVar2 < iVar1)" ( (binary_expression "iVar2 < iVar1" identifier < identifier) )) ;) })) (return_statement "return CONCAT44(uVar4,uVar3);" return (call_expression "CONCAT44(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) ;) })))
(translation_unit "undefined8 __regparm3 FUN_0004e9c0(undefined4 param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}\n\n" (function_definition "undefined8 __regparm3 FUN_0004e9c0(undefined4 param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0004e9c0(undefined4 param_1,int *param_2)" identifier (parameter_list "(undefined4 param_1,int *param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" if (parenthesized_expression "(0 < iVar1)" ( (binary_expression "0 < iVar1" number_literal < identifier) )) (compound_statement "{\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" { (do_statement "do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);" do (compound_statement "{\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    }" { (while_statement "while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" while (parenthesized_expression "(param_2[iVar2 * 5 + 1] == 0)" ( (binary_expression "param_2[iVar2 * 5 + 1] == 0" (subscript_expression "param_2[iVar2 * 5 + 1]" identifier [ (binary_expression "iVar2 * 5 + 1" (binary_expression "iVar2 * 5" identifier * number_literal) + number_literal) ]) == number_literal) )) (compound_statement "{\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }" if (parenthesized_expression "(iVar1 <= iVar2)" ( (binary_expression "iVar1 <= iVar2" identifier <= identifier) )) (compound_statement "{\n          return CONCAT44(uVar4,uVar3);\n        }" { (return_statement "return CONCAT44(uVar4,uVar3);" return (call_expression "CONCAT44(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) ;) })) })) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = FUN_0004e7e0();" (assignment_expression "uVar5 = FUN_0004e7e0()" identifier = (call_expression "FUN_0004e7e0()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar3 = uVar3 | (uint)uVar5;" (assignment_expression "uVar3 = uVar3 | (uint)uVar5" identifier = (binary_expression "uVar3 | (uint)uVar5" identifier | (cast_expression "(uint)uVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);" (assignment_expression "uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20)" identifier = (binary_expression "uVar4 | (uint)((ulonglong)uVar5 >> 0x20)" identifier | (call_expression "(uint)((ulonglong)uVar5 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar5 >> 0x20)" ( (binary_expression "(ulonglong)uVar5 >> 0x20" (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) }) while (parenthesized_expression "(iVar2 < iVar1)" ( (binary_expression "iVar2 < iVar1" identifier < identifier) )) ;) })) (return_statement "return CONCAT44(uVar4,uVar3);" return (call_expression "CONCAT44(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) ;) })))
(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 IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })))
(function_definition "undefined8 __regparm3 FUN_0004e9c0(undefined4 param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" (type_identifier "undefined8") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0004e9c0(undefined4 param_1,int *param_2)" (identifier "FUN_0004e9c0") (parameter_list "(undefined4 param_1,int *param_2)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (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  uint uVar3;\n  uint uVar4;\n  undefined8 uVar5;\n  \n  uVar3 = 0;\n  uVar4 = 0;\n  iVar2 = 0;\n  iVar1 = *param_2;\n  if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }\n  return CONCAT44(uVar4,uVar3);\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" (identifier "iVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (0 < iVar1) {\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" (if "if") (parenthesized_expression "(0 < iVar1)" (( "(") (binary_expression "0 < iVar1" (number_literal "0") (< "<") (identifier "iVar1")) () ")")) (compound_statement "{\n    do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);\n  }" ({ "{") (do_statement "do {\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    } while (iVar2 < iVar1);" (do "do") (compound_statement "{\n      while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }\n      iVar2 = iVar2 + 1;\n      uVar5 = FUN_0004e7e0();\n      uVar3 = uVar3 | (uint)uVar5;\n      iVar1 = *param_2;\n      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);\n    }" ({ "{") (while_statement "while (param_2[iVar2 * 5 + 1] == 0) {\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" (while "while") (parenthesized_expression "(param_2[iVar2 * 5 + 1] == 0)" (( "(") (binary_expression "param_2[iVar2 * 5 + 1] == 0" (subscript_expression "param_2[iVar2 * 5 + 1]" (identifier "param_2") ([ "[") (binary_expression "iVar2 * 5 + 1" (binary_expression "iVar2 * 5" (identifier "iVar2") (* "*") (number_literal "5")) (+ "+") (number_literal "1")) (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar2 = iVar2 + 1;\n        if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }\n      }" ({ "{") (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar1 <= iVar2) {\n          return CONCAT44(uVar4,uVar3);\n        }" (if "if") (parenthesized_expression "(iVar1 <= iVar2)" (( "(") (binary_expression "iVar1 <= iVar2" (identifier "iVar1") (<= "<=") (identifier "iVar2")) () ")")) (compound_statement "{\n          return CONCAT44(uVar4,uVar3);\n        }" ({ "{") (return_statement "return CONCAT44(uVar4,uVar3);" (return "return") (call_expression "CONCAT44(uVar4,uVar3)" (identifier "CONCAT44") (argument_list "(uVar4,uVar3)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar3") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = FUN_0004e7e0();" (assignment_expression "uVar5 = FUN_0004e7e0()" (identifier "uVar5") (= "=") (call_expression "FUN_0004e7e0()" (identifier "FUN_0004e7e0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar3 = uVar3 | (uint)uVar5;" (assignment_expression "uVar3 = uVar3 | (uint)uVar5" (identifier "uVar3") (= "=") (binary_expression "uVar3 | (uint)uVar5" (identifier "uVar3") (| "|") (cast_expression "(uint)uVar5" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar5")))) (; ";")) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" (identifier "iVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);" (assignment_expression "uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20)" (identifier "uVar4") (= "=") (binary_expression "uVar4 | (uint)((ulonglong)uVar5 >> 0x20)" (identifier "uVar4") (| "|") (call_expression "(uint)((ulonglong)uVar5 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)uVar5 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar5 >> 0x20" (cast_expression "(ulonglong)uVar5" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x20")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar2 < iVar1)" (( "(") (binary_expression "iVar2 < iVar1" (identifier "iVar2") (< "<") (identifier "iVar1")) () ")")) (; ";")) (} "}"))) (return_statement "return CONCAT44(uVar4,uVar3);" (return "return") (call_expression "CONCAT44(uVar4,uVar3)" (identifier "CONCAT44") (argument_list "(uVar4,uVar3)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar3") () ")"))) (; ";")) (} "}")))

type_1 __regparm3 function_1(type_2 *pMaskSet,type_3 *pList)

{
  type_4 *var_2;
  int var_1;
  int var_3;
  type_5 var_6;
  type_5 var_7;
  type_1 var_8;
  
  var_6 = 0;
  var_7 = 0;
  var_3 = 0;
  var_1 = pList->nExpr;
  if (0 < var_1) {
    do {
      while (var_2 = pList->a[var_3].pExpr, var_2 == (type_4 *)0x0) {
        var_3 = var_3 + 1;
        if (var_1 <= var_3) {
          return var_4(var_7,var_6);
        }
      }
      var_3 = var_3 + 1;
      var_8 = var_5(pMaskSet,var_2);
      var_6 = var_6 | (type_5)var_8;
      var_1 = pList->nExpr;
      var_7 = var_7 | (type_5)(var_8 >> 0x20);
    } while (var_3 < var_1);
  }
  return var_4(var_7,var_6);
}


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

undefined8 __regparm3 MASKED(undefined4 param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  
  uVar3 = 0;
  uVar4 = 0;
  iVar2 = 0;
  iVar1 = *param_2;
  if (0 < iVar1) {
    do {
      while (param_2[iVar2 * 5 + 1] == 0) {
        iVar2 = iVar2 + 1;
        if (iVar1 <= iVar2) {
          return CONCAT44(uVar4,uVar3);
        }
      }
      iVar2 = iVar2 + 1;
      uVar5 = FUN_0004e7e0();
      uVar3 = uVar3 | (uint)uVar5;
      iVar1 = *param_2;
      uVar4 = uVar4 | (uint)((ulonglong)uVar5 >> 0x20);
    } while (iVar2 < iVar1);
  }
  return CONCAT44(uVar4,uVar3);
}

