
undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)

{
  uint *puVar1;
  uint uVar2;
  undefined4 *puVar3;
  bool bVar4;
  longlong lVar5;
  uint uVar6;
  longlong lVar7;
  longlong lVar8;
  longlong lVar9;
  ulonglong uVar10;
  ulonglong uVar11;
  
  uVar10 = 0;
  if (param_3 < 4) {
    do {
      uVar2 = *param_2;
      param_2 = param_2 + 1;
      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;
      *param_1 = (int)uVar11;
      uVar10 = uVar11 >> 0x20;
      param_3 = param_3 - 1;
      param_1 = param_1 + 1;
    } while (param_3 != 0);
    return (int)(uVar11 >> 0x20);
  }
  uVar2 = param_3 & 3;
  if (uVar2 == 0) {
    uVar2 = -param_3;
    puVar1 = param_2 + -4;
    puVar3 = param_1 + -3;
    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    goto LAB_000410d5;
  }
  if (uVar2 < 2) {
    uVar2 = uVar2 - param_3;
    puVar1 = param_2 + -3;
    puVar3 = param_1 + -2;
    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    goto LAB_000410c3;
  }
  if (uVar2 != 2) {
    uVar2 = uVar2 - param_3;
    puVar1 = param_2 + -1;
    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    do {
      puVar3 = param_1;
      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[4];
      *puVar3 = (int)(uVar10 + lVar5);
      uVar10 = uVar10 + lVar5 >> 0x20;
LAB_000410b1:
      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[5];
      puVar3[1] = (int)(uVar10 + lVar7);
      uVar10 = uVar10 + lVar7 >> 0x20;
LAB_000410c3:
      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[6];
      puVar3[2] = (int)(uVar10 + lVar8);
      uVar10 = uVar10 + lVar8 >> 0x20;
LAB_000410d5:
      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[7];
      puVar3[3] = (int)(uVar10 + lVar9);
      uVar10 = uVar10 + lVar9 >> 0x20;
      puVar1 = puVar1 + 4;
      bVar4 = uVar2 < 0xfffffffc;
      uVar2 = uVar2 + 4;
      param_1 = puVar3 + 4;
    } while (bVar4 && uVar2 != 0);
    puVar3[4] = (int)(uVar10 + lVar5);
    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;
    puVar3[5] = (int)uVar10;
    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;
    puVar3[6] = (int)lVar5;
    return (int)((ulonglong)lVar5 >> 0x20);
  }
  uVar2 = 2 - param_3;
  puVar1 = param_2 + -2;
  puVar3 = param_1 + -1;
  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;
  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;
  uVar6 = param_2[2];
  goto LAB_000410b1;
}



undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)

{
  uint *puVar1;
  uint uVar2;
  undefined4 *puVar3;
  bool bVar4;
  longlong lVar5;
  uint uVar6;
  longlong lVar7;
  longlong lVar8;
  longlong lVar9;
  ulonglong uVar10;
  ulonglong uVar11;
  
  uVar10 = 0;
  if (param_3 < 4) {
    do {
      uVar2 = *param_2;
      param_2 = param_2 + 1;
      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;
      *param_1 = (int)uVar11;
      uVar10 = uVar11 >> 0x20;
      param_3 = param_3 - 1;
      param_1 = param_1 + 1;
    } while (param_3 != 0);
    return (int)(uVar11 >> 0x20);
  }
  uVar2 = param_3 & 3;
  if (uVar2 == 0) {
    uVar2 = -param_3;
    puVar1 = param_2 + -4;
    puVar3 = param_1 + -3;
    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    goto LAB_000410d5;
  }
  if (uVar2 < 2) {
    uVar2 = uVar2 - param_3;
    puVar1 = param_2 + -3;
    puVar3 = param_1 + -2;
    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    goto LAB_000410c3;
  }
  if (uVar2 != 2) {
    uVar2 = uVar2 - param_3;
    puVar1 = param_2 + -1;
    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    do {
      puVar3 = param_1;
      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[4];
      *puVar3 = (int)(uVar10 + lVar5);
      uVar10 = uVar10 + lVar5 >> 0x20;
LAB_000410b1:
      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[5];
      puVar3[1] = (int)(uVar10 + lVar7);
      uVar10 = uVar10 + lVar7 >> 0x20;
LAB_000410c3:
      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[6];
      puVar3[2] = (int)(uVar10 + lVar8);
      uVar10 = uVar10 + lVar8 >> 0x20;
LAB_000410d5:
      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[7];
      puVar3[3] = (int)(uVar10 + lVar9);
      uVar10 = uVar10 + lVar9 >> 0x20;
      puVar1 = puVar1 + 4;
      bVar4 = uVar2 < 0xfffffffc;
      uVar2 = uVar2 + 4;
      param_1 = puVar3 + 4;
    } while (bVar4 && uVar2 != 0);
    puVar3[4] = (int)(uVar10 + lVar5);
    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;
    puVar3[5] = (int)uVar10;
    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;
    puVar3[6] = (int)lVar5;
    return (int)((ulonglong)lVar5 >> 0x20);
  }
  uVar2 = 2 - param_3;
  puVar1 = param_2 + -2;
  puVar3 = param_1 + -1;
  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;
  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;
  uVar6 = param_2[2];
  goto LAB_000410b1;
}


PXOR MM6,MM6
MOV EDX,dword ptr [ESP + 0x4]
MOV EAX,dword ptr [ESP + 0x8]
MOV ECX,dword ptr [ESP + 0xc]
MOVD MM7,dword ptr [ESP + 0x10]
CMP ECX,0x4
JNC 0x00041019
MOVD MM0,dword ptr [EAX]
LEA EAX,[EAX + 0x4]
LEA EDX,[EDX + 0x4]
PMULUDQ MM0,MM7
PADDQ MM6,MM0
MOVD dword ptr [EDX + -0x4],MM6
PSRLQ MM6,0x20
DEC ECX
JNZ 0x00040ff9
MOVD EAX,MM6
EMMS
RET
AND ECX,0x3
JZ 0x00041027
CMP ECX,0x2
JC 0x00041047
JZ 0x00041064
JMP 0x00041081
MOVD MM3,dword ptr [EAX]
SUB ECX,dword ptr [ESP + 0xc]
LEA EAX,[EAX + -0x10]
LEA EDX,[EDX + -0xc]
PMULUDQ MM3,MM7
MOVD MM0,dword ptr [EAX + 0x14]
PMULUDQ MM0,MM7
MOVD MM1,dword ptr [EAX + 0x18]
JMP 0x000410d5
MOVD MM2,dword ptr [EAX]
SUB ECX,dword ptr [ESP + 0xc]
LEA EAX,[EAX + -0xc]
LEA EDX,[EDX + -0x8]
PMULUDQ MM2,MM7
MOVD MM3,dword ptr [EAX + 0x10]
PMULUDQ MM3,MM7
MOVD MM0,dword ptr [EAX + 0x14]
JMP 0x000410c3
MOVD MM1,dword ptr [EAX]
SUB ECX,dword ptr [ESP + 0xc]
LEA EAX,[EAX + -0x8]
LEA EDX,[EDX + -0x4]
PMULUDQ MM1,MM7
MOVD MM2,dword ptr [EAX + 0xc]
PMULUDQ MM2,MM7
MOVD MM3,dword ptr [EAX + 0x10]
JMP 0x000410b1
MOVD MM0,dword ptr [EAX]
SUB ECX,dword ptr [ESP + 0xc]
LEA EAX,[EAX + -0x4]
PMULUDQ MM0,MM7
MOVD MM1,dword ptr [EAX + 0x8]
PMULUDQ MM1,MM7
MOVD MM2,dword ptr [EAX + 0xc]
LEA ESI,[ESI]
PMULUDQ MM2,MM7
PADDQ MM6,MM0
MOVD MM3,dword ptr [EAX + 0x10]
MOVD dword ptr [EDX],MM6
PSRLQ MM6,0x20
PMULUDQ MM3,MM7
PADDQ MM6,MM1
MOVD MM0,dword ptr [EAX + 0x14]
MOVD dword ptr [EDX + 0x4],MM6
PSRLQ MM6,0x20
PMULUDQ MM0,MM7
PADDQ MM6,MM2
MOVD MM1,dword ptr [EAX + 0x18]
MOVD dword ptr [EDX + 0x8],MM6
PSRLQ MM6,0x20
PMULUDQ MM1,MM7
PADDQ MM6,MM3
MOVD MM2,dword ptr [EAX + 0x1c]
MOVD dword ptr [EDX + 0xc],MM6
PSRLQ MM6,0x20
LEA EAX,[EAX + 0x10]
LEA EDX,[EDX + 0x10]
ADD ECX,0x4
JA 0x000410a0
PMULUDQ MM2,MM7
PADDQ MM6,MM0
MOVD dword ptr [EDX],MM6
PSRLQ MM6,0x20
PADDQ MM6,MM1
MOVD dword ptr [EDX + 0x4],MM6
PSRLQ MM6,0x20
PADDQ MM6,MM2
MOVD dword ptr [EDX + 0x8],MM6
PSRLQ MM6,0x20
MOVD EAX,MM6
EMMS
RET
(translation_unit "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}\n\n" (function_definition "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" type_identifier (function_declarator "__gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "longlong lVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (declaration "longlong lVar8;" type_identifier identifier ;) (declaration "longlong lVar9;" type_identifier identifier ;) (declaration "ulonglong uVar10;" type_identifier identifier ;) (declaration "ulonglong uVar11;" type_identifier identifier ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (if_statement "if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" if (parenthesized_expression "(param_3 < 4)" ( (binary_expression "param_3 < 4" identifier < number_literal) )) (compound_statement "{\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" { (do_statement "do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);" do (compound_statement "{\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    }" { (expression_statement "uVar2 = *param_2;" (assignment_expression "uVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;" (assignment_expression "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" identifier = (binary_expression "uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" identifier + (binary_expression "(ulonglong)uVar2 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)))) ;) (expression_statement "*param_1 = (int)uVar11;" (assignment_expression "*param_1 = (int)uVar11" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)uVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "uVar10 = uVar11 >> 0x20;" (assignment_expression "uVar10 = uVar11 >> 0x20" identifier = (binary_expression "uVar11 >> 0x20" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 - 1;" (assignment_expression "param_3 = param_3 - 1" identifier = (binary_expression "param_3 - 1" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) ;) (return_statement "return (int)(uVar11 >> 0x20);" return (cast_expression "(int)(uVar11 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar11 >> 0x20)" ( (binary_expression "uVar11 >> 0x20" identifier >> number_literal) ))) ;) })) (expression_statement "uVar2 = param_3 & 3;" (assignment_expression "uVar2 = param_3 & 3" identifier = (binary_expression "param_3 & 3" identifier & number_literal)) ;) (if_statement "if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" { (expression_statement "uVar2 = -param_3;" (assignment_expression "uVar2 = -param_3" identifier = (unary_expression "-param_3" - identifier)) ;) (expression_statement "puVar1 = param_2 + -4;" (assignment_expression "puVar1 = param_2 + -4" identifier = (binary_expression "param_2 + -4" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -3;" (assignment_expression "puVar3 = param_1 + -3" identifier = (binary_expression "param_1 + -3" identifier + number_literal)) ;) (expression_statement "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410d5;" goto statement_identifier ;) })) (if_statement "if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" if (parenthesized_expression "(uVar2 < 2)" ( (binary_expression "uVar2 < 2" identifier < number_literal) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) (expression_statement "puVar1 = param_2 + -3;" (assignment_expression "puVar1 = param_2 + -3" identifier = (binary_expression "param_2 + -3" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -2;" (assignment_expression "puVar3 = param_1 + -2" identifier = (binary_expression "param_1 + -2" identifier + number_literal)) ;) (expression_statement "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410c3;" goto statement_identifier ;) })) (if_statement "if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" if (parenthesized_expression "(uVar2 != 2)" ( (binary_expression "uVar2 != 2" identifier != number_literal) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) (expression_statement "puVar1 = param_2 + -1;" (assignment_expression "puVar1 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (do_statement "do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);" do (compound_statement "{\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    }" { (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" identifier = identifier) ;) (expression_statement "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = puVar1[4];" (assignment_expression "uVar6 = puVar1[4]" identifier = (subscript_expression "puVar1[4]" identifier [ number_literal ])) ;) (expression_statement "*puVar3 = (int)(uVar10 + lVar5);" (assignment_expression "*puVar3 = (int)(uVar10 + lVar5)" (pointer_expression "*puVar3" * identifier) = (cast_expression "(int)(uVar10 + lVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar5)" ( (binary_expression "uVar10 + lVar5" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar5 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar5 >> 0x20" identifier = (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[5];" (assignment_expression "uVar6 = puVar1[5]" identifier = (subscript_expression "puVar1[5]" identifier [ number_literal ])) ;) (expression_statement "puVar3[1] = (int)(uVar10 + lVar7);" (assignment_expression "puVar3[1] = (int)(uVar10 + lVar7)" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar7)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar7)" ( (binary_expression "uVar10 + lVar7" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar7 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar7 >> 0x20" identifier = (binary_expression "uVar10 + lVar7 >> 0x20" (binary_expression "uVar10 + lVar7" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[6];" (assignment_expression "uVar6 = puVar1[6]" identifier = (subscript_expression "puVar1[6]" identifier [ number_literal ])) ;) (expression_statement "puVar3[2] = (int)(uVar10 + lVar8);" (assignment_expression "puVar3[2] = (int)(uVar10 + lVar8)" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar8)" ( (binary_expression "uVar10 + lVar8" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar8 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar8 >> 0x20" identifier = (binary_expression "uVar10 + lVar8 >> 0x20" (binary_expression "uVar10 + lVar8" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[7];" (assignment_expression "uVar6 = puVar1[7]" identifier = (subscript_expression "puVar1[7]" identifier [ number_literal ])) ;) (expression_statement "puVar3[3] = (int)(uVar10 + lVar9);" (assignment_expression "puVar3[3] = (int)(uVar10 + lVar9)" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar9)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar9)" ( (binary_expression "uVar10 + lVar9" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar9 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar9 >> 0x20" identifier = (binary_expression "uVar10 + lVar9 >> 0x20" (binary_expression "uVar10 + lVar9" identifier + identifier) >> number_literal)) ;) (expression_statement "puVar1 = puVar1 + 4;" (assignment_expression "puVar1 = puVar1 + 4" identifier = (binary_expression "puVar1 + 4" identifier + number_literal)) ;) (expression_statement "bVar4 = uVar2 < 0xfffffffc;" (assignment_expression "bVar4 = uVar2 < 0xfffffffc" identifier = (binary_expression "uVar2 < 0xfffffffc" identifier < number_literal)) ;) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" identifier = (binary_expression "uVar2 + 4" identifier + number_literal)) ;) (expression_statement "param_1 = puVar3 + 4;" (assignment_expression "param_1 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar4 && uVar2 != 0)" ( (binary_expression "bVar4 && uVar2 != 0" identifier && (binary_expression "uVar2 != 0" identifier != number_literal)) )) ;) (expression_statement "puVar3[4] = (int)(uVar10 + lVar5);" (assignment_expression "puVar3[4] = (int)(uVar10 + lVar5)" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar5)" ( (binary_expression "uVar10 + lVar5" identifier + identifier) )))) ;) (expression_statement "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;" (assignment_expression "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7" identifier = (binary_expression "(uVar10 + lVar5 >> 0x20) + lVar7" (parenthesized_expression "(uVar10 + lVar5 >> 0x20)" ( (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" identifier + identifier) >> number_literal) )) + identifier)) ;) (expression_statement "puVar3[5] = (int)uVar10;" (assignment_expression "puVar3[5] = (int)uVar10" (subscript_expression "puVar3[5]" identifier [ number_literal ]) = (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" (parenthesized_expression "(uVar10 >> 0x20)" ( (binary_expression "uVar10 >> 0x20" identifier >> number_literal) )) + (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)))) ;) (expression_statement "puVar3[6] = (int)lVar5;" (assignment_expression "puVar3[6] = (int)lVar5" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = (cast_expression "(int)lVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return (int)((ulonglong)lVar5 >> 0x20);" return (cast_expression "(int)((ulonglong)lVar5 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar5 >> 0x20)" ( (binary_expression "(ulonglong)lVar5 >> 0x20" (cast_expression "(ulonglong)lVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) ;) })) (expression_statement "uVar2 = 2 - param_3;" (assignment_expression "uVar2 = 2 - param_3" identifier = (binary_expression "2 - param_3" number_literal - identifier)) ;) (expression_statement "puVar1 = param_2 + -2;" (assignment_expression "puVar1 = param_2 + -2" identifier = (binary_expression "param_2 + -2" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -1;" (assignment_expression "puVar3 = param_1 + -1" identifier = (binary_expression "param_1 + -1" identifier + number_literal)) ;) (expression_statement "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410b1;" goto statement_identifier ;) })))
(translation_unit "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}\n\n" (function_definition "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" type_identifier (function_declarator "__gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "longlong lVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (declaration "longlong lVar8;" type_identifier identifier ;) (declaration "longlong lVar9;" type_identifier identifier ;) (declaration "ulonglong uVar10;" type_identifier identifier ;) (declaration "ulonglong uVar11;" type_identifier identifier ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (if_statement "if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" if (parenthesized_expression "(param_3 < 4)" ( (binary_expression "param_3 < 4" identifier < number_literal) )) (compound_statement "{\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" { (do_statement "do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);" do (compound_statement "{\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    }" { (expression_statement "uVar2 = *param_2;" (assignment_expression "uVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;" (assignment_expression "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" identifier = (binary_expression "uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" identifier + (binary_expression "(ulonglong)uVar2 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)))) ;) (expression_statement "*param_1 = (int)uVar11;" (assignment_expression "*param_1 = (int)uVar11" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)uVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "uVar10 = uVar11 >> 0x20;" (assignment_expression "uVar10 = uVar11 >> 0x20" identifier = (binary_expression "uVar11 >> 0x20" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 - 1;" (assignment_expression "param_3 = param_3 - 1" identifier = (binary_expression "param_3 - 1" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) ;) (return_statement "return (int)(uVar11 >> 0x20);" return (cast_expression "(int)(uVar11 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar11 >> 0x20)" ( (binary_expression "uVar11 >> 0x20" identifier >> number_literal) ))) ;) })) (expression_statement "uVar2 = param_3 & 3;" (assignment_expression "uVar2 = param_3 & 3" identifier = (binary_expression "param_3 & 3" identifier & number_literal)) ;) (if_statement "if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" { (expression_statement "uVar2 = -param_3;" (assignment_expression "uVar2 = -param_3" identifier = (unary_expression "-param_3" - identifier)) ;) (expression_statement "puVar1 = param_2 + -4;" (assignment_expression "puVar1 = param_2 + -4" identifier = (binary_expression "param_2 + -4" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -3;" (assignment_expression "puVar3 = param_1 + -3" identifier = (binary_expression "param_1 + -3" identifier + number_literal)) ;) (expression_statement "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410d5;" goto statement_identifier ;) })) (if_statement "if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" if (parenthesized_expression "(uVar2 < 2)" ( (binary_expression "uVar2 < 2" identifier < number_literal) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) (expression_statement "puVar1 = param_2 + -3;" (assignment_expression "puVar1 = param_2 + -3" identifier = (binary_expression "param_2 + -3" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -2;" (assignment_expression "puVar3 = param_1 + -2" identifier = (binary_expression "param_1 + -2" identifier + number_literal)) ;) (expression_statement "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410c3;" goto statement_identifier ;) })) (if_statement "if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" if (parenthesized_expression "(uVar2 != 2)" ( (binary_expression "uVar2 != 2" identifier != number_literal) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) (expression_statement "puVar1 = param_2 + -1;" (assignment_expression "puVar1 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (do_statement "do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);" do (compound_statement "{\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    }" { (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" identifier = identifier) ;) (expression_statement "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = puVar1[4];" (assignment_expression "uVar6 = puVar1[4]" identifier = (subscript_expression "puVar1[4]" identifier [ number_literal ])) ;) (expression_statement "*puVar3 = (int)(uVar10 + lVar5);" (assignment_expression "*puVar3 = (int)(uVar10 + lVar5)" (pointer_expression "*puVar3" * identifier) = (cast_expression "(int)(uVar10 + lVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar5)" ( (binary_expression "uVar10 + lVar5" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar5 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar5 >> 0x20" identifier = (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[5];" (assignment_expression "uVar6 = puVar1[5]" identifier = (subscript_expression "puVar1[5]" identifier [ number_literal ])) ;) (expression_statement "puVar3[1] = (int)(uVar10 + lVar7);" (assignment_expression "puVar3[1] = (int)(uVar10 + lVar7)" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar7)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar7)" ( (binary_expression "uVar10 + lVar7" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar7 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar7 >> 0x20" identifier = (binary_expression "uVar10 + lVar7 >> 0x20" (binary_expression "uVar10 + lVar7" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[6];" (assignment_expression "uVar6 = puVar1[6]" identifier = (subscript_expression "puVar1[6]" identifier [ number_literal ])) ;) (expression_statement "puVar3[2] = (int)(uVar10 + lVar8);" (assignment_expression "puVar3[2] = (int)(uVar10 + lVar8)" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar8)" ( (binary_expression "uVar10 + lVar8" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar8 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar8 >> 0x20" identifier = (binary_expression "uVar10 + lVar8 >> 0x20" (binary_expression "uVar10 + lVar8" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[7];" (assignment_expression "uVar6 = puVar1[7]" identifier = (subscript_expression "puVar1[7]" identifier [ number_literal ])) ;) (expression_statement "puVar3[3] = (int)(uVar10 + lVar9);" (assignment_expression "puVar3[3] = (int)(uVar10 + lVar9)" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar9)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar9)" ( (binary_expression "uVar10 + lVar9" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar9 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar9 >> 0x20" identifier = (binary_expression "uVar10 + lVar9 >> 0x20" (binary_expression "uVar10 + lVar9" identifier + identifier) >> number_literal)) ;) (expression_statement "puVar1 = puVar1 + 4;" (assignment_expression "puVar1 = puVar1 + 4" identifier = (binary_expression "puVar1 + 4" identifier + number_literal)) ;) (expression_statement "bVar4 = uVar2 < 0xfffffffc;" (assignment_expression "bVar4 = uVar2 < 0xfffffffc" identifier = (binary_expression "uVar2 < 0xfffffffc" identifier < number_literal)) ;) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" identifier = (binary_expression "uVar2 + 4" identifier + number_literal)) ;) (expression_statement "param_1 = puVar3 + 4;" (assignment_expression "param_1 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar4 && uVar2 != 0)" ( (binary_expression "bVar4 && uVar2 != 0" identifier && (binary_expression "uVar2 != 0" identifier != number_literal)) )) ;) (expression_statement "puVar3[4] = (int)(uVar10 + lVar5);" (assignment_expression "puVar3[4] = (int)(uVar10 + lVar5)" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar5)" ( (binary_expression "uVar10 + lVar5" identifier + identifier) )))) ;) (expression_statement "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;" (assignment_expression "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7" identifier = (binary_expression "(uVar10 + lVar5 >> 0x20) + lVar7" (parenthesized_expression "(uVar10 + lVar5 >> 0x20)" ( (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" identifier + identifier) >> number_literal) )) + identifier)) ;) (expression_statement "puVar3[5] = (int)uVar10;" (assignment_expression "puVar3[5] = (int)uVar10" (subscript_expression "puVar3[5]" identifier [ number_literal ]) = (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" (parenthesized_expression "(uVar10 >> 0x20)" ( (binary_expression "uVar10 >> 0x20" identifier >> number_literal) )) + (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)))) ;) (expression_statement "puVar3[6] = (int)lVar5;" (assignment_expression "puVar3[6] = (int)lVar5" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = (cast_expression "(int)lVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return (int)((ulonglong)lVar5 >> 0x20);" return (cast_expression "(int)((ulonglong)lVar5 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar5 >> 0x20)" ( (binary_expression "(ulonglong)lVar5 >> 0x20" (cast_expression "(ulonglong)lVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) ;) })) (expression_statement "uVar2 = 2 - param_3;" (assignment_expression "uVar2 = 2 - param_3" identifier = (binary_expression "2 - param_3" number_literal - identifier)) ;) (expression_statement "puVar1 = param_2 + -2;" (assignment_expression "puVar1 = param_2 + -2" identifier = (binary_expression "param_2 + -2" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -1;" (assignment_expression "puVar3 = param_1 + -1" identifier = (binary_expression "param_1 + -1" identifier + number_literal)) ;) (expression_statement "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410b1;" goto statement_identifier ;) })))
(translation_unit "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}\n\n" (function_definition "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" type_identifier (function_declarator "__gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "longlong lVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (declaration "longlong lVar8;" type_identifier identifier ;) (declaration "longlong lVar9;" type_identifier identifier ;) (declaration "ulonglong uVar10;" type_identifier identifier ;) (declaration "ulonglong uVar11;" type_identifier identifier ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (if_statement "if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" if (parenthesized_expression "(param_3 < 4)" ( (binary_expression "param_3 < 4" identifier < number_literal) )) (compound_statement "{\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" { (do_statement "do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);" do (compound_statement "{\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    }" { (expression_statement "uVar2 = *param_2;" (assignment_expression "uVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;" (assignment_expression "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" identifier = (binary_expression "uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" identifier + (binary_expression "(ulonglong)uVar2 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)))) ;) (expression_statement "*param_1 = (int)uVar11;" (assignment_expression "*param_1 = (int)uVar11" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)uVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "uVar10 = uVar11 >> 0x20;" (assignment_expression "uVar10 = uVar11 >> 0x20" identifier = (binary_expression "uVar11 >> 0x20" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 - 1;" (assignment_expression "param_3 = param_3 - 1" identifier = (binary_expression "param_3 - 1" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) ;) (return_statement "return (int)(uVar11 >> 0x20);" return (cast_expression "(int)(uVar11 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar11 >> 0x20)" ( (binary_expression "uVar11 >> 0x20" identifier >> number_literal) ))) ;) })) (expression_statement "uVar2 = param_3 & 3;" (assignment_expression "uVar2 = param_3 & 3" identifier = (binary_expression "param_3 & 3" identifier & number_literal)) ;) (if_statement "if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" { (expression_statement "uVar2 = -param_3;" (assignment_expression "uVar2 = -param_3" identifier = (unary_expression "-param_3" - identifier)) ;) (expression_statement "puVar1 = param_2 + -4;" (assignment_expression "puVar1 = param_2 + -4" identifier = (binary_expression "param_2 + -4" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -3;" (assignment_expression "puVar3 = param_1 + -3" identifier = (binary_expression "param_1 + -3" identifier + number_literal)) ;) (expression_statement "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410d5;" goto statement_identifier ;) })) (if_statement "if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" if (parenthesized_expression "(uVar2 < 2)" ( (binary_expression "uVar2 < 2" identifier < number_literal) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) (expression_statement "puVar1 = param_2 + -3;" (assignment_expression "puVar1 = param_2 + -3" identifier = (binary_expression "param_2 + -3" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -2;" (assignment_expression "puVar3 = param_1 + -2" identifier = (binary_expression "param_1 + -2" identifier + number_literal)) ;) (expression_statement "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410c3;" goto statement_identifier ;) })) (if_statement "if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" if (parenthesized_expression "(uVar2 != 2)" ( (binary_expression "uVar2 != 2" identifier != number_literal) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) (expression_statement "puVar1 = param_2 + -1;" (assignment_expression "puVar1 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (do_statement "do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);" do (compound_statement "{\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    }" { (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" identifier = identifier) ;) (expression_statement "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = puVar1[4];" (assignment_expression "uVar6 = puVar1[4]" identifier = (subscript_expression "puVar1[4]" identifier [ number_literal ])) ;) (expression_statement "*puVar3 = (int)(uVar10 + lVar5);" (assignment_expression "*puVar3 = (int)(uVar10 + lVar5)" (pointer_expression "*puVar3" * identifier) = (cast_expression "(int)(uVar10 + lVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar5)" ( (binary_expression "uVar10 + lVar5" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar5 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar5 >> 0x20" identifier = (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[5];" (assignment_expression "uVar6 = puVar1[5]" identifier = (subscript_expression "puVar1[5]" identifier [ number_literal ])) ;) (expression_statement "puVar3[1] = (int)(uVar10 + lVar7);" (assignment_expression "puVar3[1] = (int)(uVar10 + lVar7)" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar7)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar7)" ( (binary_expression "uVar10 + lVar7" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar7 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar7 >> 0x20" identifier = (binary_expression "uVar10 + lVar7 >> 0x20" (binary_expression "uVar10 + lVar7" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[6];" (assignment_expression "uVar6 = puVar1[6]" identifier = (subscript_expression "puVar1[6]" identifier [ number_literal ])) ;) (expression_statement "puVar3[2] = (int)(uVar10 + lVar8);" (assignment_expression "puVar3[2] = (int)(uVar10 + lVar8)" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar8)" ( (binary_expression "uVar10 + lVar8" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar8 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar8 >> 0x20" identifier = (binary_expression "uVar10 + lVar8 >> 0x20" (binary_expression "uVar10 + lVar8" identifier + identifier) >> number_literal)) ;) (labeled_statement "LAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" statement_identifier : (expression_statement "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;)) (expression_statement "uVar6 = puVar1[7];" (assignment_expression "uVar6 = puVar1[7]" identifier = (subscript_expression "puVar1[7]" identifier [ number_literal ])) ;) (expression_statement "puVar3[3] = (int)(uVar10 + lVar9);" (assignment_expression "puVar3[3] = (int)(uVar10 + lVar9)" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar9)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar9)" ( (binary_expression "uVar10 + lVar9" identifier + identifier) )))) ;) (expression_statement "uVar10 = uVar10 + lVar9 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar9 >> 0x20" identifier = (binary_expression "uVar10 + lVar9 >> 0x20" (binary_expression "uVar10 + lVar9" identifier + identifier) >> number_literal)) ;) (expression_statement "puVar1 = puVar1 + 4;" (assignment_expression "puVar1 = puVar1 + 4" identifier = (binary_expression "puVar1 + 4" identifier + number_literal)) ;) (expression_statement "bVar4 = uVar2 < 0xfffffffc;" (assignment_expression "bVar4 = uVar2 < 0xfffffffc" identifier = (binary_expression "uVar2 < 0xfffffffc" identifier < number_literal)) ;) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" identifier = (binary_expression "uVar2 + 4" identifier + number_literal)) ;) (expression_statement "param_1 = puVar3 + 4;" (assignment_expression "param_1 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar4 && uVar2 != 0)" ( (binary_expression "bVar4 && uVar2 != 0" identifier && (binary_expression "uVar2 != 0" identifier != number_literal)) )) ;) (expression_statement "puVar3[4] = (int)(uVar10 + lVar5);" (assignment_expression "puVar3[4] = (int)(uVar10 + lVar5)" (subscript_expression "puVar3[4]" identifier [ number_literal ]) = (cast_expression "(int)(uVar10 + lVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar10 + lVar5)" ( (binary_expression "uVar10 + lVar5" identifier + identifier) )))) ;) (expression_statement "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;" (assignment_expression "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7" identifier = (binary_expression "(uVar10 + lVar5 >> 0x20) + lVar7" (parenthesized_expression "(uVar10 + lVar5 >> 0x20)" ( (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" identifier + identifier) >> number_literal) )) + identifier)) ;) (expression_statement "puVar3[5] = (int)uVar10;" (assignment_expression "puVar3[5] = (int)uVar10" (subscript_expression "puVar3[5]" identifier [ number_literal ]) = (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" identifier = (binary_expression "(uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" (parenthesized_expression "(uVar10 >> 0x20)" ( (binary_expression "uVar10 >> 0x20" identifier >> number_literal) )) + (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)))) ;) (expression_statement "puVar3[6] = (int)lVar5;" (assignment_expression "puVar3[6] = (int)lVar5" (subscript_expression "puVar3[6]" identifier [ number_literal ]) = (cast_expression "(int)lVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return (int)((ulonglong)lVar5 >> 0x20);" return (cast_expression "(int)((ulonglong)lVar5 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar5 >> 0x20)" ( (binary_expression "(ulonglong)lVar5 >> 0x20" (cast_expression "(ulonglong)lVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) ;) })) (expression_statement "uVar2 = 2 - param_3;" (assignment_expression "uVar2 = 2 - param_3" identifier = (binary_expression "2 - param_3" number_literal - identifier)) ;) (expression_statement "puVar1 = param_2 + -2;" (assignment_expression "puVar1 = param_2 + -2" identifier = (binary_expression "param_2 + -2" identifier + number_literal)) ;) (expression_statement "puVar3 = param_1 + -1;" (assignment_expression "puVar3 = param_1 + -1" identifier = (binary_expression "param_1 + -1" identifier + number_literal)) ;) (expression_statement "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_000410b1;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_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 IDENT != LIT) )) ;) (return_statement return (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_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 IDENT && (binary_expression IDENT != LIT)) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) >> LIT) )) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (return_statement return (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })))
(function_definition "undefined4 __gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" (type_identifier "undefined4") (function_declarator "__gmpn_mul_1_pentium4_sse2(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" (identifier "__gmpn_mul_1_pentium4_sse2") (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  bool bVar4;\n  longlong lVar5;\n  uint uVar6;\n  longlong lVar7;\n  longlong lVar8;\n  longlong lVar9;\n  ulonglong uVar10;\n  ulonglong uVar11;\n  \n  uVar10 = 0;\n  if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }\n  uVar2 = param_3 & 3;\n  if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }\n  if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }\n  if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }\n  uVar2 = 2 - param_3;\n  puVar1 = param_2 + -2;\n  puVar3 = param_1 + -1;\n  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;\n  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;\n  uVar6 = param_2[2];\n  goto LAB_000410b1;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "longlong lVar5;" (type_identifier "longlong") (identifier "lVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "longlong lVar7;" (type_identifier "longlong") (identifier "lVar7") (; ";")) (declaration "longlong lVar8;" (type_identifier "longlong") (identifier "lVar8") (; ";")) (declaration "longlong lVar9;" (type_identifier "longlong") (identifier "lVar9") (; ";")) (declaration "ulonglong uVar10;" (type_identifier "ulonglong") (identifier "uVar10") (; ";")) (declaration "ulonglong uVar11;" (type_identifier "ulonglong") (identifier "uVar11") (; ";")) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_3 < 4) {\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" (if "if") (parenthesized_expression "(param_3 < 4)" (( "(") (binary_expression "param_3 < 4" (identifier "param_3") (< "<") (number_literal "4")) () ")")) (compound_statement "{\n    do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);\n    return (int)(uVar11 >> 0x20);\n  }" ({ "{") (do_statement "do {\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    } while (param_3 != 0);" (do "do") (compound_statement "{\n      uVar2 = *param_2;\n      param_2 = param_2 + 1;\n      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;\n      *param_1 = (int)uVar11;\n      uVar10 = uVar11 >> 0x20;\n      param_3 = param_3 - 1;\n      param_1 = param_1 + 1;\n    }" ({ "{") (expression_statement "uVar2 = *param_2;" (assignment_expression "uVar2 = *param_2" (identifier "uVar2") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" (identifier "param_2") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;" (assignment_expression "uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" (identifier "uVar11") (= "=") (binary_expression "uVar10 + (ulonglong)uVar2 * (ulonglong)param_4" (identifier "uVar10") (+ "+") (binary_expression "(ulonglong)uVar2 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar2")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4"))))) (; ";")) (expression_statement "*param_1 = (int)uVar11;" (assignment_expression "*param_1 = (int)uVar11" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(int)uVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar11"))) (; ";")) (expression_statement "uVar10 = uVar11 >> 0x20;" (assignment_expression "uVar10 = uVar11 >> 0x20" (identifier "uVar10") (= "=") (binary_expression "uVar11 >> 0x20" (identifier "uVar11") (>> ">>") (number_literal "0x20"))) (; ";")) (expression_statement "param_3 = param_3 - 1;" (assignment_expression "param_3 = param_3 - 1" (identifier "param_3") (= "=") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1"))) (; ";")) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (; ";")) (return_statement "return (int)(uVar11 >> 0x20);" (return "return") (cast_expression "(int)(uVar11 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar11 >> 0x20)" (( "(") (binary_expression "uVar11 >> 0x20" (identifier "uVar11") (>> ">>") (number_literal "0x20")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = param_3 & 3;" (assignment_expression "uVar2 = param_3 & 3" (identifier "uVar2") (= "=") (binary_expression "param_3 & 3" (identifier "param_3") (& "&") (number_literal "3"))) (; ";")) (if_statement "if (uVar2 == 0) {\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar2 = -param_3;\n    puVar1 = param_2 + -4;\n    puVar3 = param_1 + -3;\n    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410d5;\n  }" ({ "{") (expression_statement "uVar2 = -param_3;" (assignment_expression "uVar2 = -param_3" (identifier "uVar2") (= "=") (unary_expression "-param_3" (- "-") (identifier "param_3"))) (; ";")) (expression_statement "puVar1 = param_2 + -4;" (assignment_expression "puVar1 = param_2 + -4" (identifier "puVar1") (= "=") (binary_expression "param_2 + -4" (identifier "param_2") (+ "+") (number_literal "-4"))) (; ";")) (expression_statement "puVar3 = param_1 + -3;" (assignment_expression "puVar3 = param_1 + -3" (identifier "puVar3") (= "=") (binary_expression "param_1 + -3" (identifier "param_1") (+ "+") (number_literal "-3"))) (; ";")) (expression_statement "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)*param_2 * (ulonglong)param_4" (identifier "lVar9") (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4" (identifier "lVar5") (= "=") (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" (identifier "uVar6") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (goto_statement "goto LAB_000410d5;" (goto "goto") (statement_identifier "LAB_000410d5") (; ";")) (} "}"))) (if_statement "if (uVar2 < 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" (if "if") (parenthesized_expression "(uVar2 < 2)" (( "(") (binary_expression "uVar2 < 2" (identifier "uVar2") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -3;\n    puVar3 = param_1 + -2;\n    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    goto LAB_000410c3;\n  }" ({ "{") (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" (identifier "uVar2") (= "=") (binary_expression "uVar2 - param_3" (identifier "uVar2") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "puVar1 = param_2 + -3;" (assignment_expression "puVar1 = param_2 + -3" (identifier "puVar1") (= "=") (binary_expression "param_2 + -3" (identifier "param_2") (+ "+") (number_literal "-3"))) (; ";")) (expression_statement "puVar3 = param_1 + -2;" (assignment_expression "puVar3 = param_1 + -2" (identifier "puVar3") (= "=") (binary_expression "param_1 + -2" (identifier "param_1") (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)*param_2 * (ulonglong)param_4" (identifier "lVar8") (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4" (identifier "lVar9") (= "=") (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" (identifier "uVar6") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (goto_statement "goto LAB_000410c3;" (goto "goto") (statement_identifier "LAB_000410c3") (; ";")) (} "}"))) (if_statement "if (uVar2 != 2) {\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" (if "if") (parenthesized_expression "(uVar2 != 2)" (( "(") (binary_expression "uVar2 != 2" (identifier "uVar2") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n    puVar1 = param_2 + -1;\n    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;\n    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;\n    uVar6 = param_2[2];\n    do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);\n    puVar3[4] = (int)(uVar10 + lVar5);\n    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;\n    puVar3[5] = (int)uVar10;\n    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;\n    puVar3[6] = (int)lVar5;\n    return (int)((ulonglong)lVar5 >> 0x20);\n  }" ({ "{") (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" (identifier "uVar2") (= "=") (binary_expression "uVar2 - param_3" (identifier "uVar2") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "puVar1 = param_2 + -1;" (assignment_expression "puVar1 = param_2 + -1" (identifier "puVar1") (= "=") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)*param_2 * (ulonglong)param_4" (identifier "lVar5") (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4" (identifier "lVar7") (= "=") (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" (identifier "uVar6") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (do_statement "do {\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    } while (bVar4 && uVar2 != 0);" (do "do") (compound_statement "{\n      puVar3 = param_1;\n      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[4];\n      *puVar3 = (int)(uVar10 + lVar5);\n      uVar10 = uVar10 + lVar5 >> 0x20;\nLAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[5];\n      puVar3[1] = (int)(uVar10 + lVar7);\n      uVar10 = uVar10 + lVar7 >> 0x20;\nLAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[6];\n      puVar3[2] = (int)(uVar10 + lVar8);\n      uVar10 = uVar10 + lVar8 >> 0x20;\nLAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;\n      uVar6 = puVar1[7];\n      puVar3[3] = (int)(uVar10 + lVar9);\n      uVar10 = uVar10 + lVar9 >> 0x20;\n      puVar1 = puVar1 + 4;\n      bVar4 = uVar2 < 0xfffffffc;\n      uVar2 = uVar2 + 4;\n      param_1 = puVar3 + 4;\n    }" ({ "{") (expression_statement "puVar3 = param_1;" (assignment_expression "puVar3 = param_1" (identifier "puVar3") (= "=") (identifier "param_1")) (; ";")) (expression_statement "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)uVar6 * (ulonglong)param_4" (identifier "lVar8") (= "=") (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "uVar6 = puVar1[4];" (assignment_expression "uVar6 = puVar1[4]" (identifier "uVar6") (= "=") (subscript_expression "puVar1[4]" (identifier "puVar1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "*puVar3 = (int)(uVar10 + lVar5);" (assignment_expression "*puVar3 = (int)(uVar10 + lVar5)" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (cast_expression "(int)(uVar10 + lVar5)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar10 + lVar5)" (( "(") (binary_expression "uVar10 + lVar5" (identifier "uVar10") (+ "+") (identifier "lVar5")) () ")")))) (; ";")) (expression_statement "uVar10 = uVar10 + lVar5 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar5 >> 0x20" (identifier "uVar10") (= "=") (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" (identifier "uVar10") (+ "+") (identifier "lVar5")) (>> ">>") (number_literal "0x20"))) (; ";")) (labeled_statement "LAB_000410b1:\n      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" (statement_identifier "LAB_000410b1") (: ":") (expression_statement "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar9 = (ulonglong)uVar6 * (ulonglong)param_4" (identifier "lVar9") (= "=") (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";"))) (expression_statement "uVar6 = puVar1[5];" (assignment_expression "uVar6 = puVar1[5]" (identifier "uVar6") (= "=") (subscript_expression "puVar1[5]" (identifier "puVar1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "puVar3[1] = (int)(uVar10 + lVar7);" (assignment_expression "puVar3[1] = (int)(uVar10 + lVar7)" (subscript_expression "puVar3[1]" (identifier "puVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(int)(uVar10 + lVar7)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar10 + lVar7)" (( "(") (binary_expression "uVar10 + lVar7" (identifier "uVar10") (+ "+") (identifier "lVar7")) () ")")))) (; ";")) (expression_statement "uVar10 = uVar10 + lVar7 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar7 >> 0x20" (identifier "uVar10") (= "=") (binary_expression "uVar10 + lVar7 >> 0x20" (binary_expression "uVar10 + lVar7" (identifier "uVar10") (+ "+") (identifier "lVar7")) (>> ">>") (number_literal "0x20"))) (; ";")) (labeled_statement "LAB_000410c3:\n      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" (statement_identifier "LAB_000410c3") (: ":") (expression_statement "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (ulonglong)uVar6 * (ulonglong)param_4" (identifier "lVar5") (= "=") (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";"))) (expression_statement "uVar6 = puVar1[6];" (assignment_expression "uVar6 = puVar1[6]" (identifier "uVar6") (= "=") (subscript_expression "puVar1[6]" (identifier "puVar1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "puVar3[2] = (int)(uVar10 + lVar8);" (assignment_expression "puVar3[2] = (int)(uVar10 + lVar8)" (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(uVar10 + lVar8)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar10 + lVar8)" (( "(") (binary_expression "uVar10 + lVar8" (identifier "uVar10") (+ "+") (identifier "lVar8")) () ")")))) (; ";")) (expression_statement "uVar10 = uVar10 + lVar8 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar8 >> 0x20" (identifier "uVar10") (= "=") (binary_expression "uVar10 + lVar8 >> 0x20" (binary_expression "uVar10 + lVar8" (identifier "uVar10") (+ "+") (identifier "lVar8")) (>> ">>") (number_literal "0x20"))) (; ";")) (labeled_statement "LAB_000410d5:\n      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" (statement_identifier "LAB_000410d5") (: ":") (expression_statement "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)uVar6 * (ulonglong)param_4" (identifier "lVar7") (= "=") (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";"))) (expression_statement "uVar6 = puVar1[7];" (assignment_expression "uVar6 = puVar1[7]" (identifier "uVar6") (= "=") (subscript_expression "puVar1[7]" (identifier "puVar1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "puVar3[3] = (int)(uVar10 + lVar9);" (assignment_expression "puVar3[3] = (int)(uVar10 + lVar9)" (subscript_expression "puVar3[3]" (identifier "puVar3") ([ "[") (number_literal "3") (] "]")) (= "=") (cast_expression "(int)(uVar10 + lVar9)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar10 + lVar9)" (( "(") (binary_expression "uVar10 + lVar9" (identifier "uVar10") (+ "+") (identifier "lVar9")) () ")")))) (; ";")) (expression_statement "uVar10 = uVar10 + lVar9 >> 0x20;" (assignment_expression "uVar10 = uVar10 + lVar9 >> 0x20" (identifier "uVar10") (= "=") (binary_expression "uVar10 + lVar9 >> 0x20" (binary_expression "uVar10 + lVar9" (identifier "uVar10") (+ "+") (identifier "lVar9")) (>> ">>") (number_literal "0x20"))) (; ";")) (expression_statement "puVar1 = puVar1 + 4;" (assignment_expression "puVar1 = puVar1 + 4" (identifier "puVar1") (= "=") (binary_expression "puVar1 + 4" (identifier "puVar1") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "bVar4 = uVar2 < 0xfffffffc;" (assignment_expression "bVar4 = uVar2 < 0xfffffffc" (identifier "bVar4") (= "=") (binary_expression "uVar2 < 0xfffffffc" (identifier "uVar2") (< "<") (number_literal "0xfffffffc"))) (; ";")) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 4" (identifier "uVar2") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "param_1 = puVar3 + 4;" (assignment_expression "param_1 = puVar3 + 4" (identifier "param_1") (= "=") (binary_expression "puVar3 + 4" (identifier "puVar3") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar4 && uVar2 != 0)" (( "(") (binary_expression "bVar4 && uVar2 != 0" (identifier "bVar4") (&& "&&") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0"))) () ")")) (; ";")) (expression_statement "puVar3[4] = (int)(uVar10 + lVar5);" (assignment_expression "puVar3[4] = (int)(uVar10 + lVar5)" (subscript_expression "puVar3[4]" (identifier "puVar3") ([ "[") (number_literal "4") (] "]")) (= "=") (cast_expression "(int)(uVar10 + lVar5)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar10 + lVar5)" (( "(") (binary_expression "uVar10 + lVar5" (identifier "uVar10") (+ "+") (identifier "lVar5")) () ")")))) (; ";")) (expression_statement "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;" (assignment_expression "uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7" (identifier "uVar10") (= "=") (binary_expression "(uVar10 + lVar5 >> 0x20) + lVar7" (parenthesized_expression "(uVar10 + lVar5 >> 0x20)" (( "(") (binary_expression "uVar10 + lVar5 >> 0x20" (binary_expression "uVar10 + lVar5" (identifier "uVar10") (+ "+") (identifier "lVar5")) (>> ">>") (number_literal "0x20")) () ")")) (+ "+") (identifier "lVar7"))) (; ";")) (expression_statement "puVar3[5] = (int)uVar10;" (assignment_expression "puVar3[5] = (int)uVar10" (subscript_expression "puVar3[5]" (identifier "puVar3") ([ "[") (number_literal "5") (] "]")) (= "=") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) (; ";")) (expression_statement "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;" (assignment_expression "lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" (identifier "lVar5") (= "=") (binary_expression "(uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4" (parenthesized_expression "(uVar10 >> 0x20)" (( "(") (binary_expression "uVar10 >> 0x20" (identifier "uVar10") (>> ">>") (number_literal "0x20")) () ")")) (+ "+") (binary_expression "(ulonglong)uVar6 * (ulonglong)param_4" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4"))))) (; ";")) (expression_statement "puVar3[6] = (int)lVar5;" (assignment_expression "puVar3[6] = (int)lVar5" (subscript_expression "puVar3[6]" (identifier "puVar3") ([ "[") (number_literal "6") (] "]")) (= "=") (cast_expression "(int)lVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar5"))) (; ";")) (return_statement "return (int)((ulonglong)lVar5 >> 0x20);" (return "return") (cast_expression "(int)((ulonglong)lVar5 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar5 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar5 >> 0x20" (cast_expression "(ulonglong)lVar5" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar5")) (>> ">>") (number_literal "0x20")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = 2 - param_3;" (assignment_expression "uVar2 = 2 - param_3" (identifier "uVar2") (= "=") (binary_expression "2 - param_3" (number_literal "2") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "puVar1 = param_2 + -2;" (assignment_expression "puVar1 = param_2 + -2" (identifier "puVar1") (= "=") (binary_expression "param_2 + -2" (identifier "param_2") (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "puVar3 = param_1 + -1;" (assignment_expression "puVar3 = param_1 + -1" (identifier "puVar3") (= "=") (binary_expression "param_1 + -1" (identifier "param_1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;" (assignment_expression "lVar7 = (ulonglong)*param_2 * (ulonglong)param_4" (identifier "lVar7") (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)param_4" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;" (assignment_expression "lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4" (identifier "lVar8") (= "=") (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_4" (cast_expression "(ulonglong)param_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (expression_statement "uVar6 = param_2[2];" (assignment_expression "uVar6 = param_2[2]" (identifier "uVar6") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (goto_statement "goto LAB_000410b1;" (goto "goto") (statement_identifier "LAB_000410b1") (; ";")) (} "}")))

type_1 function_1(type_1 *var_5,type_2 *var_2,type_2 var_1,type_2 param_4)

{
  type_2 *var_11;
  type_2 var_6;
  type_1 *var_12;
  bool var_13;
  type_3 var_7;
  type_2 uVar6;
  type_3 var_8;
  type_3 var_9;
  type_3 var_10;
  type_4 var_3;
  type_4 var_4;
  
  var_3 = 0;
  if (var_1 < 4) {
    do {
      var_6 = *var_2;
      var_2 = var_2 + 1;
      var_4 = var_3 + (type_4)var_6 * (type_4)param_4;
      *var_5 = (int)var_4;
      var_3 = var_4 >> 0x20;
      var_1 = var_1 - 1;
      var_5 = var_5 + 1;
    } while (var_1 != 0);
    return (int)(var_4 >> 0x20);
  }
  var_6 = var_1 & 3;
  if (var_6 == 0) {
    var_6 = -var_1;
    var_11 = var_2 + -4;
    var_12 = var_5 + -3;
    var_10 = (type_4)*var_2 * (type_4)param_4;
    var_7 = (type_4)var_2[1] * (type_4)param_4;
    uVar6 = var_2[2];
    goto LAB_000410d5;
  }
  if (var_6 < 2) {
    var_6 = var_6 - var_1;
    var_11 = var_2 + -3;
    var_12 = var_5 + -2;
    var_9 = (type_4)*var_2 * (type_4)param_4;
    var_10 = (type_4)var_2[1] * (type_4)param_4;
    uVar6 = var_2[2];
    goto LAB_000410c3;
  }
  if (var_6 != 2) {
    var_6 = var_6 - var_1;
    var_11 = var_2 + -1;
    var_7 = (type_4)*var_2 * (type_4)param_4;
    var_8 = (type_4)var_2[1] * (type_4)param_4;
    uVar6 = var_2[2];
    do {
      var_12 = var_5;
      var_9 = (type_4)uVar6 * (type_4)param_4;
      uVar6 = var_11[4];
      *var_12 = (int)(var_3 + var_7);
      var_3 = var_3 + var_7 >> 0x20;
LAB_000410b1:
      var_10 = (type_4)uVar6 * (type_4)param_4;
      uVar6 = var_11[5];
      var_12[1] = (int)(var_3 + var_8);
      var_3 = var_3 + var_8 >> 0x20;
LAB_000410c3:
      var_7 = (type_4)uVar6 * (type_4)param_4;
      uVar6 = var_11[6];
      var_12[2] = (int)(var_3 + var_9);
      var_3 = var_3 + var_9 >> 0x20;
LAB_000410d5:
      var_8 = (type_4)uVar6 * (type_4)param_4;
      uVar6 = var_11[7];
      var_12[3] = (int)(var_3 + var_10);
      var_3 = var_3 + var_10 >> 0x20;
      var_11 = var_11 + 4;
      var_13 = var_6 < 0xfffffffc;
      var_6 = var_6 + 4;
      var_5 = var_12 + 4;
    } while (var_13 && var_6 != 0);
    var_12[4] = (int)(var_3 + var_7);
    var_3 = (var_3 + var_7 >> 0x20) + var_8;
    var_12[5] = (int)var_3;
    var_7 = (var_3 >> 0x20) + (type_4)uVar6 * (type_4)param_4;
    var_12[6] = (int)var_7;
    return (int)((type_4)var_7 >> 0x20);
  }
  var_6 = 2 - var_1;
  var_11 = var_2 + -2;
  var_12 = var_5 + -1;
  var_8 = (type_4)*var_2 * (type_4)param_4;
  var_9 = (type_4)var_2[1] * (type_4)param_4;
  uVar6 = var_2[2];
  goto LAB_000410b1;
}


(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: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) 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)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (return_statement (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (identifier)))) (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (goto_statement label: (statement_identifier)))) (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: (identifier) right: (identifier)))) (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (goto_statement label: (statement_identifier)))) (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: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (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)))) (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: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (return_statement (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))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (identifier)))) (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (goto_statement label: (statement_identifier)))))

undefined4 MASKED(undefined4 *param_1,uint *param_2,uint param_3,uint param_4)

{
  uint *puVar1;
  uint uVar2;
  undefined4 *puVar3;
  bool bVar4;
  longlong lVar5;
  uint uVar6;
  longlong lVar7;
  longlong lVar8;
  longlong lVar9;
  ulonglong uVar10;
  ulonglong uVar11;
  
  uVar10 = 0;
  if (param_3 < 4) {
    do {
      uVar2 = *param_2;
      param_2 = param_2 + 1;
      uVar11 = uVar10 + (ulonglong)uVar2 * (ulonglong)param_4;
      *param_1 = (int)uVar11;
      uVar10 = uVar11 >> 0x20;
      param_3 = param_3 - 1;
      param_1 = param_1 + 1;
    } while (param_3 != 0);
    return (int)(uVar11 >> 0x20);
  }
  uVar2 = param_3 & 3;
  if (uVar2 == 0) {
    uVar2 = -param_3;
    puVar1 = param_2 + -4;
    puVar3 = param_1 + -3;
    lVar9 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar5 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    goto LAB_000410d5;
  }
  if (uVar2 < 2) {
    uVar2 = uVar2 - param_3;
    puVar1 = param_2 + -3;
    puVar3 = param_1 + -2;
    lVar8 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar9 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    goto LAB_000410c3;
  }
  if (uVar2 != 2) {
    uVar2 = uVar2 - param_3;
    puVar1 = param_2 + -1;
    lVar5 = (ulonglong)*param_2 * (ulonglong)param_4;
    lVar7 = (ulonglong)param_2[1] * (ulonglong)param_4;
    uVar6 = param_2[2];
    do {
      puVar3 = param_1;
      lVar8 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[4];
      *puVar3 = (int)(uVar10 + lVar5);
      uVar10 = uVar10 + lVar5 >> 0x20;
LAB_000410b1:
      lVar9 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[5];
      puVar3[1] = (int)(uVar10 + lVar7);
      uVar10 = uVar10 + lVar7 >> 0x20;
LAB_000410c3:
      lVar5 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[6];
      puVar3[2] = (int)(uVar10 + lVar8);
      uVar10 = uVar10 + lVar8 >> 0x20;
LAB_000410d5:
      lVar7 = (ulonglong)uVar6 * (ulonglong)param_4;
      uVar6 = puVar1[7];
      puVar3[3] = (int)(uVar10 + lVar9);
      uVar10 = uVar10 + lVar9 >> 0x20;
      puVar1 = puVar1 + 4;
      bVar4 = uVar2 < 0xfffffffc;
      uVar2 = uVar2 + 4;
      param_1 = puVar3 + 4;
    } while (bVar4 && uVar2 != 0);
    puVar3[4] = (int)(uVar10 + lVar5);
    uVar10 = (uVar10 + lVar5 >> 0x20) + lVar7;
    puVar3[5] = (int)uVar10;
    lVar5 = (uVar10 >> 0x20) + (ulonglong)uVar6 * (ulonglong)param_4;
    puVar3[6] = (int)lVar5;
    return (int)((ulonglong)lVar5 >> 0x20);
  }
  uVar2 = 2 - param_3;
  puVar1 = param_2 + -2;
  puVar3 = param_1 + -1;
  lVar7 = (ulonglong)*param_2 * (ulonglong)param_4;
  lVar8 = (ulonglong)param_2[1] * (ulonglong)param_4;
  uVar6 = param_2[2];
  goto LAB_000410b1;
}

