
uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint *puVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  longlong lVar7;
  
  uVar1 = *param_1;
  uVar2 = param_2 - 2;
  if (param_2 < 2 || uVar2 == 0) {
    if (uVar2 == 0) {
      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +
              (param_1[1] & 0xffff) * 0x100;
    }
    return uVar1;
  }
  uVar4 = 0;
  uVar5 = 0;
  uVar6 = 0;
  do {
    puVar3 = param_1;
    uVar1 = uVar2;
    uVar4 = uVar4 + *puVar3;
    uVar5 = uVar5 + puVar3[1];
    uVar6 = uVar6 + puVar3[2];
    uVar2 = uVar1 - 3;
    param_1 = puVar3 + 3;
  } while (2 < uVar1 && uVar2 != 0);
  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {
    uVar5 = uVar5 + puVar3[4];
  }
  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100
          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;
  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);
}



uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint *puVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  longlong lVar7;
  
  uVar1 = *param_1;
  uVar2 = param_2 - 2;
  if (param_2 < 2 || uVar2 == 0) {
    if (uVar2 == 0) {
      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +
              (param_1[1] & 0xffff) * 0x100;
    }
    return uVar1;
  }
  uVar4 = 0;
  uVar5 = 0;
  uVar6 = 0;
  do {
    puVar3 = param_1;
    uVar1 = uVar2;
    uVar4 = uVar4 + *puVar3;
    uVar5 = uVar5 + puVar3[1];
    uVar6 = uVar6 + puVar3[2];
    uVar2 = uVar1 - 3;
    param_1 = puVar3 + 3;
  } while (2 < uVar1 && uVar2 != 0);
  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {
    uVar5 = uVar5 + puVar3[4];
  }
  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100
          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;
  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);
}


MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,dword ptr [ESP + 0x4]
MOV EAX,dword ptr [EDX]
SUB ECX,0x2
JA 0x00040ea4
JNZ 0x00040ea3
MOV EDX,dword ptr [EDX + 0x4]
MOV ECX,EAX
SHR EAX,0x18
AND ECX,0xffffff
ADD EAX,ECX
MOV ECX,EDX
SHL EDX,0x8
SHR ECX,0x10
ADD EAX,ECX
AND EDX,0xffff00
ADD EAX,EDX
RET
PXOR MM0,MM0
PXOR MM1,MM1
PXOR MM2,MM2
PCMPEQD MM7,MM7
PSRLQ MM7,0x20
PCMPEQD MM6,MM6
PSRLQ MM6,0x28
MOVD MM3,dword ptr [EDX]
PADDQ MM0,MM3
MOVD MM3,dword ptr [EDX + 0x4]
PADDQ MM1,MM3
MOVD MM3,dword ptr [EDX + 0x8]
PADDQ MM2,MM3
ADD EDX,0xc
SUB ECX,0x3
JA 0x00040ebb
ADD ECX,0x1
JS 0x00040eeb
MOVD MM3,dword ptr [EDX]
PADDQ MM0,MM3
JZ 0x00040eeb
MOVD MM3,dword ptr [EDX + 0x4]
PADDQ MM1,MM3
MOVQ MM3,MM7
PAND MM3,MM0
MOVQ MM4,MM7
PAND MM4,MM1
MOVQ MM5,MM7
PAND MM5,MM2
PSRLQ MM0,0x20
PSRLQ MM1,0x20
PSRLQ MM2,0x20
PADDQ MM4,MM0
PADDQ MM5,MM1
PADDQ MM3,MM2
PSLLQ MM4,0x8
PSLLQ MM5,0x10
PADDQ MM3,MM4
PADDQ MM3,MM5
PAND MM6,MM3
PSRLQ MM3,0x18
PADDQ MM3,MM6
MOVD EAX,MM3
EMMS
RET
(translation_unit "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}\n\n" (function_definition "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" type_identifier (function_declarator "__gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)" identifier (parameter_list "(uint *param_1,uint param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulonglong uVar4;" type_identifier identifier ;) (declaration "ulonglong uVar5;" type_identifier identifier ;) (declaration "ulonglong uVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar2 = param_2 - 2;" (assignment_expression "uVar2 = param_2 - 2" identifier = (binary_expression "param_2 - 2" identifier - number_literal)) ;) (if_statement "if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" if (parenthesized_expression "(param_2 < 2 || uVar2 == 0)" ( (binary_expression "param_2 < 2 || uVar2 == 0" (binary_expression "param_2 < 2" identifier < number_literal) || (binary_expression "uVar2 == 0" identifier == number_literal)) )) (compound_statement "{\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" { (if_statement "if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" { (expression_statement "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;" (assignment_expression "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" identifier = (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10)" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff)" (parenthesized_expression "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )) + (parenthesized_expression "(uVar1 & 0xffffff)" ( (binary_expression "uVar1 & 0xffffff" identifier & number_literal) ))) + (parenthesized_expression "(param_1[1] >> 0x10)" ( (binary_expression "param_1[1] >> 0x10" (subscript_expression "param_1[1]" identifier [ number_literal ]) >> number_literal) ))) + (binary_expression "(param_1[1] & 0xffff) * 0x100" (parenthesized_expression "(param_1[1] & 0xffff)" ( (binary_expression "param_1[1] & 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) & number_literal) )) * number_literal))) ;) })) (return_statement "return uVar1;" return identifier ;) })) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);" do (compound_statement "{\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  }" { (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" identifier = identifier) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) (expression_statement "uVar4 = uVar4 + *puVar3;" (assignment_expression "uVar4 = uVar4 + *puVar3" identifier = (binary_expression "uVar4 + *puVar3" identifier + (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "uVar5 = uVar5 + puVar3[1];" (assignment_expression "uVar5 = uVar5 + puVar3[1]" identifier = (binary_expression "uVar5 + puVar3[1]" identifier + (subscript_expression "puVar3[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar6 = uVar6 + puVar3[2];" (assignment_expression "uVar6 = uVar6 + puVar3[2]" identifier = (binary_expression "uVar6 + puVar3[2]" identifier + (subscript_expression "puVar3[2]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = uVar1 - 3;" (assignment_expression "uVar2 = uVar1 - 3" identifier = (binary_expression "uVar1 - 3" identifier - number_literal)) ;) (expression_statement "param_1 = puVar3 + 3;" (assignment_expression "param_1 = puVar3 + 3" identifier = (binary_expression "puVar3 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(2 < uVar1 && uVar2 != 0)" ( (binary_expression "2 < uVar1 && uVar2 != 0" (binary_expression "2 < uVar1" number_literal < identifier) && (binary_expression "uVar2 != 0" identifier != number_literal)) )) ;) (if_statement "if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }" if (parenthesized_expression "((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff))" ( (binary_expression "(-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" (parenthesized_expression "(-1 < (int)(uVar1 - 2))" ( (binary_expression "-1 < (int)(uVar1 - 2)" number_literal < (cast_expression "(int)(uVar1 - 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 - 2)" ( (binary_expression "uVar1 - 2" identifier - number_literal) )))) )) && (parenthesized_expression "(uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" ( (comma_expression "uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff" (assignment_expression "uVar4 = uVar4 + puVar3[3]" identifier = (binary_expression "uVar4 + puVar3[3]" identifier + (subscript_expression "puVar3[3]" identifier [ number_literal ]))) , (binary_expression "uVar2 != 0xffffffff" identifier != number_literal)) ))) )) (compound_statement "{\n    uVar5 = uVar5 + puVar3[4];\n  }" { (expression_statement "uVar5 = uVar5 + puVar3[4];" (assignment_expression "uVar5 = uVar5 + puVar3[4]" identifier = (binary_expression "uVar5 + puVar3[4]" identifier + (subscript_expression "puVar3[4]" identifier [ number_literal ]))) ;) })) (expression_statement "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;" (assignment_expression "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" identifier = (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20)" (parenthesized_expression "(uVar4 & 0xffffffff)" ( (binary_expression "uVar4 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar6 >> 0x20)" ( (binary_expression "uVar6 >> 0x20" identifier >> number_literal) ))) + (binary_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (parenthesized_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20))" ( (binary_expression "(uVar5 & 0xffffffff) + (uVar4 >> 0x20)" (parenthesized_expression "(uVar5 & 0xffffffff)" ( (binary_expression "uVar5 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar4 >> 0x20)" ( (binary_expression "uVar4 >> 0x20" identifier >> number_literal) ))) )) * number_literal)) + (binary_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (parenthesized_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20))" ( (binary_expression "(uVar6 & 0xffffffff) + (uVar5 >> 0x20)" (parenthesized_expression "(uVar6 & 0xffffffff)" ( (binary_expression "uVar6 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar5 >> 0x20)" ( (binary_expression "uVar5 >> 0x20" identifier >> number_literal) ))) )) * number_literal))) ;) (return_statement "return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);" return (binary_expression "(int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff)" (cast_expression "(int)((ulonglong)lVar7 >> 0x18)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar7 >> 0x18)" ( (binary_expression "(ulonglong)lVar7 >> 0x18" (cast_expression "(ulonglong)lVar7" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (parenthesized_expression "((uint)lVar7 & 0xffffff)" ( (binary_expression "(uint)lVar7 & 0xffffff" (cast_expression "(uint)lVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) ;) })))
(translation_unit "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}\n\n" (function_definition "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" type_identifier (function_declarator "__gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)" identifier (parameter_list "(uint *param_1,uint param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulonglong uVar4;" type_identifier identifier ;) (declaration "ulonglong uVar5;" type_identifier identifier ;) (declaration "ulonglong uVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar2 = param_2 - 2;" (assignment_expression "uVar2 = param_2 - 2" identifier = (binary_expression "param_2 - 2" identifier - number_literal)) ;) (if_statement "if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" if (parenthesized_expression "(param_2 < 2 || uVar2 == 0)" ( (binary_expression "param_2 < 2 || uVar2 == 0" (binary_expression "param_2 < 2" identifier < number_literal) || (binary_expression "uVar2 == 0" identifier == number_literal)) )) (compound_statement "{\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" { (if_statement "if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" { (expression_statement "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;" (assignment_expression "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" identifier = (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10)" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff)" (parenthesized_expression "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )) + (parenthesized_expression "(uVar1 & 0xffffff)" ( (binary_expression "uVar1 & 0xffffff" identifier & number_literal) ))) + (parenthesized_expression "(param_1[1] >> 0x10)" ( (binary_expression "param_1[1] >> 0x10" (subscript_expression "param_1[1]" identifier [ number_literal ]) >> number_literal) ))) + (binary_expression "(param_1[1] & 0xffff) * 0x100" (parenthesized_expression "(param_1[1] & 0xffff)" ( (binary_expression "param_1[1] & 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) & number_literal) )) * number_literal))) ;) })) (return_statement "return uVar1;" return identifier ;) })) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);" do (compound_statement "{\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  }" { (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" identifier = identifier) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) (expression_statement "uVar4 = uVar4 + *puVar3;" (assignment_expression "uVar4 = uVar4 + *puVar3" identifier = (binary_expression "uVar4 + *puVar3" identifier + (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "uVar5 = uVar5 + puVar3[1];" (assignment_expression "uVar5 = uVar5 + puVar3[1]" identifier = (binary_expression "uVar5 + puVar3[1]" identifier + (subscript_expression "puVar3[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar6 = uVar6 + puVar3[2];" (assignment_expression "uVar6 = uVar6 + puVar3[2]" identifier = (binary_expression "uVar6 + puVar3[2]" identifier + (subscript_expression "puVar3[2]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = uVar1 - 3;" (assignment_expression "uVar2 = uVar1 - 3" identifier = (binary_expression "uVar1 - 3" identifier - number_literal)) ;) (expression_statement "param_1 = puVar3 + 3;" (assignment_expression "param_1 = puVar3 + 3" identifier = (binary_expression "puVar3 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(2 < uVar1 && uVar2 != 0)" ( (binary_expression "2 < uVar1 && uVar2 != 0" (binary_expression "2 < uVar1" number_literal < identifier) && (binary_expression "uVar2 != 0" identifier != number_literal)) )) ;) (if_statement "if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }" if (parenthesized_expression "((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff))" ( (binary_expression "(-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" (parenthesized_expression "(-1 < (int)(uVar1 - 2))" ( (binary_expression "-1 < (int)(uVar1 - 2)" number_literal < (cast_expression "(int)(uVar1 - 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 - 2)" ( (binary_expression "uVar1 - 2" identifier - number_literal) )))) )) && (parenthesized_expression "(uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" ( (comma_expression "uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff" (assignment_expression "uVar4 = uVar4 + puVar3[3]" identifier = (binary_expression "uVar4 + puVar3[3]" identifier + (subscript_expression "puVar3[3]" identifier [ number_literal ]))) , (binary_expression "uVar2 != 0xffffffff" identifier != number_literal)) ))) )) (compound_statement "{\n    uVar5 = uVar5 + puVar3[4];\n  }" { (expression_statement "uVar5 = uVar5 + puVar3[4];" (assignment_expression "uVar5 = uVar5 + puVar3[4]" identifier = (binary_expression "uVar5 + puVar3[4]" identifier + (subscript_expression "puVar3[4]" identifier [ number_literal ]))) ;) })) (expression_statement "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;" (assignment_expression "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" identifier = (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20)" (parenthesized_expression "(uVar4 & 0xffffffff)" ( (binary_expression "uVar4 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar6 >> 0x20)" ( (binary_expression "uVar6 >> 0x20" identifier >> number_literal) ))) + (binary_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (parenthesized_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20))" ( (binary_expression "(uVar5 & 0xffffffff) + (uVar4 >> 0x20)" (parenthesized_expression "(uVar5 & 0xffffffff)" ( (binary_expression "uVar5 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar4 >> 0x20)" ( (binary_expression "uVar4 >> 0x20" identifier >> number_literal) ))) )) * number_literal)) + (binary_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (parenthesized_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20))" ( (binary_expression "(uVar6 & 0xffffffff) + (uVar5 >> 0x20)" (parenthesized_expression "(uVar6 & 0xffffffff)" ( (binary_expression "uVar6 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar5 >> 0x20)" ( (binary_expression "uVar5 >> 0x20" identifier >> number_literal) ))) )) * number_literal))) ;) (return_statement "return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);" return (binary_expression "(int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff)" (cast_expression "(int)((ulonglong)lVar7 >> 0x18)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar7 >> 0x18)" ( (binary_expression "(ulonglong)lVar7 >> 0x18" (cast_expression "(ulonglong)lVar7" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (parenthesized_expression "((uint)lVar7 & 0xffffff)" ( (binary_expression "(uint)lVar7 & 0xffffff" (cast_expression "(uint)lVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) ;) })))
(translation_unit "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}\n\n" (function_definition "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" type_identifier (function_declarator "__gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)" identifier (parameter_list "(uint *param_1,uint param_2)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulonglong uVar4;" type_identifier identifier ;) (declaration "ulonglong uVar5;" type_identifier identifier ;) (declaration "ulonglong uVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar2 = param_2 - 2;" (assignment_expression "uVar2 = param_2 - 2" identifier = (binary_expression "param_2 - 2" identifier - number_literal)) ;) (if_statement "if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" if (parenthesized_expression "(param_2 < 2 || uVar2 == 0)" ( (binary_expression "param_2 < 2 || uVar2 == 0" (binary_expression "param_2 < 2" identifier < number_literal) || (binary_expression "uVar2 == 0" identifier == number_literal)) )) (compound_statement "{\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" { (if_statement "if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" { (expression_statement "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;" (assignment_expression "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" identifier = (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10)" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff)" (parenthesized_expression "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) )) + (parenthesized_expression "(uVar1 & 0xffffff)" ( (binary_expression "uVar1 & 0xffffff" identifier & number_literal) ))) + (parenthesized_expression "(param_1[1] >> 0x10)" ( (binary_expression "param_1[1] >> 0x10" (subscript_expression "param_1[1]" identifier [ number_literal ]) >> number_literal) ))) + (binary_expression "(param_1[1] & 0xffff) * 0x100" (parenthesized_expression "(param_1[1] & 0xffff)" ( (binary_expression "param_1[1] & 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) & number_literal) )) * number_literal))) ;) })) (return_statement "return uVar1;" return identifier ;) })) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);" do (compound_statement "{\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  }" { (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" identifier = identifier) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) (expression_statement "uVar4 = uVar4 + *puVar3;" (assignment_expression "uVar4 = uVar4 + *puVar3" identifier = (binary_expression "uVar4 + *puVar3" identifier + (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "uVar5 = uVar5 + puVar3[1];" (assignment_expression "uVar5 = uVar5 + puVar3[1]" identifier = (binary_expression "uVar5 + puVar3[1]" identifier + (subscript_expression "puVar3[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar6 = uVar6 + puVar3[2];" (assignment_expression "uVar6 = uVar6 + puVar3[2]" identifier = (binary_expression "uVar6 + puVar3[2]" identifier + (subscript_expression "puVar3[2]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = uVar1 - 3;" (assignment_expression "uVar2 = uVar1 - 3" identifier = (binary_expression "uVar1 - 3" identifier - number_literal)) ;) (expression_statement "param_1 = puVar3 + 3;" (assignment_expression "param_1 = puVar3 + 3" identifier = (binary_expression "puVar3 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(2 < uVar1 && uVar2 != 0)" ( (binary_expression "2 < uVar1 && uVar2 != 0" (binary_expression "2 < uVar1" number_literal < identifier) && (binary_expression "uVar2 != 0" identifier != number_literal)) )) ;) (if_statement "if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }" if (parenthesized_expression "((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff))" ( (binary_expression "(-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" (parenthesized_expression "(-1 < (int)(uVar1 - 2))" ( (binary_expression "-1 < (int)(uVar1 - 2)" number_literal < (cast_expression "(int)(uVar1 - 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 - 2)" ( (binary_expression "uVar1 - 2" identifier - number_literal) )))) )) && (parenthesized_expression "(uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" ( (comma_expression "uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff" (assignment_expression "uVar4 = uVar4 + puVar3[3]" identifier = (binary_expression "uVar4 + puVar3[3]" identifier + (subscript_expression "puVar3[3]" identifier [ number_literal ]))) , (binary_expression "uVar2 != 0xffffffff" identifier != number_literal)) ))) )) (compound_statement "{\n    uVar5 = uVar5 + puVar3[4];\n  }" { (expression_statement "uVar5 = uVar5 + puVar3[4];" (assignment_expression "uVar5 = uVar5 + puVar3[4]" identifier = (binary_expression "uVar5 + puVar3[4]" identifier + (subscript_expression "puVar3[4]" identifier [ number_literal ]))) ;) })) (expression_statement "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;" (assignment_expression "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" identifier = (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20)" (parenthesized_expression "(uVar4 & 0xffffffff)" ( (binary_expression "uVar4 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar6 >> 0x20)" ( (binary_expression "uVar6 >> 0x20" identifier >> number_literal) ))) + (binary_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (parenthesized_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20))" ( (binary_expression "(uVar5 & 0xffffffff) + (uVar4 >> 0x20)" (parenthesized_expression "(uVar5 & 0xffffffff)" ( (binary_expression "uVar5 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar4 >> 0x20)" ( (binary_expression "uVar4 >> 0x20" identifier >> number_literal) ))) )) * number_literal)) + (binary_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (parenthesized_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20))" ( (binary_expression "(uVar6 & 0xffffffff) + (uVar5 >> 0x20)" (parenthesized_expression "(uVar6 & 0xffffffff)" ( (binary_expression "uVar6 & 0xffffffff" identifier & number_literal) )) + (parenthesized_expression "(uVar5 >> 0x20)" ( (binary_expression "uVar5 >> 0x20" identifier >> number_literal) ))) )) * number_literal))) ;) (return_statement "return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);" return (binary_expression "(int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff)" (cast_expression "(int)((ulonglong)lVar7 >> 0x18)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar7 >> 0x18)" ( (binary_expression "(ulonglong)lVar7 >> 0x18" (cast_expression "(ulonglong)lVar7" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (parenthesized_expression "((uint)lVar7 & 0xffffff)" ( (binary_expression "(uint)lVar7 & 0xffffff" (cast_expression "(uint)lVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT < LIT) || (binary_expression IDENT == LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + (parenthesized_expression ( (binary_expression IDENT & LIT) ))) + (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) >> LIT) ))) + (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) * LIT))) ;) })) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression LIT < IDENT) && (binary_expression IDENT != LIT)) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) + (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) )) * LIT)) + (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) )) * LIT))) ;) (return_statement return (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) ;) })))
(function_definition "uint __gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" (type_identifier "uint") (function_declarator "__gmpn_mod_34lsub1_pentium4_sse2(uint *param_1,uint param_2)" (identifier "__gmpn_mod_34lsub1_pentium4_sse2") (parameter_list "(uint *param_1,uint param_2)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint *puVar3;\n  ulonglong uVar4;\n  ulonglong uVar5;\n  ulonglong uVar6;\n  longlong lVar7;\n  \n  uVar1 = *param_1;\n  uVar2 = param_2 - 2;\n  if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }\n  uVar4 = 0;\n  uVar5 = 0;\n  uVar6 = 0;\n  do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);\n  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }\n  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;\n  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "ulonglong uVar4;" (type_identifier "ulonglong") (identifier "uVar4") (; ";")) (declaration "ulonglong uVar5;" (type_identifier "ulonglong") (identifier "uVar5") (; ";")) (declaration "ulonglong uVar6;" (type_identifier "ulonglong") (identifier "uVar6") (; ";")) (declaration "longlong lVar7;" (type_identifier "longlong") (identifier "lVar7") (; ";")) (expression_statement "uVar1 = *param_1;" (assignment_expression "uVar1 = *param_1" (identifier "uVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar2 = param_2 - 2;" (assignment_expression "uVar2 = param_2 - 2" (identifier "uVar2") (= "=") (binary_expression "param_2 - 2" (identifier "param_2") (- "-") (number_literal "2"))) (; ";")) (if_statement "if (param_2 < 2 || uVar2 == 0) {\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" (if "if") (parenthesized_expression "(param_2 < 2 || uVar2 == 0)" (( "(") (binary_expression "param_2 < 2 || uVar2 == 0" (binary_expression "param_2 < 2" (identifier "param_2") (< "<") (number_literal "2")) (|| "||") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n    if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }\n    return uVar1;\n  }" ({ "{") (if_statement "if (uVar2 == 0) {\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;\n    }" ({ "{") (expression_statement "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100;" (assignment_expression "uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" (identifier "uVar1") (= "=") (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +\n              (param_1[1] & 0xffff) * 0x100" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10)" (binary_expression "(uVar1 >> 0x18) + (uVar1 & 0xffffff)" (parenthesized_expression "(uVar1 >> 0x18)" (( "(") (binary_expression "uVar1 >> 0x18" (identifier "uVar1") (>> ">>") (number_literal "0x18")) () ")")) (+ "+") (parenthesized_expression "(uVar1 & 0xffffff)" (( "(") (binary_expression "uVar1 & 0xffffff" (identifier "uVar1") (& "&") (number_literal "0xffffff")) () ")"))) (+ "+") (parenthesized_expression "(param_1[1] >> 0x10)" (( "(") (binary_expression "param_1[1] >> 0x10" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (>> ">>") (number_literal "0x10")) () ")"))) (+ "+") (binary_expression "(param_1[1] & 0xffff) * 0x100" (parenthesized_expression "(param_1[1] & 0xffff)" (( "(") (binary_expression "param_1[1] & 0xffff" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (& "&") (number_literal "0xffff")) () ")")) (* "*") (number_literal "0x100")))) (; ";")) (} "}"))) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  } while (2 < uVar1 && uVar2 != 0);" (do "do") (compound_statement "{\n    puVar3 = param_1;\n    uVar1 = uVar2;\n    uVar4 = uVar4 + *puVar3;\n    uVar5 = uVar5 + puVar3[1];\n    uVar6 = uVar6 + puVar3[2];\n    uVar2 = uVar1 - 3;\n    param_1 = puVar3 + 3;\n  }" ({ "{") (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" (identifier "puVar3") (= "=") (identifier "param_1")) (; ";")) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" (identifier "uVar1") (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar4 = uVar4 + *puVar3;" (assignment_expression "uVar4 = uVar4 + *puVar3" (identifier "uVar4") (= "=") (binary_expression "uVar4 + *puVar3" (identifier "uVar4") (+ "+") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (; ";")) (expression_statement "uVar5 = uVar5 + puVar3[1];" (assignment_expression "uVar5 = uVar5 + puVar3[1]" (identifier "uVar5") (= "=") (binary_expression "uVar5 + puVar3[1]" (identifier "uVar5") (+ "+") (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "uVar6 = uVar6 + puVar3[2];" (assignment_expression "uVar6 = uVar6 + puVar3[2]" (identifier "uVar6") (= "=") (binary_expression "uVar6 + puVar3[2]" (identifier "uVar6") (+ "+") (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "uVar2 = uVar1 - 3;" (assignment_expression "uVar2 = uVar1 - 3" (identifier "uVar2") (= "=") (binary_expression "uVar1 - 3" (identifier "uVar1") (- "-") (number_literal "3"))) (; ";")) (expression_statement "param_1 = puVar3 + 3;" (assignment_expression "param_1 = puVar3 + 3" (identifier "param_1") (= "=") (binary_expression "puVar3 + 3" (identifier "puVar3") (+ "+") (number_literal "3"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(2 < uVar1 && uVar2 != 0)" (( "(") (binary_expression "2 < uVar1 && uVar2 != 0" (binary_expression "2 < uVar1" (number_literal "2") (< "<") (identifier "uVar1")) (&& "&&") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0"))) () ")")) (; ";")) (if_statement "if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {\n    uVar5 = uVar5 + puVar3[4];\n  }" (if "if") (parenthesized_expression "((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff))" (( "(") (binary_expression "(-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" (parenthesized_expression "(-1 < (int)(uVar1 - 2))" (( "(") (binary_expression "-1 < (int)(uVar1 - 2)" (number_literal "-1") (< "<") (cast_expression "(int)(uVar1 - 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 - 2)" (( "(") (binary_expression "uVar1 - 2" (identifier "uVar1") (- "-") (number_literal "2")) () ")")))) () ")")) (&& "&&") (parenthesized_expression "(uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)" (( "(") (comma_expression "uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff" (assignment_expression "uVar4 = uVar4 + puVar3[3]" (identifier "uVar4") (= "=") (binary_expression "uVar4 + puVar3[3]" (identifier "uVar4") (+ "+") (subscript_expression "puVar3[3]" (identifier "puVar3") ([ "[") (number_literal "3") (] "]")))) (, ",") (binary_expression "uVar2 != 0xffffffff" (identifier "uVar2") (!= "!=") (number_literal "0xffffffff"))) () ")"))) () ")")) (compound_statement "{\n    uVar5 = uVar5 + puVar3[4];\n  }" ({ "{") (expression_statement "uVar5 = uVar5 + puVar3[4];" (assignment_expression "uVar5 = uVar5 + puVar3[4]" (identifier "uVar5") (= "=") (binary_expression "uVar5 + puVar3[4]" (identifier "uVar5") (+ "+") (subscript_expression "puVar3[4]" (identifier "puVar3") ([ "[") (number_literal "4") (] "]")))) (; ";")) (} "}"))) (expression_statement "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;" (assignment_expression "lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (identifier "lVar7") (= "=") (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100\n          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (binary_expression "(uVar4 & 0xffffffff) + (uVar6 >> 0x20)" (parenthesized_expression "(uVar4 & 0xffffffff)" (( "(") (binary_expression "uVar4 & 0xffffffff" (identifier "uVar4") (& "&") (number_literal "0xffffffff")) () ")")) (+ "+") (parenthesized_expression "(uVar6 >> 0x20)" (( "(") (binary_expression "uVar6 >> 0x20" (identifier "uVar6") (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (binary_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100" (parenthesized_expression "((uVar5 & 0xffffffff) + (uVar4 >> 0x20))" (( "(") (binary_expression "(uVar5 & 0xffffffff) + (uVar4 >> 0x20)" (parenthesized_expression "(uVar5 & 0xffffffff)" (( "(") (binary_expression "uVar5 & 0xffffffff" (identifier "uVar5") (& "&") (number_literal "0xffffffff")) () ")")) (+ "+") (parenthesized_expression "(uVar4 >> 0x20)" (( "(") (binary_expression "uVar4 >> 0x20" (identifier "uVar4") (>> ">>") (number_literal "0x20")) () ")"))) () ")")) (* "*") (number_literal "0x100"))) (+ "+") (binary_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000" (parenthesized_expression "((uVar6 & 0xffffffff) + (uVar5 >> 0x20))" (( "(") (binary_expression "(uVar6 & 0xffffffff) + (uVar5 >> 0x20)" (parenthesized_expression "(uVar6 & 0xffffffff)" (( "(") (binary_expression "uVar6 & 0xffffffff" (identifier "uVar6") (& "&") (number_literal "0xffffffff")) () ")")) (+ "+") (parenthesized_expression "(uVar5 >> 0x20)" (( "(") (binary_expression "uVar5 >> 0x20" (identifier "uVar5") (>> ">>") (number_literal "0x20")) () ")"))) () ")")) (* "*") (number_literal "0x10000")))) (; ";")) (return_statement "return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);" (return "return") (binary_expression "(int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff)" (cast_expression "(int)((ulonglong)lVar7 >> 0x18)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar7 >> 0x18)" (( "(") (binary_expression "(ulonglong)lVar7 >> 0x18" (cast_expression "(ulonglong)lVar7" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar7")) (>> ">>") (number_literal "0x18")) () ")"))) (+ "+") (parenthesized_expression "((uint)lVar7 & 0xffffff)" (( "(") (binary_expression "(uint)lVar7 & 0xffffff" (cast_expression "(uint)lVar7" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar7")) (& "&") (number_literal "0xffffff")) () ")"))) (; ";")) (} "}")))

type_1 function_1(type_1 *param_1,type_1 var_1)

{
  type_1 var_3;
  type_1 var_2;
  type_1 *var_7;
  type_2 var_4;
  type_2 var_5;
  type_2 var_6;
  type_3 lVar7;
  
  var_3 = *param_1;
  var_2 = var_1 - 2;
  if (var_1 < 2 || var_2 == 0) {
    if (var_2 == 0) {
      var_3 = (var_3 >> 0x18) + (var_3 & 0xffffff) + (param_1[1] >> 0x10) +
              (param_1[1] & 0xffff) * 0x100;
    }
    return var_3;
  }
  var_4 = 0;
  var_5 = 0;
  var_6 = 0;
  do {
    var_7 = param_1;
    var_3 = var_2;
    var_4 = var_4 + *var_7;
    var_5 = var_5 + var_7[1];
    var_6 = var_6 + var_7[2];
    var_2 = var_3 - 3;
    param_1 = var_7 + 3;
  } while (2 < var_3 && var_2 != 0);
  if ((-1 < (int)(var_3 - 2)) && (var_4 = var_4 + var_7[3], var_2 != 0xffffffff)) {
    var_5 = var_5 + var_7[4];
  }
  lVar7 = (var_4 & 0xffffffff) + (var_6 >> 0x20) + ((var_5 & 0xffffffff) + (var_4 >> 0x20)) * 0x100
          + ((var_6 & 0xffffffff) + (var_5 >> 0x20)) * 0x10000;
  return (int)((type_2)lVar7 >> 0x18) + ((type_1)lVar7 & 0xffffff);
}


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

uint MASKED(uint *param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint *puVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  longlong lVar7;
  
  uVar1 = *param_1;
  uVar2 = param_2 - 2;
  if (param_2 < 2 || uVar2 == 0) {
    if (uVar2 == 0) {
      uVar1 = (uVar1 >> 0x18) + (uVar1 & 0xffffff) + (param_1[1] >> 0x10) +
              (param_1[1] & 0xffff) * 0x100;
    }
    return uVar1;
  }
  uVar4 = 0;
  uVar5 = 0;
  uVar6 = 0;
  do {
    puVar3 = param_1;
    uVar1 = uVar2;
    uVar4 = uVar4 + *puVar3;
    uVar5 = uVar5 + puVar3[1];
    uVar6 = uVar6 + puVar3[2];
    uVar2 = uVar1 - 3;
    param_1 = puVar3 + 3;
  } while (2 < uVar1 && uVar2 != 0);
  if ((-1 < (int)(uVar1 - 2)) && (uVar4 = uVar4 + puVar3[3], uVar2 != 0xffffffff)) {
    uVar5 = uVar5 + puVar3[4];
  }
  lVar7 = (uVar4 & 0xffffffff) + (uVar6 >> 0x20) + ((uVar5 & 0xffffffff) + (uVar4 >> 0x20)) * 0x100
          + ((uVar6 & 0xffffffff) + (uVar5 >> 0x20)) * 0x10000;
  return (int)((ulonglong)lVar7 >> 0x18) + ((uint)lVar7 & 0xffffff);
}

