
/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */
/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  bool bVar6;
  
  uVar1 = *param_1 | param_3;
  bVar3 = 0xff;
  do {
    bVar3 = bVar3 + 1;
    uVar5 = uVar1 & 1;
    uVar1 = uVar1 >> 1;
  } while (uVar5 == 0);
  param_3 = param_3 >> (bVar3 & 0x1f);
  do {
    bVar6 = (param_3 & 1) != 0;
    param_3 = param_3 >> 1;
  } while (!bVar6);
  uVar1 = param_3 * 2 + (uint)bVar6;
  if (param_2 == 1) {
    uVar5 = *param_1;
    if (uVar1 <= uVar5 >> 7) {
      uVar5 = uVar5 % uVar1;
    }
  }
  else if (param_2 < 0x18) {
    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);
  }
  else {
    uVar5 = __gmpn_mod_1();
  }
  uVar4 = uVar5;
  if (uVar5 != 0) {
    while( true ) {
      while ((uVar4 & 0x3f) == 0) {
        uVar5 = uVar5 >> 6;
        uVar4 = uVar5;
      }
      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);
      uVar4 = uVar1 - uVar2;
      if (uVar2 - uVar1 == 0) break;
      uVar5 = uVar2 - uVar1;
      if (uVar2 < uVar1) {
        uVar5 = uVar4;
        uVar1 = uVar2;
      }
    }
  }
  return uVar1 << (bVar3 & 0x1f);
}



/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */
/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  bool bVar6;
  
  uVar1 = *param_1 | param_3;
  bVar3 = 0xff;
  do {
    bVar3 = bVar3 + 1;
    uVar5 = uVar1 & 1;
    uVar1 = uVar1 >> 1;
  } while (uVar5 == 0);
  param_3 = param_3 >> (bVar3 & 0x1f);
  do {
    bVar6 = (param_3 & 1) != 0;
    param_3 = param_3 >> 1;
  } while (!bVar6);
  uVar1 = param_3 * 2 + (uint)bVar6;
  if (param_2 == 1) {
    uVar5 = *param_1;
    if (uVar1 <= uVar5 >> 7) {
      uVar5 = uVar5 % uVar1;
    }
  }
  else if (param_2 < 0x18) {
    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);
  }
  else {
    uVar5 = __gmpn_mod_1();
  }
  uVar4 = uVar5;
  if (uVar5 != 0) {
    while( true ) {
      while ((uVar4 & 0x3f) == 0) {
        uVar5 = uVar5 >> 6;
        uVar4 = uVar5;
      }
      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);
      uVar4 = uVar1 - uVar2;
      if (uVar2 - uVar1 == 0) break;
      uVar5 = uVar2 - uVar1;
      if (uVar2 < uVar1) {
        uVar5 = uVar4;
        uVar1 = uVar2;
      }
    }
  }
  return uVar1 << (bVar3 & 0x1f);
}


PUSH EDI
PUSH ESI
MOV EDI,dword ptr [ESP + 0xc]
MOV ESI,dword ptr [ESP + 0x10]
MOV EDX,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [EDI]
OR EAX,EDX
MOV ECX,0xffffffff
INC ECX
SHR EAX,0x1
JNC 0x0003a6a7
SHR EDX,CL
MOV EAX,ECX
SHR EDX,0x1
JNC 0x0003a6b0
ADC EDX,EDX
PUSH EAX
PUSH EDX
CMP ESI,0x1
JNZ 0x0003a6d2
MOV ECX,dword ptr [EDI]
MOV EAX,ECX
SHR ECX,0x7
CMP EDX,ECX
JA 0x0003a6f9
MOV ESI,EDX
XOR EDX,EDX
DIV ESI
MOV EAX,EDX
JMP 0x0003a6f9
PUSH EBX
ADD ESP,-0x4
CALL 0x0003a74a
ADD EBX,0x63925
PUSH EDX
PUSH ESI
PUSH EDI
CMP ESI,0x18
JL 0x0003a6f0
CALL 0x0001b4c0
JMP 0x0003a6f5
CALL 0x0001b9d0
ADD ESP,0x10
POP EBX
POP EDX
CALL 0x0003a750
ADD ESI,0x63901
LEA ESI,[ESI + 0xfffe2c40]
TEST EAX,EAX
MOV ECX,EAX
JNZ 0x0003a726
JMP 0x0003a73b
CMOVC EAX,ECX
CMOVC EDX,EDI
AND ECX,0x3f
MOVZX ECX,byte ptr [ESI + ECX*0x1]
JZ 0x0003a743
SHR EAX,CL
MOV EDI,EAX
MOV ECX,EDX
SUB ECX,EAX
SUB EAX,EDX
JNZ 0x0003a720
POP ECX
MOV EAX,EDX
SHL EAX,CL
POP ESI
POP EDI
RET
SHR EAX,0x6
MOV ECX,EAX
JMP 0x0003a726
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}\n\n" comment comment (function_definition "int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" primitive_type (function_declarator "__gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)" identifier (parameter_list "(uint *param_1,int param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (expression_statement "uVar1 = *param_1 | param_3;" (assignment_expression "uVar1 = *param_1 | param_3" identifier = (binary_expression "*param_1 | param_3" (pointer_expression "*param_1" * identifier) | identifier)) ;) (expression_statement "bVar3 = 0xff;" (assignment_expression "bVar3 = 0xff" identifier = number_literal) ;) (do_statement "do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);" do (compound_statement "{\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  }" { (expression_statement "bVar3 = bVar3 + 1;" (assignment_expression "bVar3 = bVar3 + 1" identifier = (binary_expression "bVar3 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar1 & 1;" (assignment_expression "uVar5 = uVar1 & 1" identifier = (binary_expression "uVar1 & 1" identifier & number_literal)) ;) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" identifier = (binary_expression "uVar1 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) ;) (expression_statement "param_3 = param_3 >> (bVar3 & 0x1f);" (assignment_expression "param_3 = param_3 >> (bVar3 & 0x1f)" identifier = (binary_expression "param_3 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (do_statement "do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);" do (compound_statement "{\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  }" { (expression_statement "bVar6 = (param_3 & 1) != 0;" (assignment_expression "bVar6 = (param_3 & 1) != 0" identifier = (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal)) ;) (expression_statement "param_3 = param_3 >> 1;" (assignment_expression "param_3 = param_3 >> 1" identifier = (binary_expression "param_3 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) )) ;) (expression_statement "uVar1 = param_3 * 2 + (uint)bVar6;" (assignment_expression "uVar1 = param_3 * 2 + (uint)bVar6" identifier = (binary_expression "param_3 * 2 + (uint)bVar6" (binary_expression "param_3 * 2" identifier * number_literal) + (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" if (parenthesized_expression "(param_2 == 1)" ( (binary_expression "param_2 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }" { (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }" if (parenthesized_expression "(uVar1 <= uVar5 >> 7)" ( (binary_expression "uVar1 <= uVar5 >> 7" identifier <= (binary_expression "uVar5 >> 7" identifier >> number_literal)) )) (compound_statement "{\n      uVar5 = uVar5 % uVar1;\n    }" { (expression_statement "uVar5 = uVar5 % uVar1;" (assignment_expression "uVar5 = uVar5 % uVar1" identifier = (binary_expression "uVar5 % uVar1" identifier % identifier)) ;) })) }) (else_clause "else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" else (if_statement "if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" if (parenthesized_expression "(param_2 < 0x18)" ( (binary_expression "param_2 < 0x18" identifier < number_literal) )) (compound_statement "{\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }" { (expression_statement "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);" (assignment_expression "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" identifier = (call_expression "__gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" identifier (argument_list "(param_1,param_2,uVar1)" ( identifier , identifier , identifier )))) ;) }) (else_clause "else {\n    uVar5 = __gmpn_mod_1();\n  }" else (compound_statement "{\n    uVar5 = __gmpn_mod_1();\n  }" { (expression_statement "uVar5 = __gmpn_mod_1();" (assignment_expression "uVar5 = __gmpn_mod_1()" identifier = (call_expression "__gmpn_mod_1()" identifier (argument_list "()" ( )))) ;) }))))) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" { (while_statement "while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" { (while_statement "while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" while (parenthesized_expression "((uVar4 & 0x3f) == 0)" ( (binary_expression "(uVar4 & 0x3f) == 0" (parenthesized_expression "(uVar4 & 0x3f)" ( (binary_expression "uVar4 & 0x3f" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" { (expression_statement "uVar5 = uVar5 >> 6;" (assignment_expression "uVar5 = uVar5 >> 6" identifier = (binary_expression "uVar5 >> 6" identifier >> number_literal)) ;) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) })) (expression_statement "uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);" (assignment_expression "uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" identifier = (binary_expression "uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" identifier >> (parenthesized_expression "((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" ( (binary_expression "(&DAT_00080c40)[uVar4 & 0x3f] & 0x1f" (subscript_expression "(&DAT_00080c40)[uVar4 & 0x3f]" (parenthesized_expression "(&DAT_00080c40)" ( (pointer_expression "&DAT_00080c40" & identifier) )) [ (binary_expression "uVar4 & 0x3f" identifier & number_literal) ]) & number_literal) )))) ;) (expression_statement "uVar4 = uVar1 - uVar2;" (assignment_expression "uVar4 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (uVar2 - uVar1 == 0) break;" if (parenthesized_expression "(uVar2 - uVar1 == 0)" ( (binary_expression "uVar2 - uVar1 == 0" (binary_expression "uVar2 - uVar1" identifier - identifier) == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = uVar2 - uVar1;" (assignment_expression "uVar5 = uVar2 - uVar1" identifier = (binary_expression "uVar2 - uVar1" identifier - identifier)) ;) (if_statement "if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (compound_statement "{\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" { (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) })) })) (return_statement "return uVar1 << (bVar3 & 0x1f);" return (binary_expression "uVar1 << (bVar3 & 0x1f)" identifier << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) ;) })))
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}\n\n" comment comment (function_definition "int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" primitive_type (function_declarator "__gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)" identifier (parameter_list "(uint *param_1,int param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (expression_statement "uVar1 = *param_1 | param_3;" (assignment_expression "uVar1 = *param_1 | param_3" identifier = (binary_expression "*param_1 | param_3" (pointer_expression "*param_1" * identifier) | identifier)) ;) (expression_statement "bVar3 = 0xff;" (assignment_expression "bVar3 = 0xff" identifier = number_literal) ;) (do_statement "do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);" do (compound_statement "{\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  }" { (expression_statement "bVar3 = bVar3 + 1;" (assignment_expression "bVar3 = bVar3 + 1" identifier = (binary_expression "bVar3 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar1 & 1;" (assignment_expression "uVar5 = uVar1 & 1" identifier = (binary_expression "uVar1 & 1" identifier & number_literal)) ;) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" identifier = (binary_expression "uVar1 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) ;) (expression_statement "param_3 = param_3 >> (bVar3 & 0x1f);" (assignment_expression "param_3 = param_3 >> (bVar3 & 0x1f)" identifier = (binary_expression "param_3 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (do_statement "do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);" do (compound_statement "{\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  }" { (expression_statement "bVar6 = (param_3 & 1) != 0;" (assignment_expression "bVar6 = (param_3 & 1) != 0" identifier = (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal)) ;) (expression_statement "param_3 = param_3 >> 1;" (assignment_expression "param_3 = param_3 >> 1" identifier = (binary_expression "param_3 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) )) ;) (expression_statement "uVar1 = param_3 * 2 + (uint)bVar6;" (assignment_expression "uVar1 = param_3 * 2 + (uint)bVar6" identifier = (binary_expression "param_3 * 2 + (uint)bVar6" (binary_expression "param_3 * 2" identifier * number_literal) + (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" if (parenthesized_expression "(param_2 == 1)" ( (binary_expression "param_2 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }" { (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }" if (parenthesized_expression "(uVar1 <= uVar5 >> 7)" ( (binary_expression "uVar1 <= uVar5 >> 7" identifier <= (binary_expression "uVar5 >> 7" identifier >> number_literal)) )) (compound_statement "{\n      uVar5 = uVar5 % uVar1;\n    }" { (expression_statement "uVar5 = uVar5 % uVar1;" (assignment_expression "uVar5 = uVar5 % uVar1" identifier = (binary_expression "uVar5 % uVar1" identifier % identifier)) ;) })) }) (else_clause "else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" else (if_statement "if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" if (parenthesized_expression "(param_2 < 0x18)" ( (binary_expression "param_2 < 0x18" identifier < number_literal) )) (compound_statement "{\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }" { (expression_statement "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);" (assignment_expression "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" identifier = (call_expression "__gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" identifier (argument_list "(param_1,param_2,uVar1)" ( identifier , identifier , identifier )))) ;) }) (else_clause "else {\n    uVar5 = __gmpn_mod_1();\n  }" else (compound_statement "{\n    uVar5 = __gmpn_mod_1();\n  }" { (expression_statement "uVar5 = __gmpn_mod_1();" (assignment_expression "uVar5 = __gmpn_mod_1()" identifier = (call_expression "__gmpn_mod_1()" identifier (argument_list "()" ( )))) ;) }))))) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" { (while_statement "while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" { (while_statement "while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" while (parenthesized_expression "((uVar4 & 0x3f) == 0)" ( (binary_expression "(uVar4 & 0x3f) == 0" (parenthesized_expression "(uVar4 & 0x3f)" ( (binary_expression "uVar4 & 0x3f" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" { (expression_statement "uVar5 = uVar5 >> 6;" (assignment_expression "uVar5 = uVar5 >> 6" identifier = (binary_expression "uVar5 >> 6" identifier >> number_literal)) ;) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) })) (expression_statement "uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f);" (assignment_expression "uVar2 = uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f)" identifier = (binary_expression "uVar5 >> ((&ctz_table)[uVar4 & 0x3f] & 0x1f)" identifier >> (parenthesized_expression "((&ctz_table)[uVar4 & 0x3f] & 0x1f)" ( (binary_expression "(&ctz_table)[uVar4 & 0x3f] & 0x1f" (subscript_expression "(&ctz_table)[uVar4 & 0x3f]" (parenthesized_expression "(&ctz_table)" ( (pointer_expression "&ctz_table" & identifier) )) [ (binary_expression "uVar4 & 0x3f" identifier & number_literal) ]) & number_literal) )))) ;) (expression_statement "uVar4 = uVar1 - uVar2;" (assignment_expression "uVar4 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (uVar2 - uVar1 == 0) break;" if (parenthesized_expression "(uVar2 - uVar1 == 0)" ( (binary_expression "uVar2 - uVar1 == 0" (binary_expression "uVar2 - uVar1" identifier - identifier) == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = uVar2 - uVar1;" (assignment_expression "uVar5 = uVar2 - uVar1" identifier = (binary_expression "uVar2 - uVar1" identifier - identifier)) ;) (if_statement "if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (compound_statement "{\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" { (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) })) })) (return_statement "return uVar1 << (bVar3 & 0x1f);" return (binary_expression "uVar1 << (bVar3 & 0x1f)" identifier << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) ;) })))
(translation_unit "int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}\n\n" (function_definition "int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" primitive_type (function_declarator "__gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)" identifier (parameter_list "(uint *param_1,int param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (expression_statement "uVar1 = *param_1 | param_3;" (assignment_expression "uVar1 = *param_1 | param_3" identifier = (binary_expression "*param_1 | param_3" (pointer_expression "*param_1" * identifier) | identifier)) ;) (expression_statement "bVar3 = 0xff;" (assignment_expression "bVar3 = 0xff" identifier = number_literal) ;) (do_statement "do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);" do (compound_statement "{\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  }" { (expression_statement "bVar3 = bVar3 + 1;" (assignment_expression "bVar3 = bVar3 + 1" identifier = (binary_expression "bVar3 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar1 & 1;" (assignment_expression "uVar5 = uVar1 & 1" identifier = (binary_expression "uVar1 & 1" identifier & number_literal)) ;) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" identifier = (binary_expression "uVar1 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) ;) (expression_statement "param_3 = param_3 >> (bVar3 & 0x1f);" (assignment_expression "param_3 = param_3 >> (bVar3 & 0x1f)" identifier = (binary_expression "param_3 >> (bVar3 & 0x1f)" identifier >> (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (do_statement "do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);" do (compound_statement "{\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  }" { (expression_statement "bVar6 = (param_3 & 1) != 0;" (assignment_expression "bVar6 = (param_3 & 1) != 0" identifier = (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal)) ;) (expression_statement "param_3 = param_3 >> 1;" (assignment_expression "param_3 = param_3 >> 1" identifier = (binary_expression "param_3 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) )) ;) (expression_statement "uVar1 = param_3 * 2 + (uint)bVar6;" (assignment_expression "uVar1 = param_3 * 2 + (uint)bVar6" identifier = (binary_expression "param_3 * 2 + (uint)bVar6" (binary_expression "param_3 * 2" identifier * number_literal) + (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" if (parenthesized_expression "(param_2 == 1)" ( (binary_expression "param_2 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }" { (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }" if (parenthesized_expression "(uVar1 <= uVar5 >> 7)" ( (binary_expression "uVar1 <= uVar5 >> 7" identifier <= (binary_expression "uVar5 >> 7" identifier >> number_literal)) )) (compound_statement "{\n      uVar5 = uVar5 % uVar1;\n    }" { (expression_statement "uVar5 = uVar5 % uVar1;" (assignment_expression "uVar5 = uVar5 % uVar1" identifier = (binary_expression "uVar5 % uVar1" identifier % identifier)) ;) })) }) (else_clause "else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" else (if_statement "if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" if (parenthesized_expression "(param_2 < 0x18)" ( (binary_expression "param_2 < 0x18" identifier < number_literal) )) (compound_statement "{\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }" { (expression_statement "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);" (assignment_expression "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" identifier = (call_expression "__gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" identifier (argument_list "(param_1,param_2,uVar1)" ( identifier , identifier , identifier )))) ;) }) (else_clause "else {\n    uVar5 = __gmpn_mod_1();\n  }" else (compound_statement "{\n    uVar5 = __gmpn_mod_1();\n  }" { (expression_statement "uVar5 = __gmpn_mod_1();" (assignment_expression "uVar5 = __gmpn_mod_1()" identifier = (call_expression "__gmpn_mod_1()" identifier (argument_list "()" ( )))) ;) }))))) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" { (while_statement "while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" { (while_statement "while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" while (parenthesized_expression "((uVar4 & 0x3f) == 0)" ( (binary_expression "(uVar4 & 0x3f) == 0" (parenthesized_expression "(uVar4 & 0x3f)" ( (binary_expression "uVar4 & 0x3f" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" { (expression_statement "uVar5 = uVar5 >> 6;" (assignment_expression "uVar5 = uVar5 >> 6" identifier = (binary_expression "uVar5 >> 6" identifier >> number_literal)) ;) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) })) (expression_statement "uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);" (assignment_expression "uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" identifier = (binary_expression "uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" identifier >> (parenthesized_expression "((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" ( (binary_expression "(&DAT_00080c40)[uVar4 & 0x3f] & 0x1f" (subscript_expression "(&DAT_00080c40)[uVar4 & 0x3f]" (parenthesized_expression "(&DAT_00080c40)" ( (pointer_expression "&DAT_00080c40" & identifier) )) [ (binary_expression "uVar4 & 0x3f" identifier & number_literal) ]) & number_literal) )))) ;) (expression_statement "uVar4 = uVar1 - uVar2;" (assignment_expression "uVar4 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (uVar2 - uVar1 == 0) break;" if (parenthesized_expression "(uVar2 - uVar1 == 0)" ( (binary_expression "uVar2 - uVar1 == 0" (binary_expression "uVar2 - uVar1" identifier - identifier) == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = uVar2 - uVar1;" (assignment_expression "uVar5 = uVar2 - uVar1" identifier = (binary_expression "uVar2 - uVar1" identifier - identifier)) ;) (if_statement "if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (compound_statement "{\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" { (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) })) })) (return_statement "return uVar1 << (bVar3 & 0x1f);" return (binary_expression "uVar1 << (bVar3 & 0x1f)" identifier << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) | IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT == LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) }) while (parenthesized_expression ( (unary_expression ! IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (binary_expression IDENT >> LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT % IDENT)) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) }))))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression IDENT & LIT) ]) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) })) (return_statement return (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ;) })))
(function_definition "int __gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" (primitive_type "int") (function_declarator "__gmpn_gcd_1_k7(uint *param_1,int param_2,uint param_3)" (identifier "__gmpn_gcd_1_k7") (parameter_list "(uint *param_1,int param_2,uint param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  bool bVar6;\n  \n  uVar1 = *param_1 | param_3;\n  bVar3 = 0xff;\n  do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);\n  param_3 = param_3 >> (bVar3 & 0x1f);\n  do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);\n  uVar1 = param_3 * 2 + (uint)bVar6;\n  if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }\n  uVar4 = uVar5;\n  if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }\n  return uVar1 << (bVar3 & 0x1f);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "bool bVar6;" (primitive_type "bool") (identifier "bVar6") (; ";")) (expression_statement "uVar1 = *param_1 | param_3;" (assignment_expression "uVar1 = *param_1 | param_3" (identifier "uVar1") (= "=") (binary_expression "*param_1 | param_3" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (| "|") (identifier "param_3"))) (; ";")) (expression_statement "bVar3 = 0xff;" (assignment_expression "bVar3 = 0xff" (identifier "bVar3") (= "=") (number_literal "0xff")) (; ";")) (do_statement "do {\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  } while (uVar5 == 0);" (do "do") (compound_statement "{\n    bVar3 = bVar3 + 1;\n    uVar5 = uVar1 & 1;\n    uVar1 = uVar1 >> 1;\n  }" ({ "{") (expression_statement "bVar3 = bVar3 + 1;" (assignment_expression "bVar3 = bVar3 + 1" (identifier "bVar3") (= "=") (binary_expression "bVar3 + 1" (identifier "bVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = uVar1 & 1;" (assignment_expression "uVar5 = uVar1 & 1" (identifier "uVar5") (= "=") (binary_expression "uVar1 & 1" (identifier "uVar1") (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" (identifier "uVar1") (= "=") (binary_expression "uVar1 >> 1" (identifier "uVar1") (>> ">>") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (; ";")) (expression_statement "param_3 = param_3 >> (bVar3 & 0x1f);" (assignment_expression "param_3 = param_3 >> (bVar3 & 0x1f)" (identifier "param_3") (= "=") (binary_expression "param_3 >> (bVar3 & 0x1f)" (identifier "param_3") (>> ">>") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (do_statement "do {\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  } while (!bVar6);" (do "do") (compound_statement "{\n    bVar6 = (param_3 & 1) != 0;\n    param_3 = param_3 >> 1;\n  }" ({ "{") (expression_statement "bVar6 = (param_3 & 1) != 0;" (assignment_expression "bVar6 = (param_3 & 1) != 0" (identifier "bVar6") (= "=") (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0"))) (; ";")) (expression_statement "param_3 = param_3 >> 1;" (assignment_expression "param_3 = param_3 >> 1" (identifier "param_3") (= "=") (binary_expression "param_3 >> 1" (identifier "param_3") (>> ">>") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(!bVar6)" (( "(") (unary_expression "!bVar6" (! "!") (identifier "bVar6")) () ")")) (; ";")) (expression_statement "uVar1 = param_3 * 2 + (uint)bVar6;" (assignment_expression "uVar1 = param_3 * 2 + (uint)bVar6" (identifier "uVar1") (= "=") (binary_expression "param_3 * 2 + (uint)bVar6" (binary_expression "param_3 * 2" (identifier "param_3") (* "*") (number_literal "2")) (+ "+") (cast_expression "(uint)bVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar6")))) (; ";")) (if_statement "if (param_2 == 1) {\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }\n  else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" (if "if") (parenthesized_expression "(param_2 == 1)" (( "(") (binary_expression "param_2 == 1" (identifier "param_2") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    uVar5 = *param_1;\n    if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }\n  }" ({ "{") (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" (identifier "uVar5") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (uVar1 <= uVar5 >> 7) {\n      uVar5 = uVar5 % uVar1;\n    }" (if "if") (parenthesized_expression "(uVar1 <= uVar5 >> 7)" (( "(") (binary_expression "uVar1 <= uVar5 >> 7" (identifier "uVar1") (<= "<=") (binary_expression "uVar5 >> 7" (identifier "uVar5") (>> ">>") (number_literal "7"))) () ")")) (compound_statement "{\n      uVar5 = uVar5 % uVar1;\n    }" ({ "{") (expression_statement "uVar5 = uVar5 % uVar1;" (assignment_expression "uVar5 = uVar5 % uVar1" (identifier "uVar5") (= "=") (binary_expression "uVar5 % uVar1" (identifier "uVar5") (% "%") (identifier "uVar1"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" (else "else") (if_statement "if (param_2 < 0x18) {\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }\n  else {\n    uVar5 = __gmpn_mod_1();\n  }" (if "if") (parenthesized_expression "(param_2 < 0x18)" (( "(") (binary_expression "param_2 < 0x18" (identifier "param_2") (< "<") (number_literal "0x18")) () ")")) (compound_statement "{\n    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);\n  }" ({ "{") (expression_statement "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);" (assignment_expression "uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" (identifier "uVar5") (= "=") (call_expression "__gmpn_modexact_1_odd_k7(param_1,param_2,uVar1)" (identifier "__gmpn_modexact_1_odd_k7") (argument_list "(param_1,param_2,uVar1)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "uVar1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n    uVar5 = __gmpn_mod_1();\n  }" (else "else") (compound_statement "{\n    uVar5 = __gmpn_mod_1();\n  }" ({ "{") (expression_statement "uVar5 = __gmpn_mod_1();" (assignment_expression "uVar5 = __gmpn_mod_1()" (identifier "uVar5") (= "=") (call_expression "__gmpn_mod_1()" (identifier "__gmpn_mod_1") (argument_list "()" (( "(") () ")")))) (; ";")) (} "}")))))) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" (identifier "uVar4") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (uVar5 != 0) {\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }\n  }" ({ "{") (while_statement "while( true ) {\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }\n      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);\n      uVar4 = uVar1 - uVar2;\n      if (uVar2 - uVar1 == 0) break;\n      uVar5 = uVar2 - uVar1;\n      if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }\n    }" ({ "{") (while_statement "while ((uVar4 & 0x3f) == 0) {\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" (while "while") (parenthesized_expression "((uVar4 & 0x3f) == 0)" (( "(") (binary_expression "(uVar4 & 0x3f) == 0" (parenthesized_expression "(uVar4 & 0x3f)" (( "(") (binary_expression "uVar4 & 0x3f" (identifier "uVar4") (& "&") (number_literal "0x3f")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar5 = uVar5 >> 6;\n        uVar4 = uVar5;\n      }" ({ "{") (expression_statement "uVar5 = uVar5 >> 6;" (assignment_expression "uVar5 = uVar5 >> 6" (identifier "uVar5") (= "=") (binary_expression "uVar5 >> 6" (identifier "uVar5") (>> ">>") (number_literal "6"))) (; ";")) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" (identifier "uVar4") (= "=") (identifier "uVar5")) (; ";")) (} "}"))) (expression_statement "uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);" (assignment_expression "uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" (identifier "uVar2") (= "=") (binary_expression "uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" (identifier "uVar5") (>> ">>") (parenthesized_expression "((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f)" (( "(") (binary_expression "(&DAT_00080c40)[uVar4 & 0x3f] & 0x1f" (subscript_expression "(&DAT_00080c40)[uVar4 & 0x3f]" (parenthesized_expression "(&DAT_00080c40)" (( "(") (pointer_expression "&DAT_00080c40" (& "&") (identifier "DAT_00080c40")) () ")")) ([ "[") (binary_expression "uVar4 & 0x3f" (identifier "uVar4") (& "&") (number_literal "0x3f")) (] "]")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar4 = uVar1 - uVar2;" (assignment_expression "uVar4 = uVar1 - uVar2" (identifier "uVar4") (= "=") (binary_expression "uVar1 - uVar2" (identifier "uVar1") (- "-") (identifier "uVar2"))) (; ";")) (if_statement "if (uVar2 - uVar1 == 0) break;" (if "if") (parenthesized_expression "(uVar2 - uVar1 == 0)" (( "(") (binary_expression "uVar2 - uVar1 == 0" (binary_expression "uVar2 - uVar1" (identifier "uVar2") (- "-") (identifier "uVar1")) (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar5 = uVar2 - uVar1;" (assignment_expression "uVar5 = uVar2 - uVar1" (identifier "uVar5") (= "=") (binary_expression "uVar2 - uVar1" (identifier "uVar2") (- "-") (identifier "uVar1"))) (; ";")) (if_statement "if (uVar2 < uVar1) {\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" (if "if") (parenthesized_expression "(uVar2 < uVar1)" (( "(") (binary_expression "uVar2 < uVar1" (identifier "uVar2") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n        uVar5 = uVar4;\n        uVar1 = uVar2;\n      }" ({ "{") (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" (identifier "uVar5") (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" (identifier "uVar1") (= "=") (identifier "uVar2")) (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return uVar1 << (bVar3 & 0x1f);" (return "return") (binary_expression "uVar1 << (bVar3 & 0x1f)" (identifier "uVar1") (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */
/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int function_1(type_1 *param_1,int var_5,type_1 var_1)

{
  type_1 var_3;
  type_1 var_9;
  type_2 var_2;
  type_1 var_8;
  type_1 var_4;
  bool bVar6;
  
  var_3 = *param_1 | var_1;
  var_2 = 0xff;
  do {
    var_2 = var_2 + 1;
    var_4 = var_3 & 1;
    var_3 = var_3 >> 1;
  } while (var_4 == 0);
  var_1 = var_1 >> (var_2 & 0x1f);
  do {
    bVar6 = (var_1 & 1) != 0;
    var_1 = var_1 >> 1;
  } while (!bVar6);
  var_3 = var_1 * 2 + (type_1)bVar6;
  if (var_5 == 1) {
    var_4 = *param_1;
    if (var_3 <= var_4 >> 7) {
      var_4 = var_4 % var_3;
    }
  }
  else if (var_5 < 0x18) {
    var_4 = var_6(param_1,var_5,var_3);
  }
  else {
    var_4 = var_7();
  }
  var_8 = var_4;
  if (var_4 != 0) {
    while( true ) {
      while ((var_8 & 0x3f) == 0) {
        var_4 = var_4 >> 6;
        var_8 = var_4;
      }
      var_9 = var_4 >> ((&ctz_table)[var_8 & 0x3f] & 0x1f);
      var_8 = var_3 - var_9;
      if (var_9 - var_3 == 0) break;
      var_4 = var_9 - var_3;
      if (var_9 < var_3) {
        var_4 = var_8;
        var_3 = var_9;
      }
    }
  }
  return var_3 << (var_2 & 0x1f);
}


(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: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_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: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (unary_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (while_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))))) (return_statement (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))

/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */
/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int MASKED(uint *param_1,int param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  bool bVar6;
  
  uVar1 = *param_1 | param_3;
  bVar3 = 0xff;
  do {
    bVar3 = bVar3 + 1;
    uVar5 = uVar1 & 1;
    uVar1 = uVar1 >> 1;
  } while (uVar5 == 0);
  param_3 = param_3 >> (bVar3 & 0x1f);
  do {
    bVar6 = (param_3 & 1) != 0;
    param_3 = param_3 >> 1;
  } while (!bVar6);
  uVar1 = param_3 * 2 + (uint)bVar6;
  if (param_2 == 1) {
    uVar5 = *param_1;
    if (uVar1 <= uVar5 >> 7) {
      uVar5 = uVar5 % uVar1;
    }
  }
  else if (param_2 < 0x18) {
    uVar5 = __gmpn_modexact_1_odd_k7(param_1,param_2,uVar1);
  }
  else {
    uVar5 = __gmpn_mod_1();
  }
  uVar4 = uVar5;
  if (uVar5 != 0) {
    while( true ) {
      while ((uVar4 & 0x3f) == 0) {
        uVar5 = uVar5 >> 6;
        uVar4 = uVar5;
      }
      uVar2 = uVar5 >> ((&DAT_00080c40)[uVar4 & 0x3f] & 0x1f);
      uVar4 = uVar1 - uVar2;
      if (uVar2 - uVar1 == 0) break;
      uVar5 = uVar2 - uVar1;
      if (uVar2 < uVar1) {
        uVar5 = uVar4;
        uVar1 = uVar2;
      }
    }
  }
  return uVar1 << (bVar3 & 0x1f);
}

