
void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)

{
  uint *puVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint *puVar14;
  bool bVar15;
  
  if (param_3 == 2) {
    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;
    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);
    *(int *)param_1 = (int)lVar2;
    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];
    uVar6 = (uint)lVar2;
    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);
    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);
    uVar12 = uVar10 + uVar3;
    uVar10 = (uint)CARRY4(uVar10,uVar3);
    uVar4 = uVar6 + uVar9;
    uVar13 = uVar4 + uVar10;
    uVar11 = (uint)CARRY4(uVar3,uVar12);
    uVar5 = uVar9 + uVar13;
    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;
    *(uint *)(param_1 + 1) = uVar5 + uVar11;
    *(uint *)((int)param_1 + 0xc) =
         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +
         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));
    return;
  }
  if (param_3 < 3) {
    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;
    return;
  }
  puVar14 = (uint *)((int)param_1 + param_3 * 4);
  uVar10 = *param_2;
  uVar11 = 0;
  iVar7 = 1 - param_3;
  do {
    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;
    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
    puVar14[iVar7] = (uint)lVar2;
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  *puVar14 = uVar11;
  if (param_3 - 3 != 0) {
    iVar7 = -(param_3 - 3);
    do {
      puVar14 = puVar14 + 1;
      uVar10 = param_2[param_3 + iVar7 + -2];
      iVar8 = iVar7 + -1;
      uVar11 = 0;
      do {
        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;
        uVar4 = (uint)lVar2;
        puVar1 = puVar14 + iVar8;
        uVar11 = *puVar1;
        *puVar1 = *puVar1 + uVar4;
        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);
        bVar15 = SCARRY4(iVar8,1);
        iVar8 = iVar8 + 1;
      } while (bVar15 != iVar8 < 0);
      *puVar14 = uVar11;
      iVar7 = iVar7 + 1;
    } while (iVar7 != 0);
  }
  uVar11 = param_2[param_3 - 1];
  uVar4 = param_2[param_3 - 2];
  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);
  uVar10 = *puVar14;
  *puVar14 = *puVar14 + uVar5;
  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);
  bVar15 = 0xfffffffe < -param_3;
  iVar7 = -param_3 + 1;
  do {
    puVar1 = puVar14 + iVar7 * 2 + 2;
    uVar10 = *puVar1;
    *puVar1 = *puVar1 << 1 | (uint)bVar15;
    puVar1 = puVar14 + iVar7 * 2 + 3;
    bVar15 = (int)*puVar1 < 0;
    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  puVar14[2] = (uint)bVar15;
  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;
  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);
  puVar14[param_3 * -2 + 3] = (uint)lVar2;
  iVar7 = 1 - param_3;
  do {
    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];
    uVar6 = (uint)lVar2;
    puVar1 = puVar14 + iVar7 * 2 + 2;
    uVar11 = *puVar1;
    *puVar1 = *puVar1 + uVar10;
    puVar1 = puVar14 + iVar7 * 2 + 3;
    uVar4 = *puVar1;
    uVar5 = *puVar1 + uVar6;
    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);
    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +
             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  puVar14[2] = puVar14[2] + uVar10;
  return;
}



void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)

{
  uint *puVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint *puVar14;
  bool bVar15;
  
  if (param_3 == 2) {
    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;
    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);
    *(int *)param_1 = (int)lVar2;
    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];
    uVar6 = (uint)lVar2;
    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);
    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);
    uVar12 = uVar10 + uVar3;
    uVar10 = (uint)CARRY4(uVar10,uVar3);
    uVar4 = uVar6 + uVar9;
    uVar13 = uVar4 + uVar10;
    uVar11 = (uint)CARRY4(uVar3,uVar12);
    uVar5 = uVar9 + uVar13;
    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;
    *(uint *)(param_1 + 1) = uVar5 + uVar11;
    *(uint *)((int)param_1 + 0xc) =
         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +
         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));
    return;
  }
  if (param_3 < 3) {
    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;
    return;
  }
  puVar14 = (uint *)((int)param_1 + param_3 * 4);
  uVar10 = *param_2;
  uVar11 = 0;
  iVar7 = 1 - param_3;
  do {
    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;
    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
    puVar14[iVar7] = (uint)lVar2;
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  *puVar14 = uVar11;
  if (param_3 - 3 != 0) {
    iVar7 = -(param_3 - 3);
    do {
      puVar14 = puVar14 + 1;
      uVar10 = param_2[param_3 + iVar7 + -2];
      iVar8 = iVar7 + -1;
      uVar11 = 0;
      do {
        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;
        uVar4 = (uint)lVar2;
        puVar1 = puVar14 + iVar8;
        uVar11 = *puVar1;
        *puVar1 = *puVar1 + uVar4;
        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);
        bVar15 = SCARRY4(iVar8,1);
        iVar8 = iVar8 + 1;
      } while (bVar15 != iVar8 < 0);
      *puVar14 = uVar11;
      iVar7 = iVar7 + 1;
    } while (iVar7 != 0);
  }
  uVar11 = param_2[param_3 - 1];
  uVar4 = param_2[param_3 - 2];
  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);
  uVar10 = *puVar14;
  *puVar14 = *puVar14 + uVar5;
  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);
  bVar15 = 0xfffffffe < -param_3;
  iVar7 = -param_3 + 1;
  do {
    puVar1 = puVar14 + iVar7 * 2 + 2;
    uVar10 = *puVar1;
    *puVar1 = *puVar1 << 1 | (uint)bVar15;
    puVar1 = puVar14 + iVar7 * 2 + 3;
    bVar15 = (int)*puVar1 < 0;
    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  puVar14[2] = (uint)bVar15;
  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;
  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);
  puVar14[param_3 * -2 + 3] = (uint)lVar2;
  iVar7 = 1 - param_3;
  do {
    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];
    uVar6 = (uint)lVar2;
    puVar1 = puVar14 + iVar7 * 2 + 2;
    uVar11 = *puVar1;
    *puVar1 = *puVar1 + uVar10;
    puVar1 = puVar14 + iVar7 * 2 + 3;
    uVar4 = *puVar1;
    uVar5 = *puVar1 + uVar6;
    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);
    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +
             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  puVar14[2] = puVar14[2] + uVar10;
  return;
}


MOV EDX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESP + 0x8]
CMP EDX,0x2
MOV ECX,dword ptr [ESP + 0x4]
JZ 0x00036ff8
JA 0x00037030
MOV EAX,dword ptr [EAX]
MUL EAX
MOV dword ptr [ECX],EAX
MOV dword ptr [ECX + 0x4],EDX
RET
PUSH EBX
PUSH EBP
MOV EBX,EAX
MOV EAX,dword ptr [EAX]
MUL EAX
PUSH ESI
PUSH EDI
MOV ESI,EDX
MOV dword ptr [ECX],EAX
MOV EAX,dword ptr [EBX + 0x4]
MUL EAX
MOV EDI,EAX
MOV EBP,EDX
MOV EAX,dword ptr [EBX]
MUL dword ptr [EBX + 0x4]
ADD ESI,EAX
ADC EDI,EDX
ADC EBP,0x0
ADD EAX,ESI
ADC EDX,EDI
MOV dword ptr [ECX + 0x4],EAX
ADC EBP,0x0
MOV dword ptr [ECX + 0x8],EDX
MOV dword ptr [ECX + 0xc],EBP
POP EDI
POP ESI
POP EBP
POP EBX
RET
PUSH EBX
PUSH EDI
PUSH ESI
PUSH EBP
LEA EDI,[ECX + EDX*0x4]
LEA ESI,[EAX + EDX*0x4]
MOV EBP,dword ptr [EAX]
MOV ECX,EDX
NEG ECX
XOR EBX,EBX
INC ECX
MOV EAX,dword ptr [ESI + ECX*0x4]
MUL EBP
ADD EBX,EAX
ADC EDX,0x0
MOV dword ptr [EDI + ECX*0x4],EBX
MOV EBX,EDX
INC ECX
JNZ 0x00037043
MOV dword ptr [EDI],EBX
MOV ECX,dword ptr [ESP + 0x1c]
SUB ECX,0x3
JZ 0x00037092
NEG ECX
MOV dword ptr [ESP + 0x14],ECX
ADD EDI,0x4
MOV EBP,dword ptr [ESI + ECX*0x4 + -0x8]
SUB ECX,0x1
XOR EBX,EBX
MOV EAX,dword ptr [ESI + ECX*0x4]
MUL EBP
ADD EAX,EBX
ADC EDX,0x0
ADD dword ptr [EDI + ECX*0x4],EAX
ADC EDX,0x0
MOV EBX,EDX
ADD ECX,0x1
JL 0x00037072
MOV dword ptr [EDI],EBX
MOV ECX,dword ptr [ESP + 0x14]
INC ECX
JNZ 0x00037062
MOV EAX,dword ptr [ESI + -0x4]
MUL dword ptr [ESI + -0x8]
ADD dword ptr [EDI],EAX
ADC EDX,0x0
MOV dword ptr [EDI + 0x4],EDX
MOV EAX,dword ptr [ESP + 0x1c]
NEG EAX
ADD EAX,0x1
RCL dword ptr [EDI + EAX*0x8 + 0x8],0x1
RCL dword ptr [EDI + EAX*0x8 + 0xc],0x1
INC EAX
JNZ 0x000370a9
ADC EAX,EAX
MOV dword ptr [EDI + 0x8],EAX
MOV ESI,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [ESI]
MUL EAX
MOV ECX,dword ptr [ESP + 0x1c]
LEA ESI,[ESI + ECX*0x4]
NEG ECX
MOV EBX,EDX
MOV dword ptr [EDI + ECX*0x8 + 0xc],EAX
INC ECX
MOV EAX,dword ptr [ESI + ECX*0x4]
MUL EAX
ADD dword ptr [EDI + ECX*0x8 + 0x8],EBX
MOV EBX,EDX
ADC dword ptr [EDI + ECX*0x8 + 0xc],EAX
ADC EBX,0x0
INC ECX
JNZ 0x000370d1
ADD dword ptr [EDI + 0x8],EBX
POP EBP
POP ESI
POP EDI
POP EBX
RET
(translation_unit "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}\n\n" (function_definition "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" primitive_type (function_declarator "__gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)" identifier (parameter_list "(longlong *param_1,uint *param_2,uint param_3)" ( (parameter_declaration "longlong *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) ))) (compound_statement "{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "bool bVar15;" primitive_type identifier ;) (if_statement "if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" if (parenthesized_expression "(param_3 == 2)" ( (binary_expression "param_3 == 2" identifier == number_literal) )) (compound_statement "{\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" { (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*(int *)param_1 = (int)lVar2;" (assignment_expression "*(int *)param_1 = (int)lVar2" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(int)lVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];" (assignment_expression "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1]" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_2[1]" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])))) ;) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);" (assignment_expression "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" identifier = (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" ( (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20" (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) >> number_literal) )))) ;) (expression_statement "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);" (assignment_expression "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" identifier = (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1])" ( (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )))) ;) (expression_statement "uVar12 = uVar10 + uVar3;" (assignment_expression "uVar12 = uVar10 + uVar3" identifier = (binary_expression "uVar10 + uVar3" identifier + identifier)) ;) (expression_statement "uVar10 = (uint)CARRY4(uVar10,uVar3);" (assignment_expression "uVar10 = (uint)CARRY4(uVar10,uVar3)" identifier = (cast_expression "(uint)CARRY4(uVar10,uVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,uVar3)" identifier (argument_list "(uVar10,uVar3)" ( identifier , identifier ))))) ;) (expression_statement "uVar4 = uVar6 + uVar9;" (assignment_expression "uVar4 = uVar6 + uVar9" identifier = (binary_expression "uVar6 + uVar9" identifier + identifier)) ;) (expression_statement "uVar13 = uVar4 + uVar10;" (assignment_expression "uVar13 = uVar4 + uVar10" identifier = (binary_expression "uVar4 + uVar10" identifier + identifier)) ;) (expression_statement "uVar11 = (uint)CARRY4(uVar3,uVar12);" (assignment_expression "uVar11 = (uint)CARRY4(uVar3,uVar12)" identifier = (cast_expression "(uint)CARRY4(uVar3,uVar12)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,uVar12)" identifier (argument_list "(uVar3,uVar12)" ( identifier , identifier ))))) ;) (expression_statement "uVar5 = uVar9 + uVar13;" (assignment_expression "uVar5 = uVar9 + uVar13" identifier = (binary_expression "uVar9 + uVar13" identifier + identifier)) ;) (expression_statement "*(uint *)((int)param_1 + 4) = uVar3 + uVar12;" (assignment_expression "*(uint *)((int)param_1 + 4) = uVar3 + uVar12" (pointer_expression "*(uint *)((int)param_1 + 4)" * (cast_expression "(uint *)((int)param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 4)" ( (binary_expression "(int)param_1 + 4" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "uVar3 + uVar12" identifier + identifier)) ;) (expression_statement "*(uint *)(param_1 + 1) = uVar5 + uVar11;" (assignment_expression "*(uint *)(param_1 + 1) = uVar5 + uVar11" (pointer_expression "*(uint *)(param_1 + 1)" * (cast_expression "(uint *)(param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar11" identifier + identifier)) ;) (expression_statement "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));" (assignment_expression "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (pointer_expression "*(uint *)((int)param_1 + 0xc)" * (cast_expression "(uint *)((int)param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xc)" ( (binary_expression "(int)param_1 + 0xc" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (call_expression "(uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" ( (binary_expression "CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)" (call_expression "CARRY4(uVar6,uVar9)" identifier (argument_list "(uVar6,uVar9)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar4,uVar10)" identifier (argument_list "(uVar4,uVar10)" ( identifier , identifier )))) )))) + (call_expression "(uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" ( (binary_expression "CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11)" (call_expression "CARRY4(uVar9,uVar13)" identifier (argument_list "(uVar9,uVar13)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar5,uVar11)" identifier (argument_list "(uVar5,uVar11)" ( identifier , identifier )))) ))))) ;) (return_statement "return;" return ;) })) (if_statement "if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" { (expression_statement "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2" (pointer_expression "*param_1" * identifier) = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (return_statement "return;" return ;) })) (expression_statement "puVar14 = (uint *)((int)param_1 + param_3 * 4);" (assignment_expression "puVar14 = (uint *)((int)param_1 + param_3 * 4)" identifier = (cast_expression "(uint *)((int)param_1 + param_3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + param_3 * 4)" ( (binary_expression "(int)param_1 + param_3 * 4" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar10 = *param_2;" (assignment_expression "uVar10 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" identifier = (binary_expression "1 - param_3" number_literal - identifier)) ;) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "puVar14[iVar7] = (uint)lVar2;" (assignment_expression "puVar14[iVar7] = (uint)lVar2" (subscript_expression "puVar14[iVar7]" identifier [ identifier ]) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" if (parenthesized_expression "(param_3 - 3 != 0)" ( (binary_expression "param_3 - 3 != 0" (binary_expression "param_3 - 3" identifier - number_literal) != number_literal) )) (compound_statement "{\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" { (expression_statement "iVar7 = -(param_3 - 3);" (assignment_expression "iVar7 = -(param_3 - 3)" identifier = (unary_expression "-(param_3 - 3)" - (parenthesized_expression "(param_3 - 3)" ( (binary_expression "param_3 - 3" identifier - number_literal) )))) ;) (do_statement "do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);" do (compound_statement "{\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    }" { (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = param_2[param_3 + iVar7 + -2];" (assignment_expression "uVar10 = param_2[param_3 + iVar7 + -2]" identifier = (subscript_expression "param_2[param_3 + iVar7 + -2]" identifier [ (binary_expression "param_3 + iVar7 + -2" (binary_expression "param_3 + iVar7" identifier + identifier) + number_literal) ])) ;) (expression_statement "iVar8 = iVar7 + -1;" (assignment_expression "iVar8 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);" do (compound_statement "{\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar8]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar8]" identifier [ (binary_expression "param_3 + iVar8" identifier + identifier) ])) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar4 = (uint)lVar2;" (assignment_expression "uVar4 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar8;" (assignment_expression "puVar1 = puVar14 + iVar8" identifier = (binary_expression "puVar14 + iVar8" identifier + identifier)) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 + uVar4;" (assignment_expression "*puVar1 = *puVar1 + uVar4" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 + uVar4" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);" (assignment_expression "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (cast_expression "(uint)CARRY4(uVar11,uVar4)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,uVar4)" identifier (argument_list "(uVar11,uVar4)" ( identifier , identifier )))))) ;) (expression_statement "bVar15 = SCARRY4(iVar8,1);" (assignment_expression "bVar15 = SCARRY4(iVar8,1)" identifier = (call_expression "SCARRY4(iVar8,1)" identifier (argument_list "(iVar8,1)" ( identifier , number_literal )))) ;) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar15 != iVar8 < 0)" ( (binary_expression "bVar15 != iVar8 < 0" identifier != (binary_expression "iVar8 < 0" identifier < number_literal)) )) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) })) (expression_statement "uVar11 = param_2[param_3 - 1];" (assignment_expression "uVar11 = param_2[param_3 - 1]" identifier = (subscript_expression "param_2[param_3 - 1]" identifier [ (binary_expression "param_3 - 1" identifier - number_literal) ])) ;) (expression_statement "uVar4 = param_2[param_3 - 2];" (assignment_expression "uVar4 = param_2[param_3 - 2]" identifier = (subscript_expression "param_2[param_3 - 2]" identifier [ (binary_expression "param_3 - 2" identifier - number_literal) ])) ;) (expression_statement "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);" (assignment_expression "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4)" identifier = (call_expression "(uint)((ulonglong)uVar11 * (ulonglong)uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar11 * (ulonglong)uVar4)" ( (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) (expression_statement "uVar10 = *puVar14;" (assignment_expression "uVar10 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (expression_statement "*puVar14 = *puVar14 + uVar5;" (assignment_expression "*puVar14 = *puVar14 + uVar5" (pointer_expression "*puVar14" * identifier) = (binary_expression "*puVar14 + uVar5" (pointer_expression "*puVar14" * identifier) + identifier)) ;) (expression_statement "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);" (assignment_expression "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (subscript_expression "puVar14[1]" identifier [ number_literal ]) = (binary_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (cast_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" ( (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20" (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) + (cast_expression "(uint)CARRY4(uVar10,uVar5)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,uVar5)" identifier (argument_list "(uVar10,uVar5)" ( identifier , identifier )))))) ;) (expression_statement "bVar15 = 0xfffffffe < -param_3;" (assignment_expression "bVar15 = 0xfffffffe < -param_3" identifier = (binary_expression "0xfffffffe < -param_3" number_literal < (unary_expression "-param_3" - identifier))) ;) (expression_statement "iVar7 = -param_3 + 1;" (assignment_expression "iVar7 = -param_3 + 1" identifier = (binary_expression "-param_3 + 1" (unary_expression "-param_3" - identifier) + number_literal)) ;) (do_statement "do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" identifier = (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)bVar15;" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)bVar15" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 << 1 | (uint)bVar15" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" * identifier) << number_literal) | (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" identifier = (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "bVar15 = (int)*puVar1 < 0;" (assignment_expression "bVar15 = (int)*puVar1 < 0" identifier = (binary_expression "(int)*puVar1 < 0" (cast_expression "(int)*puVar1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*puVar1" * identifier)) < number_literal)) ;) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0)" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 << 1 | (uint)((int)uVar10 < 0)" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" * identifier) << number_literal) | (call_expression "(uint)((int)uVar10 < 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar10 < 0)" ( (binary_expression "(int)uVar10 < 0" (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) ))))) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "puVar14[2] = (uint)bVar15;" (assignment_expression "puVar14[2] = (uint)bVar15" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "puVar14[param_3 * -2 + 3] = (uint)lVar2;" (assignment_expression "puVar14[param_3 * -2 + 3] = (uint)lVar2" (subscript_expression "puVar14[param_3 * -2 + 3]" identifier [ (binary_expression "param_3 * -2 + 3" (binary_expression "param_3 * -2" identifier * number_literal) + number_literal) ]) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" identifier = (binary_expression "1 - param_3" number_literal - identifier)) ;) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])) * (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])))) ;) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" identifier = (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 + uVar10;" (assignment_expression "*puVar1 = *puVar1 + uVar10" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 + uVar10" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" identifier = (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar5 = *puVar1 + uVar6;" (assignment_expression "uVar5 = *puVar1 + uVar6" identifier = (binary_expression "*puVar1 + uVar6" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "*puVar1 = uVar5 + CARRY4(uVar11,uVar10);" (assignment_expression "*puVar1 = uVar5 + CARRY4(uVar11,uVar10)" (pointer_expression "*puVar1" * identifier) = (binary_expression "uVar5 + CARRY4(uVar11,uVar10)" identifier + (call_expression "CARRY4(uVar11,uVar10)" identifier (argument_list "(uVar11,uVar10)" ( identifier , identifier ))))) ;) (expression_statement "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));" (assignment_expression "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (call_expression "(uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" ( (binary_expression "CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" (call_expression "CARRY4(uVar4,uVar6)" identifier (argument_list "(uVar4,uVar6)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" identifier (argument_list "(uVar5,(uint)CARRY4(uVar11,uVar10))" ( identifier , (cast_expression "(uint)CARRY4(uVar11,uVar10)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,uVar10)" identifier (argument_list "(uVar11,uVar10)" ( identifier , identifier )))) )))) ))))) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "puVar14[2] = puVar14[2] + uVar10;" (assignment_expression "puVar14[2] = puVar14[2] + uVar10" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + uVar10" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}\n\n" (function_definition "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" primitive_type (function_declarator "__gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)" identifier (parameter_list "(longlong *param_1,uint *param_2,uint param_3)" ( (parameter_declaration "longlong *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) ))) (compound_statement "{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "bool bVar15;" primitive_type identifier ;) (if_statement "if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" if (parenthesized_expression "(param_3 == 2)" ( (binary_expression "param_3 == 2" identifier == number_literal) )) (compound_statement "{\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" { (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*(int *)param_1 = (int)lVar2;" (assignment_expression "*(int *)param_1 = (int)lVar2" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(int)lVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];" (assignment_expression "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1]" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_2[1]" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])))) ;) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);" (assignment_expression "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" identifier = (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" ( (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20" (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) >> number_literal) )))) ;) (expression_statement "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);" (assignment_expression "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" identifier = (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1])" ( (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )))) ;) (expression_statement "uVar12 = uVar10 + uVar3;" (assignment_expression "uVar12 = uVar10 + uVar3" identifier = (binary_expression "uVar10 + uVar3" identifier + identifier)) ;) (expression_statement "uVar10 = (uint)CARRY4(uVar10,uVar3);" (assignment_expression "uVar10 = (uint)CARRY4(uVar10,uVar3)" identifier = (cast_expression "(uint)CARRY4(uVar10,uVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,uVar3)" identifier (argument_list "(uVar10,uVar3)" ( identifier , identifier ))))) ;) (expression_statement "uVar4 = uVar6 + uVar9;" (assignment_expression "uVar4 = uVar6 + uVar9" identifier = (binary_expression "uVar6 + uVar9" identifier + identifier)) ;) (expression_statement "uVar13 = uVar4 + uVar10;" (assignment_expression "uVar13 = uVar4 + uVar10" identifier = (binary_expression "uVar4 + uVar10" identifier + identifier)) ;) (expression_statement "uVar11 = (uint)CARRY4(uVar3,uVar12);" (assignment_expression "uVar11 = (uint)CARRY4(uVar3,uVar12)" identifier = (cast_expression "(uint)CARRY4(uVar3,uVar12)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,uVar12)" identifier (argument_list "(uVar3,uVar12)" ( identifier , identifier ))))) ;) (expression_statement "uVar5 = uVar9 + uVar13;" (assignment_expression "uVar5 = uVar9 + uVar13" identifier = (binary_expression "uVar9 + uVar13" identifier + identifier)) ;) (expression_statement "*(uint *)((int)param_1 + 4) = uVar3 + uVar12;" (assignment_expression "*(uint *)((int)param_1 + 4) = uVar3 + uVar12" (pointer_expression "*(uint *)((int)param_1 + 4)" * (cast_expression "(uint *)((int)param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 4)" ( (binary_expression "(int)param_1 + 4" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "uVar3 + uVar12" identifier + identifier)) ;) (expression_statement "*(uint *)(param_1 + 1) = uVar5 + uVar11;" (assignment_expression "*(uint *)(param_1 + 1) = uVar5 + uVar11" (pointer_expression "*(uint *)(param_1 + 1)" * (cast_expression "(uint *)(param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar11" identifier + identifier)) ;) (expression_statement "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));" (assignment_expression "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (pointer_expression "*(uint *)((int)param_1 + 0xc)" * (cast_expression "(uint *)((int)param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xc)" ( (binary_expression "(int)param_1 + 0xc" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (call_expression "(uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" ( (binary_expression "CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)" (call_expression "CARRY4(uVar6,uVar9)" identifier (argument_list "(uVar6,uVar9)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar4,uVar10)" identifier (argument_list "(uVar4,uVar10)" ( identifier , identifier )))) )))) + (call_expression "(uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" ( (binary_expression "CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11)" (call_expression "CARRY4(uVar9,uVar13)" identifier (argument_list "(uVar9,uVar13)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar5,uVar11)" identifier (argument_list "(uVar5,uVar11)" ( identifier , identifier )))) ))))) ;) (return_statement "return;" return ;) })) (if_statement "if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" { (expression_statement "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2" (pointer_expression "*param_1" * identifier) = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (return_statement "return;" return ;) })) (expression_statement "puVar14 = (uint *)((int)param_1 + param_3 * 4);" (assignment_expression "puVar14 = (uint *)((int)param_1 + param_3 * 4)" identifier = (cast_expression "(uint *)((int)param_1 + param_3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + param_3 * 4)" ( (binary_expression "(int)param_1 + param_3 * 4" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar10 = *param_2;" (assignment_expression "uVar10 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" identifier = (binary_expression "1 - param_3" number_literal - identifier)) ;) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "puVar14[iVar7] = (uint)lVar2;" (assignment_expression "puVar14[iVar7] = (uint)lVar2" (subscript_expression "puVar14[iVar7]" identifier [ identifier ]) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" if (parenthesized_expression "(param_3 - 3 != 0)" ( (binary_expression "param_3 - 3 != 0" (binary_expression "param_3 - 3" identifier - number_literal) != number_literal) )) (compound_statement "{\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" { (expression_statement "iVar7 = -(param_3 - 3);" (assignment_expression "iVar7 = -(param_3 - 3)" identifier = (unary_expression "-(param_3 - 3)" - (parenthesized_expression "(param_3 - 3)" ( (binary_expression "param_3 - 3" identifier - number_literal) )))) ;) (do_statement "do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);" do (compound_statement "{\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    }" { (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = param_2[param_3 + iVar7 + -2];" (assignment_expression "uVar10 = param_2[param_3 + iVar7 + -2]" identifier = (subscript_expression "param_2[param_3 + iVar7 + -2]" identifier [ (binary_expression "param_3 + iVar7 + -2" (binary_expression "param_3 + iVar7" identifier + identifier) + number_literal) ])) ;) (expression_statement "iVar8 = iVar7 + -1;" (assignment_expression "iVar8 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);" do (compound_statement "{\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar8]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar8]" identifier [ (binary_expression "param_3 + iVar8" identifier + identifier) ])) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar4 = (uint)lVar2;" (assignment_expression "uVar4 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar8;" (assignment_expression "puVar1 = puVar14 + iVar8" identifier = (binary_expression "puVar14 + iVar8" identifier + identifier)) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 + uVar4;" (assignment_expression "*puVar1 = *puVar1 + uVar4" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 + uVar4" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);" (assignment_expression "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (cast_expression "(uint)CARRY4(uVar11,uVar4)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,uVar4)" identifier (argument_list "(uVar11,uVar4)" ( identifier , identifier )))))) ;) (expression_statement "bVar15 = SCARRY4(iVar8,1);" (assignment_expression "bVar15 = SCARRY4(iVar8,1)" identifier = (call_expression "SCARRY4(iVar8,1)" identifier (argument_list "(iVar8,1)" ( identifier , number_literal )))) ;) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar15 != iVar8 < 0)" ( (binary_expression "bVar15 != iVar8 < 0" identifier != (binary_expression "iVar8 < 0" identifier < number_literal)) )) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) })) (expression_statement "uVar11 = param_2[param_3 - 1];" (assignment_expression "uVar11 = param_2[param_3 - 1]" identifier = (subscript_expression "param_2[param_3 - 1]" identifier [ (binary_expression "param_3 - 1" identifier - number_literal) ])) ;) (expression_statement "uVar4 = param_2[param_3 - 2];" (assignment_expression "uVar4 = param_2[param_3 - 2]" identifier = (subscript_expression "param_2[param_3 - 2]" identifier [ (binary_expression "param_3 - 2" identifier - number_literal) ])) ;) (expression_statement "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);" (assignment_expression "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4)" identifier = (call_expression "(uint)((ulonglong)uVar11 * (ulonglong)uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar11 * (ulonglong)uVar4)" ( (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) (expression_statement "uVar10 = *puVar14;" (assignment_expression "uVar10 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (expression_statement "*puVar14 = *puVar14 + uVar5;" (assignment_expression "*puVar14 = *puVar14 + uVar5" (pointer_expression "*puVar14" * identifier) = (binary_expression "*puVar14 + uVar5" (pointer_expression "*puVar14" * identifier) + identifier)) ;) (expression_statement "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);" (assignment_expression "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (subscript_expression "puVar14[1]" identifier [ number_literal ]) = (binary_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (cast_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" ( (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20" (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) + (cast_expression "(uint)CARRY4(uVar10,uVar5)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,uVar5)" identifier (argument_list "(uVar10,uVar5)" ( identifier , identifier )))))) ;) (expression_statement "bVar15 = 0xfffffffe < -param_3;" (assignment_expression "bVar15 = 0xfffffffe < -param_3" identifier = (binary_expression "0xfffffffe < -param_3" number_literal < (unary_expression "-param_3" - identifier))) ;) (expression_statement "iVar7 = -param_3 + 1;" (assignment_expression "iVar7 = -param_3 + 1" identifier = (binary_expression "-param_3 + 1" (unary_expression "-param_3" - identifier) + number_literal)) ;) (do_statement "do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" identifier = (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)bVar15;" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)bVar15" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 << 1 | (uint)bVar15" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" * identifier) << number_literal) | (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" identifier = (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "bVar15 = (int)*puVar1 < 0;" (assignment_expression "bVar15 = (int)*puVar1 < 0" identifier = (binary_expression "(int)*puVar1 < 0" (cast_expression "(int)*puVar1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*puVar1" * identifier)) < number_literal)) ;) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0)" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 << 1 | (uint)((int)uVar10 < 0)" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" * identifier) << number_literal) | (call_expression "(uint)((int)uVar10 < 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar10 < 0)" ( (binary_expression "(int)uVar10 < 0" (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) ))))) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "puVar14[2] = (uint)bVar15;" (assignment_expression "puVar14[2] = (uint)bVar15" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "puVar14[param_3 * -2 + 3] = (uint)lVar2;" (assignment_expression "puVar14[param_3 * -2 + 3] = (uint)lVar2" (subscript_expression "puVar14[param_3 * -2 + 3]" identifier [ (binary_expression "param_3 * -2 + 3" (binary_expression "param_3 * -2" identifier * number_literal) + number_literal) ]) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" identifier = (binary_expression "1 - param_3" number_literal - identifier)) ;) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])) * (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])))) ;) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" identifier = (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 + uVar10;" (assignment_expression "*puVar1 = *puVar1 + uVar10" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 + uVar10" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" identifier = (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar5 = *puVar1 + uVar6;" (assignment_expression "uVar5 = *puVar1 + uVar6" identifier = (binary_expression "*puVar1 + uVar6" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "*puVar1 = uVar5 + CARRY4(uVar11,uVar10);" (assignment_expression "*puVar1 = uVar5 + CARRY4(uVar11,uVar10)" (pointer_expression "*puVar1" * identifier) = (binary_expression "uVar5 + CARRY4(uVar11,uVar10)" identifier + (call_expression "CARRY4(uVar11,uVar10)" identifier (argument_list "(uVar11,uVar10)" ( identifier , identifier ))))) ;) (expression_statement "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));" (assignment_expression "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (call_expression "(uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" ( (binary_expression "CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" (call_expression "CARRY4(uVar4,uVar6)" identifier (argument_list "(uVar4,uVar6)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" identifier (argument_list "(uVar5,(uint)CARRY4(uVar11,uVar10))" ( identifier , (cast_expression "(uint)CARRY4(uVar11,uVar10)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,uVar10)" identifier (argument_list "(uVar11,uVar10)" ( identifier , identifier )))) )))) ))))) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "puVar14[2] = puVar14[2] + uVar10;" (assignment_expression "puVar14[2] = puVar14[2] + uVar10" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + uVar10" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}\n\n" (function_definition "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" primitive_type (function_declarator "__gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)" identifier (parameter_list "(longlong *param_1,uint *param_2,uint param_3)" ( (parameter_declaration "longlong *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) ))) (compound_statement "{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "bool bVar15;" primitive_type identifier ;) (if_statement "if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" if (parenthesized_expression "(param_3 == 2)" ( (binary_expression "param_3 == 2" identifier == number_literal) )) (compound_statement "{\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" { (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*(int *)param_1 = (int)lVar2;" (assignment_expression "*(int *)param_1 = (int)lVar2" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(int)lVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];" (assignment_expression "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1]" identifier = (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_2[1]" (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ])))) ;) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);" (assignment_expression "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" identifier = (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" ( (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20" (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) >> number_literal) )))) ;) (expression_statement "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);" (assignment_expression "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" identifier = (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1])" ( (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)param_2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )))) ;) (expression_statement "uVar12 = uVar10 + uVar3;" (assignment_expression "uVar12 = uVar10 + uVar3" identifier = (binary_expression "uVar10 + uVar3" identifier + identifier)) ;) (expression_statement "uVar10 = (uint)CARRY4(uVar10,uVar3);" (assignment_expression "uVar10 = (uint)CARRY4(uVar10,uVar3)" identifier = (cast_expression "(uint)CARRY4(uVar10,uVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,uVar3)" identifier (argument_list "(uVar10,uVar3)" ( identifier , identifier ))))) ;) (expression_statement "uVar4 = uVar6 + uVar9;" (assignment_expression "uVar4 = uVar6 + uVar9" identifier = (binary_expression "uVar6 + uVar9" identifier + identifier)) ;) (expression_statement "uVar13 = uVar4 + uVar10;" (assignment_expression "uVar13 = uVar4 + uVar10" identifier = (binary_expression "uVar4 + uVar10" identifier + identifier)) ;) (expression_statement "uVar11 = (uint)CARRY4(uVar3,uVar12);" (assignment_expression "uVar11 = (uint)CARRY4(uVar3,uVar12)" identifier = (cast_expression "(uint)CARRY4(uVar3,uVar12)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar3,uVar12)" identifier (argument_list "(uVar3,uVar12)" ( identifier , identifier ))))) ;) (expression_statement "uVar5 = uVar9 + uVar13;" (assignment_expression "uVar5 = uVar9 + uVar13" identifier = (binary_expression "uVar9 + uVar13" identifier + identifier)) ;) (expression_statement "*(uint *)((int)param_1 + 4) = uVar3 + uVar12;" (assignment_expression "*(uint *)((int)param_1 + 4) = uVar3 + uVar12" (pointer_expression "*(uint *)((int)param_1 + 4)" * (cast_expression "(uint *)((int)param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 4)" ( (binary_expression "(int)param_1 + 4" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "uVar3 + uVar12" identifier + identifier)) ;) (expression_statement "*(uint *)(param_1 + 1) = uVar5 + uVar11;" (assignment_expression "*(uint *)(param_1 + 1) = uVar5 + uVar11" (pointer_expression "*(uint *)(param_1 + 1)" * (cast_expression "(uint *)(param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar11" identifier + identifier)) ;) (expression_statement "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));" (assignment_expression "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (pointer_expression "*(uint *)((int)param_1 + 0xc)" * (cast_expression "(uint *)((int)param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0xc)" ( (binary_expression "(int)param_1 + 0xc" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (call_expression "(uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" ( (binary_expression "CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)" (call_expression "CARRY4(uVar6,uVar9)" identifier (argument_list "(uVar6,uVar9)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar4,uVar10)" identifier (argument_list "(uVar4,uVar10)" ( identifier , identifier )))) )))) + (call_expression "(uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" ( (binary_expression "CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11)" (call_expression "CARRY4(uVar9,uVar13)" identifier (argument_list "(uVar9,uVar13)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar5,uVar11)" identifier (argument_list "(uVar5,uVar11)" ( identifier , identifier )))) ))))) ;) (return_statement "return;" return ;) })) (if_statement "if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" { (expression_statement "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2" (pointer_expression "*param_1" * identifier) = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (return_statement "return;" return ;) })) (expression_statement "puVar14 = (uint *)((int)param_1 + param_3 * 4);" (assignment_expression "puVar14 = (uint *)((int)param_1 + param_3 * 4)" identifier = (cast_expression "(uint *)((int)param_1 + param_3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + param_3 * 4)" ( (binary_expression "(int)param_1 + param_3 * 4" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar10 = *param_2;" (assignment_expression "uVar10 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" identifier = (binary_expression "1 - param_3" number_literal - identifier)) ;) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "puVar14[iVar7] = (uint)lVar2;" (assignment_expression "puVar14[iVar7] = (uint)lVar2" (subscript_expression "puVar14[iVar7]" identifier [ identifier ]) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" if (parenthesized_expression "(param_3 - 3 != 0)" ( (binary_expression "param_3 - 3 != 0" (binary_expression "param_3 - 3" identifier - number_literal) != number_literal) )) (compound_statement "{\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" { (expression_statement "iVar7 = -(param_3 - 3);" (assignment_expression "iVar7 = -(param_3 - 3)" identifier = (unary_expression "-(param_3 - 3)" - (parenthesized_expression "(param_3 - 3)" ( (binary_expression "param_3 - 3" identifier - number_literal) )))) ;) (do_statement "do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);" do (compound_statement "{\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    }" { (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = param_2[param_3 + iVar7 + -2];" (assignment_expression "uVar10 = param_2[param_3 + iVar7 + -2]" identifier = (subscript_expression "param_2[param_3 + iVar7 + -2]" identifier [ (binary_expression "param_3 + iVar7 + -2" (binary_expression "param_3 + iVar7" identifier + identifier) + number_literal) ])) ;) (expression_statement "iVar8 = iVar7 + -1;" (assignment_expression "iVar8 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);" do (compound_statement "{\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar8]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar8]" identifier [ (binary_expression "param_3 + iVar8" identifier + identifier) ])) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar4 = (uint)lVar2;" (assignment_expression "uVar4 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar8;" (assignment_expression "puVar1 = puVar14 + iVar8" identifier = (binary_expression "puVar14 + iVar8" identifier + identifier)) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 + uVar4;" (assignment_expression "*puVar1 = *puVar1 + uVar4" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 + uVar4" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);" (assignment_expression "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (cast_expression "(uint)CARRY4(uVar11,uVar4)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,uVar4)" identifier (argument_list "(uVar11,uVar4)" ( identifier , identifier )))))) ;) (expression_statement "bVar15 = SCARRY4(iVar8,1);" (assignment_expression "bVar15 = SCARRY4(iVar8,1)" identifier = (call_expression "SCARRY4(iVar8,1)" identifier (argument_list "(iVar8,1)" ( identifier , number_literal )))) ;) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar15 != iVar8 < 0)" ( (binary_expression "bVar15 != iVar8 < 0" identifier != (binary_expression "iVar8 < 0" identifier < number_literal)) )) ;) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" * identifier) = identifier) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) })) (expression_statement "uVar11 = param_2[param_3 - 1];" (assignment_expression "uVar11 = param_2[param_3 - 1]" identifier = (subscript_expression "param_2[param_3 - 1]" identifier [ (binary_expression "param_3 - 1" identifier - number_literal) ])) ;) (expression_statement "uVar4 = param_2[param_3 - 2];" (assignment_expression "uVar4 = param_2[param_3 - 2]" identifier = (subscript_expression "param_2[param_3 - 2]" identifier [ (binary_expression "param_3 - 2" identifier - number_literal) ])) ;) (expression_statement "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);" (assignment_expression "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4)" identifier = (call_expression "(uint)((ulonglong)uVar11 * (ulonglong)uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar11 * (ulonglong)uVar4)" ( (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) )))) ;) (expression_statement "uVar10 = *puVar14;" (assignment_expression "uVar10 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (expression_statement "*puVar14 = *puVar14 + uVar5;" (assignment_expression "*puVar14 = *puVar14 + uVar5" (pointer_expression "*puVar14" * identifier) = (binary_expression "*puVar14 + uVar5" (pointer_expression "*puVar14" * identifier) + identifier)) ;) (expression_statement "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);" (assignment_expression "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (subscript_expression "puVar14[1]" identifier [ number_literal ]) = (binary_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (cast_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" ( (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20" (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) + (cast_expression "(uint)CARRY4(uVar10,uVar5)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,uVar5)" identifier (argument_list "(uVar10,uVar5)" ( identifier , identifier )))))) ;) (expression_statement "bVar15 = 0xfffffffe < -param_3;" (assignment_expression "bVar15 = 0xfffffffe < -param_3" identifier = (binary_expression "0xfffffffe < -param_3" number_literal < (unary_expression "-param_3" - identifier))) ;) (expression_statement "iVar7 = -param_3 + 1;" (assignment_expression "iVar7 = -param_3 + 1" identifier = (binary_expression "-param_3 + 1" (unary_expression "-param_3" - identifier) + number_literal)) ;) (do_statement "do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" identifier = (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)bVar15;" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)bVar15" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 << 1 | (uint)bVar15" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" * identifier) << number_literal) | (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" identifier = (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "bVar15 = (int)*puVar1 < 0;" (assignment_expression "bVar15 = (int)*puVar1 < 0" identifier = (binary_expression "(int)*puVar1 < 0" (cast_expression "(int)*puVar1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*puVar1" * identifier)) < number_literal)) ;) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0)" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 << 1 | (uint)((int)uVar10 < 0)" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" * identifier) << number_literal) | (call_expression "(uint)((int)uVar10 < 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar10 < 0)" ( (binary_expression "(int)uVar10 < 0" (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) ))))) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "puVar14[2] = (uint)bVar15;" (assignment_expression "puVar14[2] = (uint)bVar15" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" identifier = (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "puVar14[param_3 * -2 + 3] = (uint)lVar2;" (assignment_expression "puVar14[param_3 * -2 + 3] = (uint)lVar2" (subscript_expression "puVar14[param_3 * -2 + 3]" identifier [ (binary_expression "param_3 * -2 + 3" (binary_expression "param_3 * -2" identifier * number_literal) + number_literal) ]) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" identifier = (binary_expression "1 - param_3" number_literal - identifier)) ;) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  }" { (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" identifier = (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])) * (cast_expression "(ulonglong)param_2[param_3 + iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "param_2[param_3 + iVar7]" identifier [ (binary_expression "param_3 + iVar7" identifier + identifier) ])))) ;) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" identifier = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" identifier = (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "*puVar1 = *puVar1 + uVar10;" (assignment_expression "*puVar1 = *puVar1 + uVar10" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 + uVar10" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" identifier = (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" identifier + (binary_expression "iVar7 * 2" identifier * number_literal)) + number_literal)) ;) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar5 = *puVar1 + uVar6;" (assignment_expression "uVar5 = *puVar1 + uVar6" identifier = (binary_expression "*puVar1 + uVar6" (pointer_expression "*puVar1" * identifier) + identifier)) ;) (expression_statement "*puVar1 = uVar5 + CARRY4(uVar11,uVar10);" (assignment_expression "*puVar1 = uVar5 + CARRY4(uVar11,uVar10)" (pointer_expression "*puVar1" * identifier) = (binary_expression "uVar5 + CARRY4(uVar11,uVar10)" identifier + (call_expression "CARRY4(uVar11,uVar10)" identifier (argument_list "(uVar11,uVar10)" ( identifier , identifier ))))) ;) (expression_statement "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));" (assignment_expression "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (call_expression "(uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" ( (binary_expression "CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" (call_expression "CARRY4(uVar4,uVar6)" identifier (argument_list "(uVar4,uVar6)" ( identifier , identifier ))) || (call_expression "CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" identifier (argument_list "(uVar5,(uint)CARRY4(uVar11,uVar10))" ( identifier , (cast_expression "(uint)CARRY4(uVar11,uVar10)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,uVar10)" identifier (argument_list "(uVar11,uVar10)" ( identifier , identifier )))) )))) ))))) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "puVar14[2] = puVar14[2] + uVar10;" (assignment_expression "puVar14[2] = puVar14[2] + uVar10" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + uVar10" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (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 ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) 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) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) || (call_expression IDENT (argument_list ( IDENT , IDENT )))) )))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) || (call_expression IDENT (argument_list ( IDENT , IDENT )))) ))))) ;) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT)) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - (parenthesized_expression ( (binary_expression IDENT - LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression (binary_expression IDENT + IDENT) + LIT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( 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 (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - LIT) ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - LIT) ])) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT) ))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT < (unary_expression - IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression - IDENT) + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (pointer_expression * IDENT) << LIT) | (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) < LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (pointer_expression * IDENT) << LIT) | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])) * (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) || (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) )))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (return_statement return ;) })))
(function_definition "void __gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)\n\n{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" (primitive_type "void") (function_declarator "__gmpn_sqr_basecase_x86(longlong *param_1,uint *param_2,uint param_3)" (identifier "__gmpn_sqr_basecase_x86") (parameter_list "(longlong *param_1,uint *param_2,uint param_3)" (( "(") (parameter_declaration "longlong *param_1" (type_identifier "longlong") (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")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  bool bVar15;\n  \n  if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }\n  if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }\n  puVar14 = (uint *)((int)param_1 + param_3 * 4);\n  uVar10 = *param_2;\n  uVar11 = 0;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  *puVar14 = uVar11;\n  if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }\n  uVar11 = param_2[param_3 - 1];\n  uVar4 = param_2[param_3 - 2];\n  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);\n  uVar10 = *puVar14;\n  *puVar14 = *puVar14 + uVar5;\n  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);\n  bVar15 = 0xfffffffe < -param_3;\n  iVar7 = -param_3 + 1;\n  do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = (uint)bVar15;\n  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n  puVar14[param_3 * -2 + 3] = (uint)lVar2;\n  iVar7 = 1 - param_3;\n  do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);\n  puVar14[2] = puVar14[2] + uVar10;\n  return;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "longlong lVar2;" (type_identifier "longlong") (identifier "lVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "bool bVar15;" (primitive_type "bool") (identifier "bVar15") (; ";")) (if_statement "if (param_3 == 2) {\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" (if "if") (parenthesized_expression "(param_3 == 2)" (( "(") (binary_expression "param_3 == 2" (identifier "param_3") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);\n    *(int *)param_1 = (int)lVar2;\n    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];\n    uVar6 = (uint)lVar2;\n    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);\n    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);\n    uVar12 = uVar10 + uVar3;\n    uVar10 = (uint)CARRY4(uVar10,uVar3);\n    uVar4 = uVar6 + uVar9;\n    uVar13 = uVar4 + uVar10;\n    uVar11 = (uint)CARRY4(uVar3,uVar12);\n    uVar5 = uVar9 + uVar13;\n    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;\n    *(uint *)(param_1 + 1) = uVar5 + uVar11;\n    *(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));\n    return;\n  }" ({ "{") (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "param_2"))) (; ";")) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" (identifier "uVar10") (= "=") (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "*(int *)param_1 = (int)lVar2;" (assignment_expression "*(int *)param_1 = (int)lVar2" (pointer_expression "*(int *)param_1" (* "*") (cast_expression "(int *)param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1"))) (= "=") (cast_expression "(int)lVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];" (assignment_expression "lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1]" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)param_2[1] * (ulonglong)param_2[1]" (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_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))))) (; ";")) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" (identifier "uVar6") (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);" (assignment_expression "uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" (identifier "uVar9") (= "=") (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20)" (( "(") (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20" (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (cast_expression "(ulonglong)param_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);" (assignment_expression "uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" (identifier "uVar3") (= "=") (call_expression "(uint)((ulonglong)*param_2 * (ulonglong)param_2[1])" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)*param_2 * (ulonglong)param_2[1])" (( "(") (binary_expression "(ulonglong)*param_2 * (ulonglong)param_2[1]" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (cast_expression "(ulonglong)param_2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) () ")")))) (; ";")) (expression_statement "uVar12 = uVar10 + uVar3;" (assignment_expression "uVar12 = uVar10 + uVar3" (identifier "uVar12") (= "=") (binary_expression "uVar10 + uVar3" (identifier "uVar10") (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "uVar10 = (uint)CARRY4(uVar10,uVar3);" (assignment_expression "uVar10 = (uint)CARRY4(uVar10,uVar3)" (identifier "uVar10") (= "=") (cast_expression "(uint)CARRY4(uVar10,uVar3)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar10,uVar3)" (identifier "CARRY4") (argument_list "(uVar10,uVar3)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar3") () ")"))))) (; ";")) (expression_statement "uVar4 = uVar6 + uVar9;" (assignment_expression "uVar4 = uVar6 + uVar9" (identifier "uVar4") (= "=") (binary_expression "uVar6 + uVar9" (identifier "uVar6") (+ "+") (identifier "uVar9"))) (; ";")) (expression_statement "uVar13 = uVar4 + uVar10;" (assignment_expression "uVar13 = uVar4 + uVar10" (identifier "uVar13") (= "=") (binary_expression "uVar4 + uVar10" (identifier "uVar4") (+ "+") (identifier "uVar10"))) (; ";")) (expression_statement "uVar11 = (uint)CARRY4(uVar3,uVar12);" (assignment_expression "uVar11 = (uint)CARRY4(uVar3,uVar12)" (identifier "uVar11") (= "=") (cast_expression "(uint)CARRY4(uVar3,uVar12)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar3,uVar12)" (identifier "CARRY4") (argument_list "(uVar3,uVar12)" (( "(") (identifier "uVar3") (, ",") (identifier "uVar12") () ")"))))) (; ";")) (expression_statement "uVar5 = uVar9 + uVar13;" (assignment_expression "uVar5 = uVar9 + uVar13" (identifier "uVar5") (= "=") (binary_expression "uVar9 + uVar13" (identifier "uVar9") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "*(uint *)((int)param_1 + 4) = uVar3 + uVar12;" (assignment_expression "*(uint *)((int)param_1 + 4) = uVar3 + uVar12" (pointer_expression "*(uint *)((int)param_1 + 4)" (* "*") (cast_expression "(uint *)((int)param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 4)" (( "(") (binary_expression "(int)param_1 + 4" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "uVar3 + uVar12" (identifier "uVar3") (+ "+") (identifier "uVar12"))) (; ";")) (expression_statement "*(uint *)(param_1 + 1) = uVar5 + uVar11;" (assignment_expression "*(uint *)(param_1 + 1) = uVar5 + uVar11" (pointer_expression "*(uint *)(param_1 + 1)" (* "*") (cast_expression "(uint *)(param_1 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")")))) (= "=") (binary_expression "uVar5 + uVar11" (identifier "uVar5") (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));" (assignment_expression "*(uint *)((int)param_1 + 0xc) =\n         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (pointer_expression "*(uint *)((int)param_1 + 0xc)" (* "*") (cast_expression "(uint *)((int)param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0xc)" (( "(") (binary_expression "(int)param_1 + 0xc" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +\n         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (call_expression "(uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10))" (( "(") (binary_expression "CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)" (call_expression "CARRY4(uVar6,uVar9)" (identifier "CARRY4") (argument_list "(uVar6,uVar9)" (( "(") (identifier "uVar6") (, ",") (identifier "uVar9") () ")"))) (|| "||") (call_expression "CARRY4(uVar4,uVar10)" (identifier "CARRY4") (argument_list "(uVar4,uVar10)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar10") () ")")))) () ")")))) (+ "+") (call_expression "(uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11))" (( "(") (binary_expression "CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11)" (call_expression "CARRY4(uVar9,uVar13)" (identifier "CARRY4") (argument_list "(uVar9,uVar13)" (( "(") (identifier "uVar9") (, ",") (identifier "uVar13") () ")"))) (|| "||") (call_expression "CARRY4(uVar5,uVar11)" (identifier "CARRY4") (argument_list "(uVar5,uVar11)" (( "(") (identifier "uVar5") (, ",") (identifier "uVar11") () ")")))) () ")"))))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (param_3 < 3) {\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" (if "if") (parenthesized_expression "(param_3 < 3)" (( "(") (binary_expression "param_3 < 3" (identifier "param_3") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;\n    return;\n  }" ({ "{") (expression_statement "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "*param_1 = (ulonglong)*param_2 * (ulonglong)*param_2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "param_2"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "puVar14 = (uint *)((int)param_1 + param_3 * 4);" (assignment_expression "puVar14 = (uint *)((int)param_1 + param_3 * 4)" (identifier "puVar14") (= "=") (cast_expression "(uint *)((int)param_1 + param_3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + param_3 * 4)" (( "(") (binary_expression "(int)param_1 + param_3 * 4" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (binary_expression "param_3 * 4" (identifier "param_3") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "uVar10 = *param_2;" (assignment_expression "uVar10 = *param_2" (identifier "uVar10") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" (identifier "iVar7") (= "=") (binary_expression "1 - param_3" (number_literal "1") (- "-") (identifier "param_3"))) (; ";")) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" (do "do") (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;\n    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n    puVar14[iVar7] = (uint)lVar2;\n    iVar7 = iVar7 + 1;\n  }" ({ "{") (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[param_3 + iVar7]" (identifier "param_2") ([ "[") (binary_expression "param_3 + iVar7" (identifier "param_3") (+ "+") (identifier "iVar7")) (] "]"))) (* "*") (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10"))) (+ "+") (cast_expression "(ulonglong)uVar11" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar11")))) (; ";")) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" (identifier "uVar11") (= "=") (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "puVar14[iVar7] = (uint)lVar2;" (assignment_expression "puVar14[iVar7] = (uint)lVar2" (subscript_expression "puVar14[iVar7]" (identifier "puVar14") ([ "[") (identifier "iVar7") (] "]")) (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (param_3 - 3 != 0) {\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" (if "if") (parenthesized_expression "(param_3 - 3 != 0)" (( "(") (binary_expression "param_3 - 3 != 0" (binary_expression "param_3 - 3" (identifier "param_3") (- "-") (number_literal "3")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar7 = -(param_3 - 3);\n    do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);\n  }" ({ "{") (expression_statement "iVar7 = -(param_3 - 3);" (assignment_expression "iVar7 = -(param_3 - 3)" (identifier "iVar7") (= "=") (unary_expression "-(param_3 - 3)" (- "-") (parenthesized_expression "(param_3 - 3)" (( "(") (binary_expression "param_3 - 3" (identifier "param_3") (- "-") (number_literal "3")) () ")")))) (; ";")) (do_statement "do {\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    } while (iVar7 != 0);" (do "do") (compound_statement "{\n      puVar14 = puVar14 + 1;\n      uVar10 = param_2[param_3 + iVar7 + -2];\n      iVar8 = iVar7 + -1;\n      uVar11 = 0;\n      do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);\n      *puVar14 = uVar11;\n      iVar7 = iVar7 + 1;\n    }" ({ "{") (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" (identifier "puVar14") (= "=") (binary_expression "puVar14 + 1" (identifier "puVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar10 = param_2[param_3 + iVar7 + -2];" (assignment_expression "uVar10 = param_2[param_3 + iVar7 + -2]" (identifier "uVar10") (= "=") (subscript_expression "param_2[param_3 + iVar7 + -2]" (identifier "param_2") ([ "[") (binary_expression "param_3 + iVar7 + -2" (binary_expression "param_3 + iVar7" (identifier "param_3") (+ "+") (identifier "iVar7")) (+ "+") (number_literal "-2")) (] "]"))) (; ";")) (expression_statement "iVar8 = iVar7 + -1;" (assignment_expression "iVar8 = iVar7 + -1" (identifier "iVar8") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      } while (bVar15 != iVar8 < 0);" (do "do") (compound_statement "{\n        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;\n        uVar4 = (uint)lVar2;\n        puVar1 = puVar14 + iVar8;\n        uVar11 = *puVar1;\n        *puVar1 = *puVar1 + uVar4;\n        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);\n        bVar15 = SCARRY4(iVar8,1);\n        iVar8 = iVar8 + 1;\n      }" ({ "{") (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11" (binary_expression "(ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10" (cast_expression "(ulonglong)param_2[param_3 + iVar8]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[param_3 + iVar8]" (identifier "param_2") ([ "[") (binary_expression "param_3 + iVar8" (identifier "param_3") (+ "+") (identifier "iVar8")) (] "]"))) (* "*") (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10"))) (+ "+") (cast_expression "(ulonglong)uVar11" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar11")))) (; ";")) (expression_statement "uVar4 = (uint)lVar2;" (assignment_expression "uVar4 = (uint)lVar2" (identifier "uVar4") (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "puVar1 = puVar14 + iVar8;" (assignment_expression "puVar1 = puVar14 + iVar8" (identifier "puVar1") (= "=") (binary_expression "puVar14 + iVar8" (identifier "puVar14") (+ "+") (identifier "iVar8"))) (; ";")) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" (identifier "uVar11") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "*puVar1 = *puVar1 + uVar4;" (assignment_expression "*puVar1 = *puVar1 + uVar4" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "*puVar1 + uVar4" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);" (assignment_expression "uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" (identifier "uVar11") (= "=") (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4)" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (cast_expression "(uint)CARRY4(uVar11,uVar4)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar11,uVar4)" (identifier "CARRY4") (argument_list "(uVar11,uVar4)" (( "(") (identifier "uVar11") (, ",") (identifier "uVar4") () ")")))))) (; ";")) (expression_statement "bVar15 = SCARRY4(iVar8,1);" (assignment_expression "bVar15 = SCARRY4(iVar8,1)" (identifier "bVar15") (= "=") (call_expression "SCARRY4(iVar8,1)" (identifier "SCARRY4") (argument_list "(iVar8,1)" (( "(") (identifier "iVar8") (, ",") (number_literal "1") () ")")))) (; ";")) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar15 != iVar8 < 0)" (( "(") (binary_expression "bVar15 != iVar8 < 0" (identifier "bVar15") (!= "!=") (binary_expression "iVar8 < 0" (identifier "iVar8") (< "<") (number_literal "0"))) () ")")) (; ";")) (expression_statement "*puVar14 = uVar11;" (assignment_expression "*puVar14 = uVar11" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar11 = param_2[param_3 - 1];" (assignment_expression "uVar11 = param_2[param_3 - 1]" (identifier "uVar11") (= "=") (subscript_expression "param_2[param_3 - 1]" (identifier "param_2") ([ "[") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) (] "]"))) (; ";")) (expression_statement "uVar4 = param_2[param_3 - 2];" (assignment_expression "uVar4 = param_2[param_3 - 2]" (identifier "uVar4") (= "=") (subscript_expression "param_2[param_3 - 2]" (identifier "param_2") ([ "[") (binary_expression "param_3 - 2" (identifier "param_3") (- "-") (number_literal "2")) (] "]"))) (; ";")) (expression_statement "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);" (assignment_expression "uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4)" (identifier "uVar5") (= "=") (call_expression "(uint)((ulonglong)uVar11 * (ulonglong)uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)uVar11 * (ulonglong)uVar4)" (( "(") (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar11")) (* "*") (cast_expression "(ulonglong)uVar4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar4"))) () ")")))) (; ";")) (expression_statement "uVar10 = *puVar14;" (assignment_expression "uVar10 = *puVar14" (identifier "uVar10") (= "=") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) (; ";")) (expression_statement "*puVar14 = *puVar14 + uVar5;" (assignment_expression "*puVar14 = *puVar14 + uVar5" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (binary_expression "*puVar14 + uVar5" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (+ "+") (identifier "uVar5"))) (; ";")) (expression_statement "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);" (assignment_expression "puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (subscript_expression "puVar14[1]" (identifier "puVar14") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5)" (cast_expression "(int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20" (binary_expression "(ulonglong)uVar11 * (ulonglong)uVar4" (cast_expression "(ulonglong)uVar11" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar11")) (* "*") (cast_expression "(ulonglong)uVar4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar4"))) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (cast_expression "(uint)CARRY4(uVar10,uVar5)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar10,uVar5)" (identifier "CARRY4") (argument_list "(uVar10,uVar5)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar5") () ")")))))) (; ";")) (expression_statement "bVar15 = 0xfffffffe < -param_3;" (assignment_expression "bVar15 = 0xfffffffe < -param_3" (identifier "bVar15") (= "=") (binary_expression "0xfffffffe < -param_3" (number_literal "0xfffffffe") (< "<") (unary_expression "-param_3" (- "-") (identifier "param_3")))) (; ";")) (expression_statement "iVar7 = -param_3 + 1;" (assignment_expression "iVar7 = -param_3 + 1" (identifier "iVar7") (= "=") (binary_expression "-param_3 + 1" (unary_expression "-param_3" (- "-") (identifier "param_3")) (+ "+") (number_literal "1"))) (; ";")) (do_statement "do {\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" (do "do") (compound_statement "{\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar10 = *puVar1;\n    *puVar1 = *puVar1 << 1 | (uint)bVar15;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    bVar15 = (int)*puVar1 < 0;\n    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);\n    iVar7 = iVar7 + 1;\n  }" ({ "{") (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" (identifier "puVar1") (= "=") (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" (identifier "puVar14") (+ "+") (binary_expression "iVar7 * 2" (identifier "iVar7") (* "*") (number_literal "2"))) (+ "+") (number_literal "2"))) (; ";")) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" (identifier "uVar10") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)bVar15;" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)bVar15" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "*puVar1 << 1 | (uint)bVar15" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (<< "<<") (number_literal "1")) (| "|") (cast_expression "(uint)bVar15" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar15")))) (; ";")) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" (identifier "puVar1") (= "=") (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" (identifier "puVar14") (+ "+") (binary_expression "iVar7 * 2" (identifier "iVar7") (* "*") (number_literal "2"))) (+ "+") (number_literal "3"))) (; ";")) (expression_statement "bVar15 = (int)*puVar1 < 0;" (assignment_expression "bVar15 = (int)*puVar1 < 0" (identifier "bVar15") (= "=") (binary_expression "(int)*puVar1 < 0" (cast_expression "(int)*puVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (< "<") (number_literal "0"))) (; ";")) (expression_statement "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);" (assignment_expression "*puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0)" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "*puVar1 << 1 | (uint)((int)uVar10 < 0)" (binary_expression "*puVar1 << 1" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (<< "<<") (number_literal "1")) (| "|") (call_expression "(uint)((int)uVar10 < 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)uVar10 < 0)" (( "(") (binary_expression "(int)uVar10 < 0" (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10")) (< "<") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "puVar14[2] = (uint)bVar15;" (assignment_expression "puVar14[2] = (uint)bVar15" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(uint)bVar15" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar15"))) (; ";")) (expression_statement "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;" (assignment_expression "lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)*param_2 * (ulonglong)*param_2" (binary_expression "(ulonglong)*param_2 * (ulonglong)" (binary_expression "(ulonglong)*param_2" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "param_2")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "param_2"))) (; ";")) (expression_statement "uVar10 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)lVar2 >> 0x20)" (identifier "uVar10") (= "=") (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "puVar14[param_3 * -2 + 3] = (uint)lVar2;" (assignment_expression "puVar14[param_3 * -2 + 3] = (uint)lVar2" (subscript_expression "puVar14[param_3 * -2 + 3]" (identifier "puVar14") ([ "[") (binary_expression "param_3 * -2 + 3" (binary_expression "param_3 * -2" (identifier "param_3") (* "*") (number_literal "-2")) (+ "+") (number_literal "3")) (] "]")) (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "iVar7 = 1 - param_3;" (assignment_expression "iVar7 = 1 - param_3" (identifier "iVar7") (= "=") (binary_expression "1 - param_3" (number_literal "1") (- "-") (identifier "param_3"))) (; ";")) (do_statement "do {\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  } while (iVar7 != 0);" (do "do") (compound_statement "{\n    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];\n    uVar6 = (uint)lVar2;\n    puVar1 = puVar14 + iVar7 * 2 + 2;\n    uVar11 = *puVar1;\n    *puVar1 = *puVar1 + uVar10;\n    puVar1 = puVar14 + iVar7 * 2 + 3;\n    uVar4 = *puVar1;\n    uVar5 = *puVar1 + uVar6;\n    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);\n    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));\n    iVar7 = iVar7 + 1;\n  }" ({ "{") (expression_statement "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];" (assignment_expression "lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7]" (cast_expression "(ulonglong)param_2[param_3 + iVar7]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[param_3 + iVar7]" (identifier "param_2") ([ "[") (binary_expression "param_3 + iVar7" (identifier "param_3") (+ "+") (identifier "iVar7")) (] "]"))) (* "*") (cast_expression "(ulonglong)param_2[param_3 + iVar7]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "param_2[param_3 + iVar7]" (identifier "param_2") ([ "[") (binary_expression "param_3 + iVar7" (identifier "param_3") (+ "+") (identifier "iVar7")) (] "]"))))) (; ";")) (expression_statement "uVar6 = (uint)lVar2;" (assignment_expression "uVar6 = (uint)lVar2" (identifier "uVar6") (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 2;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 2" (identifier "puVar1") (= "=") (binary_expression "puVar14 + iVar7 * 2 + 2" (binary_expression "puVar14 + iVar7 * 2" (identifier "puVar14") (+ "+") (binary_expression "iVar7 * 2" (identifier "iVar7") (* "*") (number_literal "2"))) (+ "+") (number_literal "2"))) (; ";")) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" (identifier "uVar11") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "*puVar1 = *puVar1 + uVar10;" (assignment_expression "*puVar1 = *puVar1 + uVar10" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "*puVar1 + uVar10" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (+ "+") (identifier "uVar10"))) (; ";")) (expression_statement "puVar1 = puVar14 + iVar7 * 2 + 3;" (assignment_expression "puVar1 = puVar14 + iVar7 * 2 + 3" (identifier "puVar1") (= "=") (binary_expression "puVar14 + iVar7 * 2 + 3" (binary_expression "puVar14 + iVar7 * 2" (identifier "puVar14") (+ "+") (binary_expression "iVar7 * 2" (identifier "iVar7") (* "*") (number_literal "2"))) (+ "+") (number_literal "3"))) (; ";")) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" (identifier "uVar4") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "uVar5 = *puVar1 + uVar6;" (assignment_expression "uVar5 = *puVar1 + uVar6" (identifier "uVar5") (= "=") (binary_expression "*puVar1 + uVar6" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (+ "+") (identifier "uVar6"))) (; ";")) (expression_statement "*puVar1 = uVar5 + CARRY4(uVar11,uVar10);" (assignment_expression "*puVar1 = uVar5 + CARRY4(uVar11,uVar10)" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "uVar5 + CARRY4(uVar11,uVar10)" (identifier "uVar5") (+ "+") (call_expression "CARRY4(uVar11,uVar10)" (identifier "CARRY4") (argument_list "(uVar11,uVar10)" (( "(") (identifier "uVar11") (, ",") (identifier "uVar10") () ")"))))) (; ";")) (expression_statement "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));" (assignment_expression "uVar10 = (int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (identifier "uVar10") (= "=") (binary_expression "(int)((ulonglong)lVar2 >> 0x20) +\n             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (call_expression "(uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)))" (( "(") (binary_expression "CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" (call_expression "CARRY4(uVar4,uVar6)" (identifier "CARRY4") (argument_list "(uVar4,uVar6)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar6") () ")"))) (|| "||") (call_expression "CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10))" (identifier "CARRY4") (argument_list "(uVar5,(uint)CARRY4(uVar11,uVar10))" (( "(") (identifier "uVar5") (, ",") (cast_expression "(uint)CARRY4(uVar11,uVar10)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar11,uVar10)" (identifier "CARRY4") (argument_list "(uVar11,uVar10)" (( "(") (identifier "uVar11") (, ",") (identifier "uVar10") () ")")))) () ")")))) () ")"))))) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "puVar14[2] = puVar14[2] + uVar10;" (assignment_expression "puVar14[2] = puVar14[2] + uVar10" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "puVar14[2] + uVar10" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (+ "+") (identifier "uVar10"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *var_11,type_2 *var_2,type_2 var_1)

{
  type_2 *puVar1;
  type_1 lVar2;
  type_2 var_4;
  type_2 var_8;
  type_2 var_12;
  type_2 var_6;
  int var_14;
  int var_16;
  type_2 var_7;
  type_2 var_3;
  type_2 var_13;
  type_2 var_10;
  type_2 var_9;
  type_2 *var_15;
  bool var_18;
  
  if (var_1 == 2) {
    lVar2 = (type_3)*var_2 * (type_3)*var_2;
    var_3 = (type_2)((type_3)lVar2 >> 0x20);
    *(int *)var_11 = (int)lVar2;
    lVar2 = (type_3)var_2[1] * (type_3)var_2[1];
    var_6 = (type_2)lVar2;
    var_7 = (type_2)((type_3)*var_2 * (type_3)var_2[1] >> 0x20);
    var_4 = (type_2)((type_3)*var_2 * (type_3)var_2[1]);
    var_10 = var_3 + var_4;
    var_3 = (type_2)var_5(var_3,var_4);
    var_8 = var_6 + var_7;
    var_9 = var_8 + var_3;
    var_13 = (type_2)var_5(var_4,var_10);
    var_12 = var_7 + var_9;
    *(type_2 *)((int)var_11 + 4) = var_4 + var_10;
    *(type_2 *)(var_11 + 1) = var_12 + var_13;
    *(type_2 *)((int)var_11 + 0xc) =
         (int)((type_3)lVar2 >> 0x20) + (type_2)(var_5(var_6,var_7) || var_5(var_8,var_3)) +
         (type_2)(var_5(var_7,var_9) || var_5(var_12,var_13));
    return;
  }
  if (var_1 < 3) {
    *var_11 = (type_3)*var_2 * (type_3)*var_2;
    return;
  }
  var_15 = (type_2 *)((int)var_11 + var_1 * 4);
  var_3 = *var_2;
  var_13 = 0;
  var_14 = 1 - var_1;
  do {
    lVar2 = (type_3)var_2[var_1 + var_14] * (type_3)var_3 + (type_3)var_13;
    var_13 = (type_2)((type_3)lVar2 >> 0x20);
    var_15[var_14] = (type_2)lVar2;
    var_14 = var_14 + 1;
  } while (var_14 != 0);
  *var_15 = var_13;
  if (var_1 - 3 != 0) {
    var_14 = -(var_1 - 3);
    do {
      var_15 = var_15 + 1;
      var_3 = var_2[var_1 + var_14 + -2];
      var_16 = var_14 + -1;
      var_13 = 0;
      do {
        lVar2 = (type_3)var_2[var_1 + var_16] * (type_3)var_3 + (type_3)var_13;
        var_8 = (type_2)lVar2;
        puVar1 = var_15 + var_16;
        var_13 = *puVar1;
        *puVar1 = *puVar1 + var_8;
        var_13 = (int)((type_3)lVar2 >> 0x20) + (type_2)var_5(var_13,var_8);
        var_18 = var_17(var_16,1);
        var_16 = var_16 + 1;
      } while (var_18 != var_16 < 0);
      *var_15 = var_13;
      var_14 = var_14 + 1;
    } while (var_14 != 0);
  }
  var_13 = var_2[var_1 - 1];
  var_8 = var_2[var_1 - 2];
  var_12 = (type_2)((type_3)var_13 * (type_3)var_8);
  var_3 = *var_15;
  *var_15 = *var_15 + var_12;
  var_15[1] = (int)((type_3)var_13 * (type_3)var_8 >> 0x20) + (type_2)var_5(var_3,var_12);
  var_18 = 0xfffffffe < -var_1;
  var_14 = -var_1 + 1;
  do {
    puVar1 = var_15 + var_14 * 2 + 2;
    var_3 = *puVar1;
    *puVar1 = *puVar1 << 1 | (type_2)var_18;
    puVar1 = var_15 + var_14 * 2 + 3;
    var_18 = (int)*puVar1 < 0;
    *puVar1 = *puVar1 << 1 | (type_2)((int)var_3 < 0);
    var_14 = var_14 + 1;
  } while (var_14 != 0);
  var_15[2] = (type_2)var_18;
  lVar2 = (type_3)*var_2 * (type_3)*var_2;
  var_3 = (type_2)((type_3)lVar2 >> 0x20);
  var_15[var_1 * -2 + 3] = (type_2)lVar2;
  var_14 = 1 - var_1;
  do {
    lVar2 = (type_3)var_2[var_1 + var_14] * (type_3)var_2[var_1 + var_14];
    var_6 = (type_2)lVar2;
    puVar1 = var_15 + var_14 * 2 + 2;
    var_13 = *puVar1;
    *puVar1 = *puVar1 + var_3;
    puVar1 = var_15 + var_14 * 2 + 3;
    var_8 = *puVar1;
    var_12 = *puVar1 + var_6;
    *puVar1 = var_12 + var_5(var_13,var_3);
    var_3 = (int)((type_3)lVar2 >> 0x20) +
             (type_2)(var_5(var_8,var_6) || var_5(var_12,(type_2)var_5(var_13,var_3)));
    var_14 = var_14 + 1;
  } while (var_14 != 0);
  var_15[2] = var_15[2] + var_3;
  return;
}


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

void MASKED(longlong *param_1,uint *param_2,uint param_3)

{
  uint *puVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint *puVar14;
  bool bVar15;
  
  if (param_3 == 2) {
    lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;
    uVar10 = (uint)((ulonglong)lVar2 >> 0x20);
    *(int *)param_1 = (int)lVar2;
    lVar2 = (ulonglong)param_2[1] * (ulonglong)param_2[1];
    uVar6 = (uint)lVar2;
    uVar9 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1] >> 0x20);
    uVar3 = (uint)((ulonglong)*param_2 * (ulonglong)param_2[1]);
    uVar12 = uVar10 + uVar3;
    uVar10 = (uint)CARRY4(uVar10,uVar3);
    uVar4 = uVar6 + uVar9;
    uVar13 = uVar4 + uVar10;
    uVar11 = (uint)CARRY4(uVar3,uVar12);
    uVar5 = uVar9 + uVar13;
    *(uint *)((int)param_1 + 4) = uVar3 + uVar12;
    *(uint *)(param_1 + 1) = uVar5 + uVar11;
    *(uint *)((int)param_1 + 0xc) =
         (int)((ulonglong)lVar2 >> 0x20) + (uint)(CARRY4(uVar6,uVar9) || CARRY4(uVar4,uVar10)) +
         (uint)(CARRY4(uVar9,uVar13) || CARRY4(uVar5,uVar11));
    return;
  }
  if (param_3 < 3) {
    *param_1 = (ulonglong)*param_2 * (ulonglong)*param_2;
    return;
  }
  puVar14 = (uint *)((int)param_1 + param_3 * 4);
  uVar10 = *param_2;
  uVar11 = 0;
  iVar7 = 1 - param_3;
  do {
    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)uVar10 + (ulonglong)uVar11;
    uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
    puVar14[iVar7] = (uint)lVar2;
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  *puVar14 = uVar11;
  if (param_3 - 3 != 0) {
    iVar7 = -(param_3 - 3);
    do {
      puVar14 = puVar14 + 1;
      uVar10 = param_2[param_3 + iVar7 + -2];
      iVar8 = iVar7 + -1;
      uVar11 = 0;
      do {
        lVar2 = (ulonglong)param_2[param_3 + iVar8] * (ulonglong)uVar10 + (ulonglong)uVar11;
        uVar4 = (uint)lVar2;
        puVar1 = puVar14 + iVar8;
        uVar11 = *puVar1;
        *puVar1 = *puVar1 + uVar4;
        uVar11 = (int)((ulonglong)lVar2 >> 0x20) + (uint)CARRY4(uVar11,uVar4);
        bVar15 = SCARRY4(iVar8,1);
        iVar8 = iVar8 + 1;
      } while (bVar15 != iVar8 < 0);
      *puVar14 = uVar11;
      iVar7 = iVar7 + 1;
    } while (iVar7 != 0);
  }
  uVar11 = param_2[param_3 - 1];
  uVar4 = param_2[param_3 - 2];
  uVar5 = (uint)((ulonglong)uVar11 * (ulonglong)uVar4);
  uVar10 = *puVar14;
  *puVar14 = *puVar14 + uVar5;
  puVar14[1] = (int)((ulonglong)uVar11 * (ulonglong)uVar4 >> 0x20) + (uint)CARRY4(uVar10,uVar5);
  bVar15 = 0xfffffffe < -param_3;
  iVar7 = -param_3 + 1;
  do {
    puVar1 = puVar14 + iVar7 * 2 + 2;
    uVar10 = *puVar1;
    *puVar1 = *puVar1 << 1 | (uint)bVar15;
    puVar1 = puVar14 + iVar7 * 2 + 3;
    bVar15 = (int)*puVar1 < 0;
    *puVar1 = *puVar1 << 1 | (uint)((int)uVar10 < 0);
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  puVar14[2] = (uint)bVar15;
  lVar2 = (ulonglong)*param_2 * (ulonglong)*param_2;
  uVar10 = (uint)((ulonglong)lVar2 >> 0x20);
  puVar14[param_3 * -2 + 3] = (uint)lVar2;
  iVar7 = 1 - param_3;
  do {
    lVar2 = (ulonglong)param_2[param_3 + iVar7] * (ulonglong)param_2[param_3 + iVar7];
    uVar6 = (uint)lVar2;
    puVar1 = puVar14 + iVar7 * 2 + 2;
    uVar11 = *puVar1;
    *puVar1 = *puVar1 + uVar10;
    puVar1 = puVar14 + iVar7 * 2 + 3;
    uVar4 = *puVar1;
    uVar5 = *puVar1 + uVar6;
    *puVar1 = uVar5 + CARRY4(uVar11,uVar10);
    uVar10 = (int)((ulonglong)lVar2 >> 0x20) +
             (uint)(CARRY4(uVar4,uVar6) || CARRY4(uVar5,(uint)CARRY4(uVar11,uVar10)));
    iVar7 = iVar7 + 1;
  } while (iVar7 != 0);
  puVar14[2] = puVar14[2] + uVar10;
  return;
}

