
int __gmpn_jacobi_base(mp_limb_t a,mp_limb_t b,int result_bit1)

{
  bool bVar1;
  int two;
  mp_limb_t mVar2;
  uint uVar3;
  
  if (a == 0) {
    return 0;
  }
  if ((a & 1) == 0) {
    do {
      a = a >> 1;
      result_bit1 = result_bit1 ^ b >> 1 ^ b;
    } while ((a & 1) == 0);
  }
  if (a == 1) {
LAB_00053df0:
    return 1 - (result_bit1 & 2U);
  }
  mVar2 = b;
  if (b <= a) goto LAB_00053d8c;
  do {
    result_bit1 = result_bit1 ^ a & mVar2;
    b = a;
    a = mVar2;
LAB_00053d8c:
    uVar3 = a - b;
    do {
      if (uVar3 == 0) {
        return 0;
      }
      do {
        uVar3 = uVar3 >> 1;
        result_bit1 = result_bit1 ^ b >> 1 ^ b;
      } while ((uVar3 & 1) == 0);
      if (uVar3 == 1) goto LAB_00053df0;
      bVar1 = b <= uVar3;
      uVar3 = uVar3 - b;
    } while (bVar1);
    a = uVar3 + b;
    mVar2 = b;
  } while( true );
}



int __gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)

{
  bool bVar1;
  uint uVar2;
  
  if (param_1 == 0) {
    return 0;
  }
  if ((param_1 & 1) == 0) {
    do {
      param_1 = param_1 >> 1;
      param_3 = param_3 ^ param_2 >> 1 ^ param_2;
    } while ((param_1 & 1) == 0);
  }
  if (param_1 == 1) {
LAB_00053df0:
    return 1 - (param_3 & 2);
  }
  uVar2 = param_2;
  if (param_2 <= param_1) goto LAB_00053d8c;
  do {
    param_3 = param_3 ^ param_1 & uVar2;
    param_2 = param_1;
    param_1 = uVar2;
LAB_00053d8c:
    param_1 = param_1 - param_2;
    do {
      if (param_1 == 0) {
        return 0;
      }
      do {
        param_1 = param_1 >> 1;
        param_3 = param_3 ^ param_2 >> 1 ^ param_2;
      } while ((param_1 & 1) == 0);
      if (param_1 == 1) goto LAB_00053df0;
      bVar1 = param_2 <= param_1;
      param_1 = param_1 - param_2;
    } while (bVar1);
    param_1 = param_1 + param_2;
    uVar2 = param_2;
  } while( true );
}


beq a0,zero,0x00053ddc
_nop
andi v0,a0,0x1
bne v0,zero,0x00053d70
_li v0,0x1
srl v1,a1,0x1
xor v1,v1,a1
srl a0,a0,0x1
andi v0,a0,0x1
beq v0,zero,0x00053d5c
_xor a2,a2,v1
li v0,0x1
beq a0,v0,0x00053df0
_li v0,0x1
sltu v0,a0,a1
beq v0,zero,0x00053de4
_or v0,a1,zero
and v0,a0,a1
xor a2,a2,v0
srl v1,a0,0x1
li a3,0x1
xor v1,v1,a0
subu a1,a1,a0
beq a1,zero,0x00053dfc
_nop
srl a1,a1,0x1
andi v0,a1,0x1
beq v0,zero,0x00053da4
_xor a2,a2,v1
beq a1,a3,0x00053df0
_li v0,0x1
sltu v0,a1,a0
beq v0,zero,0x00053d9c
_subu a1,a1,a0
addu a1,a1,a0
or v0,a0,zero
or a0,a1,zero
b 0x00053d84
_or a1,v0,zero
jr ra
_or v0,zero,zero
or a1,a0,zero
b 0x00053d8c
_or a0,v0,zero
andi a2,a2,0x2
jr ra
_subu v0,v0,a2
jr ra
_or v0,zero,zero
(translation_unit "int __gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)\n\n{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}\n\n" (function_definition "int __gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)\n\n{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}" primitive_type (function_declarator "__gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (if_statement "if (param_1 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }" if (parenthesized_expression "((param_1 & 1) == 0)" ( (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" ( (binary_expression "param_1 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }" { (do_statement "do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);" do (compound_statement "{\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    }" { (expression_statement "param_1 = param_1 >> 1;" (assignment_expression "param_1 = param_1 >> 1" identifier = (binary_expression "param_1 >> 1" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 ^ param_2 >> 1 ^ param_2;" (assignment_expression "param_3 = param_3 ^ param_2 >> 1 ^ param_2" identifier = (binary_expression "param_3 ^ param_2 >> 1 ^ param_2" (binary_expression "param_3 ^ param_2 >> 1" identifier ^ (binary_expression "param_2 >> 1" identifier >> number_literal)) ^ identifier)) ;) }) while (parenthesized_expression "((param_1 & 1) == 0)" ( (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" ( (binary_expression "param_1 & 1" identifier & number_literal) )) == number_literal) )) ;) })) (if_statement "if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }" if (parenthesized_expression "(param_1 == 1)" ( (binary_expression "param_1 == 1" identifier == number_literal) )) (compound_statement "{\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }" { (labeled_statement "LAB_00053df0:\n    return 1 - (param_3 & 2);" statement_identifier : (return_statement "return 1 - (param_3 & 2);" return (binary_expression "1 - (param_3 & 2)" number_literal - (parenthesized_expression "(param_3 & 2)" ( (binary_expression "param_3 & 2" identifier & number_literal) ))) ;)) })) (expression_statement "uVar2 = param_2;" (assignment_expression "uVar2 = param_2" identifier = identifier) ;) (if_statement "if (param_2 <= param_1) goto LAB_00053d8c;" if (parenthesized_expression "(param_2 <= param_1)" ( (binary_expression "param_2 <= param_1" identifier <= identifier) )) (goto_statement "goto LAB_00053d8c;" goto statement_identifier ;)) (do_statement "do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );" do (compound_statement "{\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  }" { (expression_statement "param_3 = param_3 ^ param_1 & uVar2;" (assignment_expression "param_3 = param_3 ^ param_1 & uVar2" identifier = (binary_expression "param_3 ^ param_1 & uVar2" identifier ^ (binary_expression "param_1 & uVar2" identifier & identifier))) ;) (expression_statement "param_2 = param_1;" (assignment_expression "param_2 = param_1" identifier = identifier) ;) (expression_statement "param_1 = uVar2;" (assignment_expression "param_1 = uVar2" identifier = identifier) ;) (labeled_statement "LAB_00053d8c:\n    param_1 = param_1 - param_2;" statement_identifier : (expression_statement "param_1 = param_1 - param_2;" (assignment_expression "param_1 = param_1 - param_2" identifier = (binary_expression "param_1 - param_2" identifier - identifier)) ;)) (do_statement "do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);" do (compound_statement "{\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    }" { (if_statement "if (param_1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (do_statement "do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);" do (compound_statement "{\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      }" { (expression_statement "param_1 = param_1 >> 1;" (assignment_expression "param_1 = param_1 >> 1" identifier = (binary_expression "param_1 >> 1" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 ^ param_2 >> 1 ^ param_2;" (assignment_expression "param_3 = param_3 ^ param_2 >> 1 ^ param_2" identifier = (binary_expression "param_3 ^ param_2 >> 1 ^ param_2" (binary_expression "param_3 ^ param_2 >> 1" identifier ^ (binary_expression "param_2 >> 1" identifier >> number_literal)) ^ identifier)) ;) }) while (parenthesized_expression "((param_1 & 1) == 0)" ( (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" ( (binary_expression "param_1 & 1" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (param_1 == 1) goto LAB_00053df0;" if (parenthesized_expression "(param_1 == 1)" ( (binary_expression "param_1 == 1" identifier == number_literal) )) (goto_statement "goto LAB_00053df0;" goto statement_identifier ;)) (expression_statement "bVar1 = param_2 <= param_1;" (assignment_expression "bVar1 = param_2 <= param_1" identifier = (binary_expression "param_2 <= param_1" identifier <= identifier)) ;) (expression_statement "param_1 = param_1 - param_2;" (assignment_expression "param_1 = param_1 - param_2" identifier = (binary_expression "param_1 - param_2" identifier - identifier)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (expression_statement "param_1 = param_1 + param_2;" (assignment_expression "param_1 = param_1 + param_2" identifier = (binary_expression "param_1 + param_2" identifier + identifier)) ;) (expression_statement "uVar2 = param_2;" (assignment_expression "uVar2 = param_2" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int __gmpn_jacobi_base(mp_limb_t a,mp_limb_t b,int result_bit1)\n\n{\n  bool bVar1;\n  int two;\n  mp_limb_t mVar2;\n  uint uVar3;\n  \n  if (a == 0) {\n    return 0;\n  }\n  if ((a & 1) == 0) {\n    do {\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    } while ((a & 1) == 0);\n  }\n  if (a == 1) {\nLAB_00053df0:\n    return 1 - (result_bit1 & 2U);\n  }\n  mVar2 = b;\n  if (b <= a) goto LAB_00053d8c;\n  do {\n    result_bit1 = result_bit1 ^ a & mVar2;\n    b = a;\n    a = mVar2;\nLAB_00053d8c:\n    uVar3 = a - b;\n    do {\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    } while (bVar1);\n    a = uVar3 + b;\n    mVar2 = b;\n  } while( true );\n}\n\n" (function_definition "int __gmpn_jacobi_base(mp_limb_t a,mp_limb_t b,int result_bit1)\n\n{\n  bool bVar1;\n  int two;\n  mp_limb_t mVar2;\n  uint uVar3;\n  \n  if (a == 0) {\n    return 0;\n  }\n  if ((a & 1) == 0) {\n    do {\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    } while ((a & 1) == 0);\n  }\n  if (a == 1) {\nLAB_00053df0:\n    return 1 - (result_bit1 & 2U);\n  }\n  mVar2 = b;\n  if (b <= a) goto LAB_00053d8c;\n  do {\n    result_bit1 = result_bit1 ^ a & mVar2;\n    b = a;\n    a = mVar2;\nLAB_00053d8c:\n    uVar3 = a - b;\n    do {\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    } while (bVar1);\n    a = uVar3 + b;\n    mVar2 = b;\n  } while( true );\n}" primitive_type (function_declarator "__gmpn_jacobi_base(mp_limb_t a,mp_limb_t b,int result_bit1)" identifier (parameter_list "(mp_limb_t a,mp_limb_t b,int result_bit1)" ( (parameter_declaration "mp_limb_t a" type_identifier identifier) , (parameter_declaration "mp_limb_t b" type_identifier identifier) , (parameter_declaration "int result_bit1" primitive_type identifier) ))) (compound_statement "{\n  bool bVar1;\n  int two;\n  mp_limb_t mVar2;\n  uint uVar3;\n  \n  if (a == 0) {\n    return 0;\n  }\n  if ((a & 1) == 0) {\n    do {\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    } while ((a & 1) == 0);\n  }\n  if (a == 1) {\nLAB_00053df0:\n    return 1 - (result_bit1 & 2U);\n  }\n  mVar2 = b;\n  if (b <= a) goto LAB_00053d8c;\n  do {\n    result_bit1 = result_bit1 ^ a & mVar2;\n    b = a;\n    a = mVar2;\nLAB_00053d8c:\n    uVar3 = a - b;\n    do {\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    } while (bVar1);\n    a = uVar3 + b;\n    mVar2 = b;\n  } while( true );\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "int two;" primitive_type identifier ;) (declaration "mp_limb_t mVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if (a == 0) {\n    return 0;\n  }" if (parenthesized_expression "(a == 0)" ( (binary_expression "a == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((a & 1) == 0) {\n    do {\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    } while ((a & 1) == 0);\n  }" if (parenthesized_expression "((a & 1) == 0)" ( (binary_expression "(a & 1) == 0" (parenthesized_expression "(a & 1)" ( (binary_expression "a & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    do {\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    } while ((a & 1) == 0);\n  }" { (do_statement "do {\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    } while ((a & 1) == 0);" do (compound_statement "{\n      a = a >> 1;\n      result_bit1 = result_bit1 ^ b >> 1 ^ b;\n    }" { (expression_statement "a = a >> 1;" (assignment_expression "a = a >> 1" identifier = (binary_expression "a >> 1" identifier >> number_literal)) ;) (expression_statement "result_bit1 = result_bit1 ^ b >> 1 ^ b;" (assignment_expression "result_bit1 = result_bit1 ^ b >> 1 ^ b" identifier = (binary_expression "result_bit1 ^ b >> 1 ^ b" (binary_expression "result_bit1 ^ b >> 1" identifier ^ (binary_expression "b >> 1" identifier >> number_literal)) ^ identifier)) ;) }) while (parenthesized_expression "((a & 1) == 0)" ( (binary_expression "(a & 1) == 0" (parenthesized_expression "(a & 1)" ( (binary_expression "a & 1" identifier & number_literal) )) == number_literal) )) ;) })) (if_statement "if (a == 1) {\nLAB_00053df0:\n    return 1 - (result_bit1 & 2U);\n  }" if (parenthesized_expression "(a == 1)" ( (binary_expression "a == 1" identifier == number_literal) )) (compound_statement "{\nLAB_00053df0:\n    return 1 - (result_bit1 & 2U);\n  }" { (labeled_statement "LAB_00053df0:\n    return 1 - (result_bit1 & 2U);" statement_identifier : (return_statement "return 1 - (result_bit1 & 2U);" return (binary_expression "1 - (result_bit1 & 2U)" number_literal - (parenthesized_expression "(result_bit1 & 2U)" ( (binary_expression "result_bit1 & 2U" identifier & number_literal) ))) ;)) })) (expression_statement "mVar2 = b;" (assignment_expression "mVar2 = b" identifier = identifier) ;) (if_statement "if (b <= a) goto LAB_00053d8c;" if (parenthesized_expression "(b <= a)" ( (binary_expression "b <= a" identifier <= identifier) )) (goto_statement "goto LAB_00053d8c;" goto statement_identifier ;)) (do_statement "do {\n    result_bit1 = result_bit1 ^ a & mVar2;\n    b = a;\n    a = mVar2;\nLAB_00053d8c:\n    uVar3 = a - b;\n    do {\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    } while (bVar1);\n    a = uVar3 + b;\n    mVar2 = b;\n  } while( true );" do (compound_statement "{\n    result_bit1 = result_bit1 ^ a & mVar2;\n    b = a;\n    a = mVar2;\nLAB_00053d8c:\n    uVar3 = a - b;\n    do {\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    } while (bVar1);\n    a = uVar3 + b;\n    mVar2 = b;\n  }" { (expression_statement "result_bit1 = result_bit1 ^ a & mVar2;" (assignment_expression "result_bit1 = result_bit1 ^ a & mVar2" identifier = (binary_expression "result_bit1 ^ a & mVar2" identifier ^ (binary_expression "a & mVar2" identifier & identifier))) ;) (expression_statement "b = a;" (assignment_expression "b = a" identifier = identifier) ;) (expression_statement "a = mVar2;" (assignment_expression "a = mVar2" identifier = identifier) ;) (labeled_statement "LAB_00053d8c:\n    uVar3 = a - b;" statement_identifier : (expression_statement "uVar3 = a - b;" (assignment_expression "uVar3 = a - b" identifier = (binary_expression "a - b" identifier - identifier)) ;)) (do_statement "do {\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    } while (bVar1);" do (compound_statement "{\n      if (uVar3 == 0) {\n        return 0;\n      }\n      do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);\n      if (uVar3 == 1) goto LAB_00053df0;\n      bVar1 = b <= uVar3;\n      uVar3 = uVar3 - b;\n    }" { (if_statement "if (uVar3 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (do_statement "do {\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      } while ((uVar3 & 1) == 0);" do (compound_statement "{\n        uVar3 = uVar3 >> 1;\n        result_bit1 = result_bit1 ^ b >> 1 ^ b;\n      }" { (expression_statement "uVar3 = uVar3 >> 1;" (assignment_expression "uVar3 = uVar3 >> 1" identifier = (binary_expression "uVar3 >> 1" identifier >> number_literal)) ;) (expression_statement "result_bit1 = result_bit1 ^ b >> 1 ^ b;" (assignment_expression "result_bit1 = result_bit1 ^ b >> 1 ^ b" identifier = (binary_expression "result_bit1 ^ b >> 1 ^ b" (binary_expression "result_bit1 ^ b >> 1" identifier ^ (binary_expression "b >> 1" identifier >> number_literal)) ^ identifier)) ;) }) while (parenthesized_expression "((uVar3 & 1) == 0)" ( (binary_expression "(uVar3 & 1) == 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (uVar3 == 1) goto LAB_00053df0;" if (parenthesized_expression "(uVar3 == 1)" ( (binary_expression "uVar3 == 1" identifier == number_literal) )) (goto_statement "goto LAB_00053df0;" goto statement_identifier ;)) (expression_statement "bVar1 = b <= uVar3;" (assignment_expression "bVar1 = b <= uVar3" identifier = (binary_expression "b <= uVar3" identifier <= identifier)) ;) (expression_statement "uVar3 = uVar3 - b;" (assignment_expression "uVar3 = uVar3 - b" identifier = (binary_expression "uVar3 - b" identifier - identifier)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (expression_statement "a = uVar3 + b;" (assignment_expression "a = uVar3 + b" identifier = (binary_expression "uVar3 + b" identifier + identifier)) ;) (expression_statement "mVar2 = b;" (assignment_expression "mVar2 = b" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int __gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)\n\n{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}\n\n" (function_definition "int __gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)\n\n{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}" primitive_type (function_declarator "__gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (if_statement "if (param_1 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }" if (parenthesized_expression "((param_1 & 1) == 0)" ( (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" ( (binary_expression "param_1 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }" { (do_statement "do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);" do (compound_statement "{\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    }" { (expression_statement "param_1 = param_1 >> 1;" (assignment_expression "param_1 = param_1 >> 1" identifier = (binary_expression "param_1 >> 1" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 ^ param_2 >> 1 ^ param_2;" (assignment_expression "param_3 = param_3 ^ param_2 >> 1 ^ param_2" identifier = (binary_expression "param_3 ^ param_2 >> 1 ^ param_2" (binary_expression "param_3 ^ param_2 >> 1" identifier ^ (binary_expression "param_2 >> 1" identifier >> number_literal)) ^ identifier)) ;) }) while (parenthesized_expression "((param_1 & 1) == 0)" ( (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" ( (binary_expression "param_1 & 1" identifier & number_literal) )) == number_literal) )) ;) })) (if_statement "if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }" if (parenthesized_expression "(param_1 == 1)" ( (binary_expression "param_1 == 1" identifier == number_literal) )) (compound_statement "{\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }" { (labeled_statement "LAB_00053df0:\n    return 1 - (param_3 & 2);" statement_identifier : (return_statement "return 1 - (param_3 & 2);" return (binary_expression "1 - (param_3 & 2)" number_literal - (parenthesized_expression "(param_3 & 2)" ( (binary_expression "param_3 & 2" identifier & number_literal) ))) ;)) })) (expression_statement "uVar2 = param_2;" (assignment_expression "uVar2 = param_2" identifier = identifier) ;) (if_statement "if (param_2 <= param_1) goto LAB_00053d8c;" if (parenthesized_expression "(param_2 <= param_1)" ( (binary_expression "param_2 <= param_1" identifier <= identifier) )) (goto_statement "goto LAB_00053d8c;" goto statement_identifier ;)) (do_statement "do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );" do (compound_statement "{\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  }" { (expression_statement "param_3 = param_3 ^ param_1 & uVar2;" (assignment_expression "param_3 = param_3 ^ param_1 & uVar2" identifier = (binary_expression "param_3 ^ param_1 & uVar2" identifier ^ (binary_expression "param_1 & uVar2" identifier & identifier))) ;) (expression_statement "param_2 = param_1;" (assignment_expression "param_2 = param_1" identifier = identifier) ;) (expression_statement "param_1 = uVar2;" (assignment_expression "param_1 = uVar2" identifier = identifier) ;) (labeled_statement "LAB_00053d8c:\n    param_1 = param_1 - param_2;" statement_identifier : (expression_statement "param_1 = param_1 - param_2;" (assignment_expression "param_1 = param_1 - param_2" identifier = (binary_expression "param_1 - param_2" identifier - identifier)) ;)) (do_statement "do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);" do (compound_statement "{\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    }" { (if_statement "if (param_1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (do_statement "do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);" do (compound_statement "{\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      }" { (expression_statement "param_1 = param_1 >> 1;" (assignment_expression "param_1 = param_1 >> 1" identifier = (binary_expression "param_1 >> 1" identifier >> number_literal)) ;) (expression_statement "param_3 = param_3 ^ param_2 >> 1 ^ param_2;" (assignment_expression "param_3 = param_3 ^ param_2 >> 1 ^ param_2" identifier = (binary_expression "param_3 ^ param_2 >> 1 ^ param_2" (binary_expression "param_3 ^ param_2 >> 1" identifier ^ (binary_expression "param_2 >> 1" identifier >> number_literal)) ^ identifier)) ;) }) while (parenthesized_expression "((param_1 & 1) == 0)" ( (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" ( (binary_expression "param_1 & 1" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (param_1 == 1) goto LAB_00053df0;" if (parenthesized_expression "(param_1 == 1)" ( (binary_expression "param_1 == 1" identifier == number_literal) )) (goto_statement "goto LAB_00053df0;" goto statement_identifier ;)) (expression_statement "bVar1 = param_2 <= param_1;" (assignment_expression "bVar1 = param_2 <= param_1" identifier = (binary_expression "param_2 <= param_1" identifier <= identifier)) ;) (expression_statement "param_1 = param_1 - param_2;" (assignment_expression "param_1 = param_1 - param_2" identifier = (binary_expression "param_1 - param_2" identifier - identifier)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (expression_statement "param_1 = param_1 + param_2;" (assignment_expression "param_1 = param_1 + param_2" identifier = (binary_expression "param_1 + param_2" identifier + identifier)) ;) (expression_statement "uVar2 = param_2;" (assignment_expression "uVar2 = param_2" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT ^ (binary_expression IDENT >> LIT)) ^ IDENT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (return_statement return (binary_expression LIT - (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ;)) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ (binary_expression IDENT & IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;)) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT ^ (binary_expression IDENT >> LIT)) ^ IDENT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT <= IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int __gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)\n\n{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}" (primitive_type "int") (function_declarator "__gmpn_jacobi_base(uint param_1,uint param_2,uint param_3)" (identifier "__gmpn_jacobi_base") (parameter_list "(uint param_1,uint param_2,uint param_3)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  \n  if (param_1 == 0) {\n    return 0;\n  }\n  if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }\n  if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }\n  uVar2 = param_2;\n  if (param_2 <= param_1) goto LAB_00053d8c;\n  do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (if_statement "if (param_1 == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if ((param_1 & 1) == 0) {\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }" (if "if") (parenthesized_expression "((param_1 & 1) == 0)" (( "(") (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" (( "(") (binary_expression "param_1 & 1" (identifier "param_1") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);\n  }" ({ "{") (do_statement "do {\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    } while ((param_1 & 1) == 0);" (do "do") (compound_statement "{\n      param_1 = param_1 >> 1;\n      param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n    }" ({ "{") (expression_statement "param_1 = param_1 >> 1;" (assignment_expression "param_1 = param_1 >> 1" (identifier "param_1") (= "=") (binary_expression "param_1 >> 1" (identifier "param_1") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "param_3 = param_3 ^ param_2 >> 1 ^ param_2;" (assignment_expression "param_3 = param_3 ^ param_2 >> 1 ^ param_2" (identifier "param_3") (= "=") (binary_expression "param_3 ^ param_2 >> 1 ^ param_2" (binary_expression "param_3 ^ param_2 >> 1" (identifier "param_3") (^ "^") (binary_expression "param_2 >> 1" (identifier "param_2") (>> ">>") (number_literal "1"))) (^ "^") (identifier "param_2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((param_1 & 1) == 0)" (( "(") (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" (( "(") (binary_expression "param_1 & 1" (identifier "param_1") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (; ";")) (} "}"))) (if_statement "if (param_1 == 1) {\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }" (if "if") (parenthesized_expression "(param_1 == 1)" (( "(") (binary_expression "param_1 == 1" (identifier "param_1") (== "==") (number_literal "1")) () ")")) (compound_statement "{\nLAB_00053df0:\n    return 1 - (param_3 & 2);\n  }" ({ "{") (labeled_statement "LAB_00053df0:\n    return 1 - (param_3 & 2);" (statement_identifier "LAB_00053df0") (: ":") (return_statement "return 1 - (param_3 & 2);" (return "return") (binary_expression "1 - (param_3 & 2)" (number_literal "1") (- "-") (parenthesized_expression "(param_3 & 2)" (( "(") (binary_expression "param_3 & 2" (identifier "param_3") (& "&") (number_literal "2")) () ")"))) (; ";"))) (} "}"))) (expression_statement "uVar2 = param_2;" (assignment_expression "uVar2 = param_2" (identifier "uVar2") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (param_2 <= param_1) goto LAB_00053d8c;" (if "if") (parenthesized_expression "(param_2 <= param_1)" (( "(") (binary_expression "param_2 <= param_1" (identifier "param_2") (<= "<=") (identifier "param_1")) () ")")) (goto_statement "goto LAB_00053d8c;" (goto "goto") (statement_identifier "LAB_00053d8c") (; ";"))) (do_statement "do {\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  } while( true );" (do "do") (compound_statement "{\n    param_3 = param_3 ^ param_1 & uVar2;\n    param_2 = param_1;\n    param_1 = uVar2;\nLAB_00053d8c:\n    param_1 = param_1 - param_2;\n    do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);\n    param_1 = param_1 + param_2;\n    uVar2 = param_2;\n  }" ({ "{") (expression_statement "param_3 = param_3 ^ param_1 & uVar2;" (assignment_expression "param_3 = param_3 ^ param_1 & uVar2" (identifier "param_3") (= "=") (binary_expression "param_3 ^ param_1 & uVar2" (identifier "param_3") (^ "^") (binary_expression "param_1 & uVar2" (identifier "param_1") (& "&") (identifier "uVar2")))) (; ";")) (expression_statement "param_2 = param_1;" (assignment_expression "param_2 = param_1" (identifier "param_2") (= "=") (identifier "param_1")) (; ";")) (expression_statement "param_1 = uVar2;" (assignment_expression "param_1 = uVar2" (identifier "param_1") (= "=") (identifier "uVar2")) (; ";")) (labeled_statement "LAB_00053d8c:\n    param_1 = param_1 - param_2;" (statement_identifier "LAB_00053d8c") (: ":") (expression_statement "param_1 = param_1 - param_2;" (assignment_expression "param_1 = param_1 - param_2" (identifier "param_1") (= "=") (binary_expression "param_1 - param_2" (identifier "param_1") (- "-") (identifier "param_2"))) (; ";"))) (do_statement "do {\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    } while (bVar1);" (do "do") (compound_statement "{\n      if (param_1 == 0) {\n        return 0;\n      }\n      do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);\n      if (param_1 == 1) goto LAB_00053df0;\n      bVar1 = param_2 <= param_1;\n      param_1 = param_1 - param_2;\n    }" ({ "{") (if_statement "if (param_1 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (do_statement "do {\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      } while ((param_1 & 1) == 0);" (do "do") (compound_statement "{\n        param_1 = param_1 >> 1;\n        param_3 = param_3 ^ param_2 >> 1 ^ param_2;\n      }" ({ "{") (expression_statement "param_1 = param_1 >> 1;" (assignment_expression "param_1 = param_1 >> 1" (identifier "param_1") (= "=") (binary_expression "param_1 >> 1" (identifier "param_1") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "param_3 = param_3 ^ param_2 >> 1 ^ param_2;" (assignment_expression "param_3 = param_3 ^ param_2 >> 1 ^ param_2" (identifier "param_3") (= "=") (binary_expression "param_3 ^ param_2 >> 1 ^ param_2" (binary_expression "param_3 ^ param_2 >> 1" (identifier "param_3") (^ "^") (binary_expression "param_2 >> 1" (identifier "param_2") (>> ">>") (number_literal "1"))) (^ "^") (identifier "param_2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((param_1 & 1) == 0)" (( "(") (binary_expression "(param_1 & 1) == 0" (parenthesized_expression "(param_1 & 1)" (( "(") (binary_expression "param_1 & 1" (identifier "param_1") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (; ";")) (if_statement "if (param_1 == 1) goto LAB_00053df0;" (if "if") (parenthesized_expression "(param_1 == 1)" (( "(") (binary_expression "param_1 == 1" (identifier "param_1") (== "==") (number_literal "1")) () ")")) (goto_statement "goto LAB_00053df0;" (goto "goto") (statement_identifier "LAB_00053df0") (; ";"))) (expression_statement "bVar1 = param_2 <= param_1;" (assignment_expression "bVar1 = param_2 <= param_1" (identifier "bVar1") (= "=") (binary_expression "param_2 <= param_1" (identifier "param_2") (<= "<=") (identifier "param_1"))) (; ";")) (expression_statement "param_1 = param_1 - param_2;" (assignment_expression "param_1 = param_1 - param_2" (identifier "param_1") (= "=") (binary_expression "param_1 - param_2" (identifier "param_1") (- "-") (identifier "param_2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")")) (; ";")) (expression_statement "param_1 = param_1 + param_2;" (assignment_expression "param_1 = param_1 + param_2" (identifier "param_1") (= "=") (binary_expression "param_1 + param_2" (identifier "param_1") (+ "+") (identifier "param_2"))) (; ";")) (expression_statement "uVar2 = param_2;" (assignment_expression "uVar2 = param_2" (identifier "uVar2") (= "=") (identifier "param_2")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (return_statement (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_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))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (true))))))

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

{
  bool bVar1;
  uint uVar2;
  
  if (param_1 == 0) {
    return 0;
  }
  if ((param_1 & 1) == 0) {
    do {
      param_1 = param_1 >> 1;
      param_3 = param_3 ^ param_2 >> 1 ^ param_2;
    } while ((param_1 & 1) == 0);
  }
  if (param_1 == 1) {
LAB_00053df0:
    return 1 - (param_3 & 2);
  }
  uVar2 = param_2;
  if (param_2 <= param_1) goto LAB_00053d8c;
  do {
    param_3 = param_3 ^ param_1 & uVar2;
    param_2 = param_1;
    param_1 = uVar2;
LAB_00053d8c:
    param_1 = param_1 - param_2;
    do {
      if (param_1 == 0) {
        return 0;
      }
      do {
        param_1 = param_1 >> 1;
        param_3 = param_3 ^ param_2 >> 1 ^ param_2;
      } while ((param_1 & 1) == 0);
      if (param_1 == 1) goto LAB_00053df0;
      bVar1 = param_2 <= param_1;
      param_1 = param_1 - param_2;
    } while (bVar1);
    param_1 = param_1 + param_2;
    uVar2 = param_2;
  } while( true );
}

