
/* WARNING: Switch with 1 destination removed at 0x0001b6e0 */

int __gmpf_cmp(mpf_srcptr u,mpf_srcptr v)

{
  uint uVar1;
  uint uVar2;
  mp_limb_t mVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  mp_limb_t *pmVar7;
  mp_limb_t *pmVar8;
  bool bVar9;
  bool bVar10;
  
  uVar1 = u->_mp_size;
  uVar2 = v->_mp_size;
  if ((int)uVar1 < 0) {
    iVar4 = -1;
    if ((int)(uVar1 ^ uVar2) < 0) {
      return -1;
    }
  }
  else {
    iVar4 = 1;
    if ((int)(uVar1 ^ uVar2) < 0) {
      return 1;
    }
    if (uVar1 == 0) {
      return -(uint)(uVar2 != 0);
    }
  }
  if (uVar2 == 0) {
    return 1;
  }
  if (v->_mp_exp < u->_mp_exp) {
    return iVar4;
  }
  if (v->_mp_exp <= u->_mp_exp) {
    pmVar8 = u->_mp_d;
    pmVar7 = v->_mp_d;
    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);
    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);
    if (*pmVar8 != 0) goto LAB_000210ce;
    do {
      pmVar8 = pmVar8 + 1;
      iVar6 = iVar6 + -1;
    } while (*pmVar8 == 0);
    mVar3 = *pmVar7;
    while (mVar3 == 0) {
      iVar5 = iVar5 + -1;
      pmVar7 = pmVar7 + 1;
LAB_000210ce:
      mVar3 = *pmVar7;
    }
    if (iVar5 < iVar6) {
      iVar6 = iVar6 - iVar5;
      do {
        iVar5 = iVar5 + -1;
        if (iVar5 < 0) {
          return iVar4;
        }
        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];
        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];
      } while (bVar10);
    }
    else if (iVar6 < iVar5) {
      iVar5 = iVar5 - iVar6;
      do {
        iVar6 = iVar6 + -1;
        if (iVar6 < 0) goto LAB_000210f8;
        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];
        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];
      } while (bVar10);
    }
    else {
      do {
        iVar6 = iVar6 + -1;
        if (iVar6 < 0) {
          return 0;
        }
        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];
        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];
      } while (bVar10);
    }
    if (!bVar9 && !bVar10) {
      return iVar4;
    }
  }
LAB_000210f8:
  return -iVar4;
}



/* WARNING: Switch with 1 destination removed at 0x0001b6e0 */

int __gmpf_cmp(int param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int *piVar7;
  int *piVar8;
  bool bVar9;
  bool bVar10;
  
  uVar1 = *(uint *)(param_1 + 4);
  uVar2 = *(uint *)(param_2 + 4);
  if ((int)uVar1 < 0) {
    iVar4 = -1;
    if ((int)(uVar1 ^ uVar2) < 0) {
      return -1;
    }
  }
  else {
    iVar4 = 1;
    if ((int)(uVar1 ^ uVar2) < 0) {
      return 1;
    }
    if (uVar1 == 0) {
      return -(uint)(uVar2 != 0);
    }
  }
  if (uVar2 == 0) {
    return 1;
  }
  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {
    return iVar4;
  }
  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {
    piVar8 = *(int **)(param_1 + 0xc);
    piVar7 = *(int **)(param_2 + 0xc);
    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);
    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);
    if (*piVar8 != 0) goto LAB_000210ce;
    do {
      piVar8 = piVar8 + 1;
      iVar6 = iVar6 + -1;
    } while (*piVar8 == 0);
    iVar3 = *piVar7;
    while (iVar3 == 0) {
      iVar5 = iVar5 + -1;
      piVar7 = piVar7 + 1;
LAB_000210ce:
      iVar3 = *piVar7;
    }
    if (iVar5 < iVar6) {
      iVar6 = iVar6 - iVar5;
      do {
        iVar5 = iVar5 + -1;
        if (iVar5 < 0) {
          return iVar4;
        }
        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];
        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];
      } while (bVar10);
    }
    else if (iVar6 < iVar5) {
      iVar5 = iVar5 - iVar6;
      do {
        iVar6 = iVar6 + -1;
        if (iVar6 < 0) goto LAB_000210f8;
        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];
        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];
      } while (bVar10);
    }
    else {
      do {
        iVar6 = iVar6 + -1;
        if (iVar6 < 0) {
          return 0;
        }
        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];
        bVar10 = piVar8[iVar6] == piVar7[iVar6];
      } while (bVar10);
    }
    if (!bVar9 && !bVar10) {
      return iVar4;
    }
  }
LAB_000210f8:
  return -iVar4;
}


JMP dword ptr [EBX + 0x1b4]
(translation_unit "/* WARNING: Switch with 1 destination removed at 0x0001b6e0 */\n\nint __gmpf_cmp(int param_1,int param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}\n\n" comment (function_definition "int __gmpf_cmp(int param_1,int param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" primitive_type (function_declarator "__gmpf_cmp(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (expression_statement "uVar1 = *(uint *)(param_1 + 4);" (assignment_expression "uVar1 = *(uint *)(param_1 + 4)" identifier = (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(uint *)(param_2 + 4);" (assignment_expression "uVar2 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" if (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }" { (expression_statement "iVar4 = -1;" (assignment_expression "iVar4 = -1" identifier = number_literal) ;) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }" if (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" ( (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) ))) < number_literal) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) }) (else_clause "else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" else (compound_statement "{\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" { (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }" if (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" ( (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) ))) < number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return -(uint)(uVar2 != 0);\n    }" { (return_statement "return -(uint)(uVar2 != 0);" return (unary_expression "-(uint)(uVar2 != 0)" - (call_expression "(uint)(uVar2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )))) ;) })) }))) (if_statement "if (uVar2 == 0) {\n    return 1;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }" if (parenthesized_expression "(*(int *)(param_2 + 8) < *(int *)(param_1 + 8))" ( (binary_expression "*(int *)(param_2 + 8) < *(int *)(param_1 + 8)" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) < (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" if (parenthesized_expression "(*(int *)(param_2 + 8) <= *(int *)(param_1 + 8))" ( (binary_expression "*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) <= (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" { (expression_statement "piVar8 = *(int **)(param_1 + 0xc);" (assignment_expression "piVar8 = *(int **)(param_1 + 0xc)" identifier = (pointer_expression "*(int **)(param_1 + 0xc)" * (cast_expression "(int **)(param_1 + 0xc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "piVar7 = *(int **)(param_2 + 0xc);" (assignment_expression "piVar7 = *(int **)(param_2 + 0xc)" identifier = (pointer_expression "*(int **)(param_2 + 0xc)" * (cast_expression "(int **)(param_2 + 0xc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);" (assignment_expression "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" identifier = (binary_expression "(uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (parenthesized_expression "(uVar1 ^ (int)uVar1 >> 0x1f)" ( (binary_expression "uVar1 ^ (int)uVar1 >> 0x1f" identifier ^ (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar1 >> 0x1f)" ( (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);" (assignment_expression "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" identifier = (binary_expression "(uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" (parenthesized_expression "(uVar2 ^ (int)uVar2 >> 0x1f)" ( (binary_expression "uVar2 ^ (int)uVar2 >> 0x1f" identifier ^ (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar2 >> 0x1f)" ( (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (*piVar8 != 0) goto LAB_000210ce;" if (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) (goto_statement "goto LAB_000210ce;" goto statement_identifier ;)) (do_statement "do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);" do (compound_statement "{\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    }" { (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*piVar8 == 0)" ( (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" * identifier) == number_literal) )) ;) (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;) (while_statement "while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }" while (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (expression_statement "piVar7 = piVar7 + 1;" (assignment_expression "piVar7 = piVar7 + 1" identifier = (binary_expression "piVar7 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_000210ce:\n      iVar3 = *piVar7;" statement_identifier : (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;)) })) (if_statement "if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" if (parenthesized_expression "(iVar5 < iVar6)" ( (binary_expression "iVar5 < iVar6" identifier < identifier) )) (compound_statement "{\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }" { (expression_statement "iVar6 = iVar6 - iVar5;" (assignment_expression "iVar6 = iVar6 - iVar5" identifier = (binary_expression "iVar6 - iVar5" identifier - identifier)) ;) (do_statement "do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);" do (compound_statement "{\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (if_statement "if (iVar5 < 0) {\n          return iVar4;\n        }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n          return iVar4;\n        }" { (return_statement "return iVar4;" return identifier ;) })) (expression_statement "bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];" (assignment_expression "bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5]" identifier = (binary_expression "(uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5]" (cast_expression "(uint)piVar8[iVar6 + iVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[iVar6 + iVar5]" identifier [ (binary_expression "iVar6 + iVar5" identifier + identifier) ])) < (cast_expression "(uint)piVar7[iVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar7[iVar5]" identifier [ identifier ])))) ;) (expression_statement "bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];" (assignment_expression "bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5]" identifier = (binary_expression "piVar8[iVar6 + iVar5] == piVar7[iVar5]" (subscript_expression "piVar8[iVar6 + iVar5]" identifier [ (binary_expression "iVar6 + iVar5" identifier + identifier) ]) == (subscript_expression "piVar7[iVar5]" identifier [ identifier ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }) (else_clause "else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" else (if_statement "if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" if (parenthesized_expression "(iVar6 < iVar5)" ( (binary_expression "iVar6 < iVar5" identifier < identifier) )) (compound_statement "{\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }" { (expression_statement "iVar5 = iVar5 - iVar6;" (assignment_expression "iVar5 = iVar5 - iVar6" identifier = (binary_expression "iVar5 - iVar6" identifier - identifier)) ;) (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);" do (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < 0) goto LAB_000210f8;" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (goto_statement "goto LAB_000210f8;" goto statement_identifier ;)) (expression_statement "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];" (assignment_expression "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6]" identifier = (binary_expression "(uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6]" (cast_expression "(uint)piVar8[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[iVar6]" identifier [ identifier ])) < (cast_expression "(uint)piVar7[iVar5 + iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar7[iVar5 + iVar6]" identifier [ (binary_expression "iVar5 + iVar6" identifier + identifier) ])))) ;) (expression_statement "bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];" (assignment_expression "bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6]" identifier = (binary_expression "piVar8[iVar6] == piVar7[iVar5 + iVar6]" (subscript_expression "piVar8[iVar6]" identifier [ identifier ]) == (subscript_expression "piVar7[iVar5 + iVar6]" identifier [ (binary_expression "iVar5 + iVar6" identifier + identifier) ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }) (else_clause "else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" else (compound_statement "{\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" { (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);" do (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];" (assignment_expression "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6]" identifier = (binary_expression "(uint)piVar8[iVar6] < (uint)piVar7[iVar6]" (cast_expression "(uint)piVar8[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[iVar6]" identifier [ identifier ])) < (cast_expression "(uint)piVar7[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar7[iVar6]" identifier [ identifier ])))) ;) (expression_statement "bVar10 = piVar8[iVar6] == piVar7[iVar6];" (assignment_expression "bVar10 = piVar8[iVar6] == piVar7[iVar6]" identifier = (binary_expression "piVar8[iVar6] == piVar7[iVar6]" (subscript_expression "piVar8[iVar6]" identifier [ identifier ]) == (subscript_expression "piVar7[iVar6]" identifier [ identifier ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }))))) (if_statement "if (!bVar9 && !bVar10) {\n      return iVar4;\n    }" if (parenthesized_expression "(!bVar9 && !bVar10)" ( (binary_expression "!bVar9 && !bVar10" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) (compound_statement "{\n      return iVar4;\n    }" { (return_statement "return iVar4;" return identifier ;) })) })) (labeled_statement "LAB_000210f8:\n  return -iVar4;" statement_identifier : (return_statement "return -iVar4;" return (unary_expression "-iVar4" - identifier) ;)) })))
(translation_unit "/* WARNING: Switch with 1 destination removed at 0x0001b6e0 */\n\nint __gmpf_cmp(mpf_srcptr u,mpf_srcptr v)\n\n{\n  uint uVar1;\n  uint uVar2;\n  mp_limb_t mVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  mp_limb_t *pmVar7;\n  mp_limb_t *pmVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = u->_mp_size;\n  uVar2 = v->_mp_size;\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (v->_mp_exp < u->_mp_exp) {\n    return iVar4;\n  }\n  if (v->_mp_exp <= u->_mp_exp) {\n    pmVar8 = u->_mp_d;\n    pmVar7 = v->_mp_d;\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*pmVar8 != 0) goto LAB_000210ce;\n    do {\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*pmVar8 == 0);\n    mVar3 = *pmVar7;\n    while (mVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}\n\n" comment (function_definition "int __gmpf_cmp(mpf_srcptr u,mpf_srcptr v)\n\n{\n  uint uVar1;\n  uint uVar2;\n  mp_limb_t mVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  mp_limb_t *pmVar7;\n  mp_limb_t *pmVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = u->_mp_size;\n  uVar2 = v->_mp_size;\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (v->_mp_exp < u->_mp_exp) {\n    return iVar4;\n  }\n  if (v->_mp_exp <= u->_mp_exp) {\n    pmVar8 = u->_mp_d;\n    pmVar7 = v->_mp_d;\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*pmVar8 != 0) goto LAB_000210ce;\n    do {\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*pmVar8 == 0);\n    mVar3 = *pmVar7;\n    while (mVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" primitive_type (function_declarator "__gmpf_cmp(mpf_srcptr u,mpf_srcptr v)" identifier (parameter_list "(mpf_srcptr u,mpf_srcptr v)" ( (parameter_declaration "mpf_srcptr u" type_identifier identifier) , (parameter_declaration "mpf_srcptr v" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  mp_limb_t mVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  mp_limb_t *pmVar7;\n  mp_limb_t *pmVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = u->_mp_size;\n  uVar2 = v->_mp_size;\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (v->_mp_exp < u->_mp_exp) {\n    return iVar4;\n  }\n  if (v->_mp_exp <= u->_mp_exp) {\n    pmVar8 = u->_mp_d;\n    pmVar7 = v->_mp_d;\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*pmVar8 != 0) goto LAB_000210ce;\n    do {\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*pmVar8 == 0);\n    mVar3 = *pmVar7;\n    while (mVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "mp_limb_t mVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "mp_limb_t *pmVar7;" type_identifier (pointer_declarator "*pmVar7" * identifier) ;) (declaration "mp_limb_t *pmVar8;" type_identifier (pointer_declarator "*pmVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (expression_statement "uVar1 = u->_mp_size;" (assignment_expression "uVar1 = u->_mp_size" identifier = (field_expression "u->_mp_size" identifier -> field_identifier)) ;) (expression_statement "uVar2 = v->_mp_size;" (assignment_expression "uVar2 = v->_mp_size" identifier = (field_expression "v->_mp_size" identifier -> field_identifier)) ;) (if_statement "if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" if (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }" { (expression_statement "iVar4 = -1;" (assignment_expression "iVar4 = -1" identifier = number_literal) ;) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }" if (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" ( (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) ))) < number_literal) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) }) (else_clause "else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" else (compound_statement "{\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" { (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }" if (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" ( (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) ))) < number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return -(uint)(uVar2 != 0);\n    }" { (return_statement "return -(uint)(uVar2 != 0);" return (unary_expression "-(uint)(uVar2 != 0)" - (call_expression "(uint)(uVar2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )))) ;) })) }))) (if_statement "if (uVar2 == 0) {\n    return 1;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (v->_mp_exp < u->_mp_exp) {\n    return iVar4;\n  }" if (parenthesized_expression "(v->_mp_exp < u->_mp_exp)" ( (binary_expression "v->_mp_exp < u->_mp_exp" (field_expression "v->_mp_exp" identifier -> field_identifier) < (field_expression "u->_mp_exp" identifier -> field_identifier)) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if (v->_mp_exp <= u->_mp_exp) {\n    pmVar8 = u->_mp_d;\n    pmVar7 = v->_mp_d;\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*pmVar8 != 0) goto LAB_000210ce;\n    do {\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*pmVar8 == 0);\n    mVar3 = *pmVar7;\n    while (mVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" if (parenthesized_expression "(v->_mp_exp <= u->_mp_exp)" ( (binary_expression "v->_mp_exp <= u->_mp_exp" (field_expression "v->_mp_exp" identifier -> field_identifier) <= (field_expression "u->_mp_exp" identifier -> field_identifier)) )) (compound_statement "{\n    pmVar8 = u->_mp_d;\n    pmVar7 = v->_mp_d;\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*pmVar8 != 0) goto LAB_000210ce;\n    do {\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*pmVar8 == 0);\n    mVar3 = *pmVar7;\n    while (mVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" { (expression_statement "pmVar8 = u->_mp_d;" (assignment_expression "pmVar8 = u->_mp_d" identifier = (field_expression "u->_mp_d" identifier -> field_identifier)) ;) (expression_statement "pmVar7 = v->_mp_d;" (assignment_expression "pmVar7 = v->_mp_d" identifier = (field_expression "v->_mp_d" identifier -> field_identifier)) ;) (expression_statement "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);" (assignment_expression "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" identifier = (binary_expression "(uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (parenthesized_expression "(uVar1 ^ (int)uVar1 >> 0x1f)" ( (binary_expression "uVar1 ^ (int)uVar1 >> 0x1f" identifier ^ (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar1 >> 0x1f)" ( (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);" (assignment_expression "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" identifier = (binary_expression "(uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" (parenthesized_expression "(uVar2 ^ (int)uVar2 >> 0x1f)" ( (binary_expression "uVar2 ^ (int)uVar2 >> 0x1f" identifier ^ (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar2 >> 0x1f)" ( (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (*pmVar8 != 0) goto LAB_000210ce;" if (parenthesized_expression "(*pmVar8 != 0)" ( (binary_expression "*pmVar8 != 0" (pointer_expression "*pmVar8" * identifier) != number_literal) )) (goto_statement "goto LAB_000210ce;" goto statement_identifier ;)) (do_statement "do {\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*pmVar8 == 0);" do (compound_statement "{\n      pmVar8 = pmVar8 + 1;\n      iVar6 = iVar6 + -1;\n    }" { (expression_statement "pmVar8 = pmVar8 + 1;" (assignment_expression "pmVar8 = pmVar8 + 1" identifier = (binary_expression "pmVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*pmVar8 == 0)" ( (binary_expression "*pmVar8 == 0" (pointer_expression "*pmVar8" * identifier) == number_literal) )) ;) (expression_statement "mVar3 = *pmVar7;" (assignment_expression "mVar3 = *pmVar7" identifier = (pointer_expression "*pmVar7" * identifier)) ;) (while_statement "while (mVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }" while (parenthesized_expression "(mVar3 == 0)" ( (binary_expression "mVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar5 = iVar5 + -1;\n      pmVar7 = pmVar7 + 1;\nLAB_000210ce:\n      mVar3 = *pmVar7;\n    }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (expression_statement "pmVar7 = pmVar7 + 1;" (assignment_expression "pmVar7 = pmVar7 + 1" identifier = (binary_expression "pmVar7 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_000210ce:\n      mVar3 = *pmVar7;" statement_identifier : (expression_statement "mVar3 = *pmVar7;" (assignment_expression "mVar3 = *pmVar7" identifier = (pointer_expression "*pmVar7" * identifier)) ;)) })) (if_statement "if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }" if (parenthesized_expression "(iVar5 < iVar6)" ( (binary_expression "iVar5 < iVar6" identifier < identifier) )) (compound_statement "{\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);\n    }" { (expression_statement "iVar6 = iVar6 - iVar5;" (assignment_expression "iVar6 = iVar6 - iVar5" identifier = (binary_expression "iVar6 - iVar5" identifier - identifier)) ;) (do_statement "do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      } while (bVar10);" do (compound_statement "{\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];\n        bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];\n      }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (if_statement "if (iVar5 < 0) {\n          return iVar4;\n        }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n          return iVar4;\n        }" { (return_statement "return iVar4;" return identifier ;) })) (expression_statement "bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5];" (assignment_expression "bVar9 = pmVar8[iVar6 + iVar5] < pmVar7[iVar5]" identifier = (binary_expression "pmVar8[iVar6 + iVar5] < pmVar7[iVar5]" (subscript_expression "pmVar8[iVar6 + iVar5]" identifier [ (binary_expression "iVar6 + iVar5" identifier + identifier) ]) < (subscript_expression "pmVar7[iVar5]" identifier [ identifier ]))) ;) (expression_statement "bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5];" (assignment_expression "bVar10 = pmVar8[iVar6 + iVar5] == pmVar7[iVar5]" identifier = (binary_expression "pmVar8[iVar6 + iVar5] == pmVar7[iVar5]" (subscript_expression "pmVar8[iVar6 + iVar5]" identifier [ (binary_expression "iVar6 + iVar5" identifier + identifier) ]) == (subscript_expression "pmVar7[iVar5]" identifier [ identifier ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }) (else_clause "else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }" else (if_statement "if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }" if (parenthesized_expression "(iVar6 < iVar5)" ( (binary_expression "iVar6 < iVar5" identifier < identifier) )) (compound_statement "{\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }" { (expression_statement "iVar5 = iVar5 - iVar6;" (assignment_expression "iVar5 = iVar5 - iVar6" identifier = (binary_expression "iVar5 - iVar6" identifier - identifier)) ;) (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      } while (bVar10);" do (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];\n      }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < 0) goto LAB_000210f8;" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (goto_statement "goto LAB_000210f8;" goto statement_identifier ;)) (expression_statement "bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6];" (assignment_expression "bVar9 = pmVar8[iVar6] < pmVar7[iVar5 + iVar6]" identifier = (binary_expression "pmVar8[iVar6] < pmVar7[iVar5 + iVar6]" (subscript_expression "pmVar8[iVar6]" identifier [ identifier ]) < (subscript_expression "pmVar7[iVar5 + iVar6]" identifier [ (binary_expression "iVar5 + iVar6" identifier + identifier) ]))) ;) (expression_statement "bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6];" (assignment_expression "bVar10 = pmVar8[iVar6] == pmVar7[iVar5 + iVar6]" identifier = (binary_expression "pmVar8[iVar6] == pmVar7[iVar5 + iVar6]" (subscript_expression "pmVar8[iVar6]" identifier [ identifier ]) == (subscript_expression "pmVar7[iVar5 + iVar6]" identifier [ (binary_expression "iVar5 + iVar6" identifier + identifier) ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }) (else_clause "else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }" else (compound_statement "{\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);\n    }" { (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      } while (bVar10);" do (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = pmVar8[iVar6] < pmVar7[iVar6];\n        bVar10 = pmVar8[iVar6] == pmVar7[iVar6];\n      }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar9 = pmVar8[iVar6] < pmVar7[iVar6];" (assignment_expression "bVar9 = pmVar8[iVar6] < pmVar7[iVar6]" identifier = (binary_expression "pmVar8[iVar6] < pmVar7[iVar6]" (subscript_expression "pmVar8[iVar6]" identifier [ identifier ]) < (subscript_expression "pmVar7[iVar6]" identifier [ identifier ]))) ;) (expression_statement "bVar10 = pmVar8[iVar6] == pmVar7[iVar6];" (assignment_expression "bVar10 = pmVar8[iVar6] == pmVar7[iVar6]" identifier = (binary_expression "pmVar8[iVar6] == pmVar7[iVar6]" (subscript_expression "pmVar8[iVar6]" identifier [ identifier ]) == (subscript_expression "pmVar7[iVar6]" identifier [ identifier ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }))))) (if_statement "if (!bVar9 && !bVar10) {\n      return iVar4;\n    }" if (parenthesized_expression "(!bVar9 && !bVar10)" ( (binary_expression "!bVar9 && !bVar10" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) (compound_statement "{\n      return iVar4;\n    }" { (return_statement "return iVar4;" return identifier ;) })) })) (labeled_statement "LAB_000210f8:\n  return -iVar4;" statement_identifier : (return_statement "return -iVar4;" return (unary_expression "-iVar4" - identifier) ;)) })))
(translation_unit "int __gmpf_cmp(int param_1,int param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}\n\n" (function_definition "int __gmpf_cmp(int param_1,int param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" primitive_type (function_declarator "__gmpf_cmp(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (expression_statement "uVar1 = *(uint *)(param_1 + 4);" (assignment_expression "uVar1 = *(uint *)(param_1 + 4)" identifier = (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(uint *)(param_2 + 4);" (assignment_expression "uVar2 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" if (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }" { (expression_statement "iVar4 = -1;" (assignment_expression "iVar4 = -1" identifier = number_literal) ;) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }" if (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" ( (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) ))) < number_literal) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) }) (else_clause "else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" else (compound_statement "{\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" { (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }" if (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" ( (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) ))) < number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return -(uint)(uVar2 != 0);\n    }" { (return_statement "return -(uint)(uVar2 != 0);" return (unary_expression "-(uint)(uVar2 != 0)" - (call_expression "(uint)(uVar2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )))) ;) })) }))) (if_statement "if (uVar2 == 0) {\n    return 1;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }" if (parenthesized_expression "(*(int *)(param_2 + 8) < *(int *)(param_1 + 8))" ( (binary_expression "*(int *)(param_2 + 8) < *(int *)(param_1 + 8)" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) < (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" if (parenthesized_expression "(*(int *)(param_2 + 8) <= *(int *)(param_1 + 8))" ( (binary_expression "*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) <= (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" { (expression_statement "piVar8 = *(int **)(param_1 + 0xc);" (assignment_expression "piVar8 = *(int **)(param_1 + 0xc)" identifier = (pointer_expression "*(int **)(param_1 + 0xc)" * (cast_expression "(int **)(param_1 + 0xc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "piVar7 = *(int **)(param_2 + 0xc);" (assignment_expression "piVar7 = *(int **)(param_2 + 0xc)" identifier = (pointer_expression "*(int **)(param_2 + 0xc)" * (cast_expression "(int **)(param_2 + 0xc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);" (assignment_expression "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" identifier = (binary_expression "(uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (parenthesized_expression "(uVar1 ^ (int)uVar1 >> 0x1f)" ( (binary_expression "uVar1 ^ (int)uVar1 >> 0x1f" identifier ^ (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar1 >> 0x1f)" ( (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);" (assignment_expression "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" identifier = (binary_expression "(uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" (parenthesized_expression "(uVar2 ^ (int)uVar2 >> 0x1f)" ( (binary_expression "uVar2 ^ (int)uVar2 >> 0x1f" identifier ^ (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar2 >> 0x1f)" ( (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (*piVar8 != 0) goto LAB_000210ce;" if (parenthesized_expression "(*piVar8 != 0)" ( (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" * identifier) != number_literal) )) (goto_statement "goto LAB_000210ce;" goto statement_identifier ;)) (do_statement "do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);" do (compound_statement "{\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    }" { (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" identifier = (binary_expression "piVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*piVar8 == 0)" ( (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" * identifier) == number_literal) )) ;) (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;) (while_statement "while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }" while (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (expression_statement "piVar7 = piVar7 + 1;" (assignment_expression "piVar7 = piVar7 + 1" identifier = (binary_expression "piVar7 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_000210ce:\n      iVar3 = *piVar7;" statement_identifier : (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;)) })) (if_statement "if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" if (parenthesized_expression "(iVar5 < iVar6)" ( (binary_expression "iVar5 < iVar6" identifier < identifier) )) (compound_statement "{\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }" { (expression_statement "iVar6 = iVar6 - iVar5;" (assignment_expression "iVar6 = iVar6 - iVar5" identifier = (binary_expression "iVar6 - iVar5" identifier - identifier)) ;) (do_statement "do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);" do (compound_statement "{\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (if_statement "if (iVar5 < 0) {\n          return iVar4;\n        }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n          return iVar4;\n        }" { (return_statement "return iVar4;" return identifier ;) })) (expression_statement "bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];" (assignment_expression "bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5]" identifier = (binary_expression "(uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5]" (cast_expression "(uint)piVar8[iVar6 + iVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[iVar6 + iVar5]" identifier [ (binary_expression "iVar6 + iVar5" identifier + identifier) ])) < (cast_expression "(uint)piVar7[iVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar7[iVar5]" identifier [ identifier ])))) ;) (expression_statement "bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];" (assignment_expression "bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5]" identifier = (binary_expression "piVar8[iVar6 + iVar5] == piVar7[iVar5]" (subscript_expression "piVar8[iVar6 + iVar5]" identifier [ (binary_expression "iVar6 + iVar5" identifier + identifier) ]) == (subscript_expression "piVar7[iVar5]" identifier [ identifier ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }) (else_clause "else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" else (if_statement "if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" if (parenthesized_expression "(iVar6 < iVar5)" ( (binary_expression "iVar6 < iVar5" identifier < identifier) )) (compound_statement "{\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }" { (expression_statement "iVar5 = iVar5 - iVar6;" (assignment_expression "iVar5 = iVar5 - iVar6" identifier = (binary_expression "iVar5 - iVar6" identifier - identifier)) ;) (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);" do (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < 0) goto LAB_000210f8;" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (goto_statement "goto LAB_000210f8;" goto statement_identifier ;)) (expression_statement "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];" (assignment_expression "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6]" identifier = (binary_expression "(uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6]" (cast_expression "(uint)piVar8[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[iVar6]" identifier [ identifier ])) < (cast_expression "(uint)piVar7[iVar5 + iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar7[iVar5 + iVar6]" identifier [ (binary_expression "iVar5 + iVar6" identifier + identifier) ])))) ;) (expression_statement "bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];" (assignment_expression "bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6]" identifier = (binary_expression "piVar8[iVar6] == piVar7[iVar5 + iVar6]" (subscript_expression "piVar8[iVar6]" identifier [ identifier ]) == (subscript_expression "piVar7[iVar5 + iVar6]" identifier [ (binary_expression "iVar5 + iVar6" identifier + identifier) ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }) (else_clause "else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" else (compound_statement "{\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" { (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);" do (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];" (assignment_expression "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6]" identifier = (binary_expression "(uint)piVar8[iVar6] < (uint)piVar7[iVar6]" (cast_expression "(uint)piVar8[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[iVar6]" identifier [ identifier ])) < (cast_expression "(uint)piVar7[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar7[iVar6]" identifier [ identifier ])))) ;) (expression_statement "bVar10 = piVar8[iVar6] == piVar7[iVar6];" (assignment_expression "bVar10 = piVar8[iVar6] == piVar7[iVar6]" identifier = (binary_expression "piVar8[iVar6] == piVar7[iVar6]" (subscript_expression "piVar8[iVar6]" identifier [ identifier ]) == (subscript_expression "piVar7[iVar6]" identifier [ identifier ]))) ;) }) while (parenthesized_expression "(bVar10)" ( identifier )) ;) }))))) (if_statement "if (!bVar9 && !bVar10) {\n      return iVar4;\n    }" if (parenthesized_expression "(!bVar9 && !bVar10)" ( (binary_expression "!bVar9 && !bVar10" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) (compound_statement "{\n      return iVar4;\n    }" { (return_statement "return iVar4;" return identifier ;) })) })) (labeled_statement "LAB_000210f8:\n  return -iVar4;" statement_identifier : (return_statement "return -iVar4;" return (unary_expression "-iVar4" - identifier) ;)) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (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 ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT ^ IDENT) ))) < LIT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT ^ IDENT) ))) < LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) )))) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])) < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ]) == (subscript_expression IDENT [ IDENT ]))) ;) }) while (parenthesized_expression ( IDENT )) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])) < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ])))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ IDENT ]) == (subscript_expression IDENT [ (binary_expression IDENT + IDENT) ]))) ;) }) while (parenthesized_expression ( IDENT )) ;) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])) < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ IDENT ]) == (subscript_expression IDENT [ IDENT ]))) ;) }) while (parenthesized_expression ( IDENT )) ;) }))))) (if_statement if (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) (compound_statement { (return_statement return IDENT ;) })) })) (labeled_statement statement_identifier : (return_statement return (unary_expression - IDENT) ;)) })))
(function_definition "int __gmpf_cmp(int param_1,int param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" (primitive_type "int") (function_declarator "__gmpf_cmp(int param_1,int param_2)" (identifier "__gmpf_cmp") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int *piVar7;\n  int *piVar8;\n  bool bVar9;\n  bool bVar10;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = *(uint *)(param_2 + 4);\n  if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }\n  if (uVar2 == 0) {\n    return 1;\n  }\n  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }\n  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }\nLAB_000210f8:\n  return -iVar4;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (declaration "bool bVar9;" (primitive_type "bool") (identifier "bVar9") (; ";")) (declaration "bool bVar10;" (primitive_type "bool") (identifier "bVar10") (; ";")) (expression_statement "uVar1 = *(uint *)(param_1 + 4);" (assignment_expression "uVar1 = *(uint *)(param_1 + 4)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar2 = *(uint *)(param_2 + 4);" (assignment_expression "uVar2 = *(uint *)(param_2 + 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if ((int)uVar1 < 0) {\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }\n  else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" (if "if") (parenthesized_expression "((int)uVar1 < 0)" (( "(") (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    iVar4 = -1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }\n  }" ({ "{") (expression_statement "iVar4 = -1;" (assignment_expression "iVar4 = -1" (identifier "iVar4") (= "=") (number_literal "-1")) (; ";")) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return -1;\n    }" (if "if") (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" (( "(") (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 ^ uVar2)" (( "(") (binary_expression "uVar1 ^ uVar2" (identifier "uVar1") (^ "^") (identifier "uVar2")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      return -1;\n    }" ({ "{") (return_statement "return -1;" (return "return") (number_literal "-1") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" (else "else") (compound_statement "{\n    iVar4 = 1;\n    if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }\n    if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }\n  }" ({ "{") (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" (identifier "iVar4") (= "=") (number_literal "1")) (; ";")) (if_statement "if ((int)(uVar1 ^ uVar2) < 0) {\n      return 1;\n    }" (if "if") (parenthesized_expression "((int)(uVar1 ^ uVar2) < 0)" (( "(") (binary_expression "(int)(uVar1 ^ uVar2) < 0" (cast_expression "(int)(uVar1 ^ uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 ^ uVar2)" (( "(") (binary_expression "uVar1 ^ uVar2" (identifier "uVar1") (^ "^") (identifier "uVar2")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (uVar1 == 0) {\n      return -(uint)(uVar2 != 0);\n    }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return -(uint)(uVar2 != 0);\n    }" ({ "{") (return_statement "return -(uint)(uVar2 != 0);" (return "return") (unary_expression "-(uint)(uVar2 != 0)" (- "-") (call_expression "(uint)(uVar2 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")))) (; ";")) (} "}"))) (} "}")))) (if_statement "if (uVar2 == 0) {\n    return 1;\n  }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 1;\n  }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {\n    return iVar4;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 8) < *(int *)(param_1 + 8))" (( "(") (binary_expression "*(int *)(param_2 + 8) < *(int *)(param_1 + 8)" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (< "<") (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) () ")")) (compound_statement "{\n    return iVar4;\n  }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (if_statement "if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 8) <= *(int *)(param_1 + 8))" (( "(") (binary_expression "*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (<= "<=") (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) () ")")) (compound_statement "{\n    piVar8 = *(int **)(param_1 + 0xc);\n    piVar7 = *(int **)(param_2 + 0xc);\n    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);\n    if (*piVar8 != 0) goto LAB_000210ce;\n    do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);\n    iVar3 = *piVar7;\n    while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }\n    if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }\n    if (!bVar9 && !bVar10) {\n      return iVar4;\n    }\n  }" ({ "{") (expression_statement "piVar8 = *(int **)(param_1 + 0xc);" (assignment_expression "piVar8 = *(int **)(param_1 + 0xc)" (identifier "piVar8") (= "=") (pointer_expression "*(int **)(param_1 + 0xc)" (* "*") (cast_expression "(int **)(param_1 + 0xc)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "piVar7 = *(int **)(param_2 + 0xc);" (assignment_expression "piVar7 = *(int **)(param_2 + 0xc)" (identifier "piVar7") (= "=") (pointer_expression "*(int **)(param_2 + 0xc)" (* "*") (cast_expression "(int **)(param_2 + 0xc)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);" (assignment_expression "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (identifier "iVar6") (= "=") (binary_expression "(uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (parenthesized_expression "(uVar1 ^ (int)uVar1 >> 0x1f)" (( "(") (binary_expression "uVar1 ^ (int)uVar1 >> 0x1f" (identifier "uVar1") (^ "^") (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (>> ">>") (number_literal "0x1f"))) () ")")) (- "-") (parenthesized_expression "((int)uVar1 >> 0x1f)" (( "(") (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);" (assignment_expression "iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" (identifier "iVar5") (= "=") (binary_expression "(uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f)" (parenthesized_expression "(uVar2 ^ (int)uVar2 >> 0x1f)" (( "(") (binary_expression "uVar2 ^ (int)uVar2 >> 0x1f" (identifier "uVar2") (^ "^") (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (>> ">>") (number_literal "0x1f"))) () ")")) (- "-") (parenthesized_expression "((int)uVar2 >> 0x1f)" (( "(") (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (*piVar8 != 0) goto LAB_000210ce;" (if "if") (parenthesized_expression "(*piVar8 != 0)" (( "(") (binary_expression "*piVar8 != 0" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000210ce;" (goto "goto") (statement_identifier "LAB_000210ce") (; ";"))) (do_statement "do {\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    } while (*piVar8 == 0);" (do "do") (compound_statement "{\n      piVar8 = piVar8 + 1;\n      iVar6 = iVar6 + -1;\n    }" ({ "{") (expression_statement "piVar8 = piVar8 + 1;" (assignment_expression "piVar8 = piVar8 + 1" (identifier "piVar8") (= "=") (binary_expression "piVar8 + 1" (identifier "piVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*piVar8 == 0)" (( "(") (binary_expression "*piVar8 == 0" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (== "==") (number_literal "0")) () ")")) (; ";")) (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" (identifier "iVar3") (= "=") (pointer_expression "*piVar7" (* "*") (identifier "piVar7"))) (; ";")) (while_statement "while (iVar3 == 0) {\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }" (while "while") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar5 = iVar5 + -1;\n      piVar7 = piVar7 + 1;\nLAB_000210ce:\n      iVar3 = *piVar7;\n    }" ({ "{") (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "piVar7 = piVar7 + 1;" (assignment_expression "piVar7 = piVar7 + 1" (identifier "piVar7") (= "=") (binary_expression "piVar7 + 1" (identifier "piVar7") (+ "+") (number_literal "1"))) (; ";")) (labeled_statement "LAB_000210ce:\n      iVar3 = *piVar7;" (statement_identifier "LAB_000210ce") (: ":") (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" (identifier "iVar3") (= "=") (pointer_expression "*piVar7" (* "*") (identifier "piVar7"))) (; ";"))) (} "}"))) (if_statement "if (iVar5 < iVar6) {\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }\n    else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" (if "if") (parenthesized_expression "(iVar5 < iVar6)" (( "(") (binary_expression "iVar5 < iVar6" (identifier "iVar5") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n      iVar6 = iVar6 - iVar5;\n      do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);\n    }" ({ "{") (expression_statement "iVar6 = iVar6 - iVar5;" (assignment_expression "iVar6 = iVar6 - iVar5" (identifier "iVar6") (= "=") (binary_expression "iVar6 - iVar5" (identifier "iVar6") (- "-") (identifier "iVar5"))) (; ";")) (do_statement "do {\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      } while (bVar10);" (do "do") (compound_statement "{\n        iVar5 = iVar5 + -1;\n        if (iVar5 < 0) {\n          return iVar4;\n        }\n        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];\n        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];\n      }" ({ "{") (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar5 < 0) {\n          return iVar4;\n        }" (if "if") (parenthesized_expression "(iVar5 < 0)" (( "(") (binary_expression "iVar5 < 0" (identifier "iVar5") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          return iVar4;\n        }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (expression_statement "bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];" (assignment_expression "bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5]" (identifier "bVar9") (= "=") (binary_expression "(uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5]" (cast_expression "(uint)piVar8[iVar6 + iVar5]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar8[iVar6 + iVar5]" (identifier "piVar8") ([ "[") (binary_expression "iVar6 + iVar5" (identifier "iVar6") (+ "+") (identifier "iVar5")) (] "]"))) (< "<") (cast_expression "(uint)piVar7[iVar5]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar7[iVar5]" (identifier "piVar7") ([ "[") (identifier "iVar5") (] "]"))))) (; ";")) (expression_statement "bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];" (assignment_expression "bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5]" (identifier "bVar10") (= "=") (binary_expression "piVar8[iVar6 + iVar5] == piVar7[iVar5]" (subscript_expression "piVar8[iVar6 + iVar5]" (identifier "piVar8") ([ "[") (binary_expression "iVar6 + iVar5" (identifier "iVar6") (+ "+") (identifier "iVar5")) (] "]")) (== "==") (subscript_expression "piVar7[iVar5]" (identifier "piVar7") ([ "[") (identifier "iVar5") (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (; ";")) (} "}")) (else_clause "else if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" (else "else") (if_statement "if (iVar6 < iVar5) {\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }\n    else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" (if "if") (parenthesized_expression "(iVar6 < iVar5)" (( "(") (binary_expression "iVar6 < iVar5" (identifier "iVar6") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n      iVar5 = iVar5 - iVar6;\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);\n    }" ({ "{") (expression_statement "iVar5 = iVar5 - iVar6;" (assignment_expression "iVar5 = iVar5 - iVar6" (identifier "iVar5") (= "=") (binary_expression "iVar5 - iVar6" (identifier "iVar5") (- "-") (identifier "iVar6"))) (; ";")) (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      } while (bVar10);" (do "do") (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) goto LAB_000210f8;\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];\n      }" ({ "{") (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar6 < 0) goto LAB_000210f8;" (if "if") (parenthesized_expression "(iVar6 < 0)" (( "(") (binary_expression "iVar6 < 0" (identifier "iVar6") (< "<") (number_literal "0")) () ")")) (goto_statement "goto LAB_000210f8;" (goto "goto") (statement_identifier "LAB_000210f8") (; ";"))) (expression_statement "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];" (assignment_expression "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6]" (identifier "bVar9") (= "=") (binary_expression "(uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6]" (cast_expression "(uint)piVar8[iVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar8[iVar6]" (identifier "piVar8") ([ "[") (identifier "iVar6") (] "]"))) (< "<") (cast_expression "(uint)piVar7[iVar5 + iVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar7[iVar5 + iVar6]" (identifier "piVar7") ([ "[") (binary_expression "iVar5 + iVar6" (identifier "iVar5") (+ "+") (identifier "iVar6")) (] "]"))))) (; ";")) (expression_statement "bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];" (assignment_expression "bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6]" (identifier "bVar10") (= "=") (binary_expression "piVar8[iVar6] == piVar7[iVar5 + iVar6]" (subscript_expression "piVar8[iVar6]" (identifier "piVar8") ([ "[") (identifier "iVar6") (] "]")) (== "==") (subscript_expression "piVar7[iVar5 + iVar6]" (identifier "piVar7") ([ "[") (binary_expression "iVar5 + iVar6" (identifier "iVar5") (+ "+") (identifier "iVar6")) (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (; ";")) (} "}")) (else_clause "else {\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" (else "else") (compound_statement "{\n      do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);\n    }" ({ "{") (do_statement "do {\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      } while (bVar10);" (do "do") (compound_statement "{\n        iVar6 = iVar6 + -1;\n        if (iVar6 < 0) {\n          return 0;\n        }\n        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];\n        bVar10 = piVar8[iVar6] == piVar7[iVar6];\n      }" ({ "{") (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar6 < 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar6 < 0)" (( "(") (binary_expression "iVar6 < 0" (identifier "iVar6") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];" (assignment_expression "bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6]" (identifier "bVar9") (= "=") (binary_expression "(uint)piVar8[iVar6] < (uint)piVar7[iVar6]" (cast_expression "(uint)piVar8[iVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar8[iVar6]" (identifier "piVar8") ([ "[") (identifier "iVar6") (] "]"))) (< "<") (cast_expression "(uint)piVar7[iVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar7[iVar6]" (identifier "piVar7") ([ "[") (identifier "iVar6") (] "]"))))) (; ";")) (expression_statement "bVar10 = piVar8[iVar6] == piVar7[iVar6];" (assignment_expression "bVar10 = piVar8[iVar6] == piVar7[iVar6]" (identifier "bVar10") (= "=") (binary_expression "piVar8[iVar6] == piVar7[iVar6]" (subscript_expression "piVar8[iVar6]" (identifier "piVar8") ([ "[") (identifier "iVar6") (] "]")) (== "==") (subscript_expression "piVar7[iVar6]" (identifier "piVar7") ([ "[") (identifier "iVar6") (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (; ";")) (} "}")))))) (if_statement "if (!bVar9 && !bVar10) {\n      return iVar4;\n    }" (if "if") (parenthesized_expression "(!bVar9 && !bVar10)" (( "(") (binary_expression "!bVar9 && !bVar10" (unary_expression "!bVar9" (! "!") (identifier "bVar9")) (&& "&&") (unary_expression "!bVar10" (! "!") (identifier "bVar10"))) () ")")) (compound_statement "{\n      return iVar4;\n    }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_000210f8:\n  return -iVar4;" (statement_identifier "LAB_000210f8") (: ":") (return_statement "return -iVar4;" (return "return") (unary_expression "-iVar4" (- "-") (identifier "iVar4")) (; ";"))) (} "}")))

/* WARNING: Switch with 1 destination removed at 0x0001b6e0 */

int function_1(type_1 u,type_1 v)

{
  type_2 var_1;
  type_2 var_2;
  type_3 var_5;
  int iVar4;
  int var_6;
  int var_4;
  type_3 *var_7;
  type_3 *var_3;
  bool bVar9;
  bool bVar10;
  
  var_1 = u->_mp_size;
  var_2 = v->_mp_size;
  if ((int)var_1 < 0) {
    iVar4 = -1;
    if ((int)(var_1 ^ var_2) < 0) {
      return -1;
    }
  }
  else {
    iVar4 = 1;
    if ((int)(var_1 ^ var_2) < 0) {
      return 1;
    }
    if (var_1 == 0) {
      return -(type_2)(var_2 != 0);
    }
  }
  if (var_2 == 0) {
    return 1;
  }
  if (v->_mp_exp < u->_mp_exp) {
    return iVar4;
  }
  if (v->_mp_exp <= u->_mp_exp) {
    var_3 = u->_mp_d;
    var_7 = v->_mp_d;
    var_4 = (var_1 ^ (int)var_1 >> 0x1f) - ((int)var_1 >> 0x1f);
    var_6 = (var_2 ^ (int)var_2 >> 0x1f) - ((int)var_2 >> 0x1f);
    if (*var_3 != 0) goto LAB_000210ce;
    do {
      var_3 = var_3 + 1;
      var_4 = var_4 + -1;
    } while (*var_3 == 0);
    var_5 = *var_7;
    while (var_5 == 0) {
      var_6 = var_6 + -1;
      var_7 = var_7 + 1;
LAB_000210ce:
      var_5 = *var_7;
    }
    if (var_6 < var_4) {
      var_4 = var_4 - var_6;
      do {
        var_6 = var_6 + -1;
        if (var_6 < 0) {
          return iVar4;
        }
        bVar9 = var_3[var_4 + var_6] < var_7[var_6];
        bVar10 = var_3[var_4 + var_6] == var_7[var_6];
      } while (bVar10);
    }
    else if (var_4 < var_6) {
      var_6 = var_6 - var_4;
      do {
        var_4 = var_4 + -1;
        if (var_4 < 0) goto LAB_000210f8;
        bVar9 = var_3[var_4] < var_7[var_6 + var_4];
        bVar10 = var_3[var_4] == var_7[var_6 + var_4];
      } while (bVar10);
    }
    else {
      do {
        var_4 = var_4 + -1;
        if (var_4 < 0) {
          return 0;
        }
        bVar9 = var_3[var_4] < var_7[var_4];
        bVar10 = var_3[var_4] == var_7[var_4];
      } while (bVar10);
    }
    if (!bVar9 && !bVar10) {
      return iVar4;
    }
  }
LAB_000210f8:
  return -iVar4;
}


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

/* WARNING: Switch with 1 destination removed at 0x0001b6e0 */

int MASKED(int param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int *piVar7;
  int *piVar8;
  bool bVar9;
  bool bVar10;
  
  uVar1 = *(uint *)(param_1 + 4);
  uVar2 = *(uint *)(param_2 + 4);
  if ((int)uVar1 < 0) {
    iVar4 = -1;
    if ((int)(uVar1 ^ uVar2) < 0) {
      return -1;
    }
  }
  else {
    iVar4 = 1;
    if ((int)(uVar1 ^ uVar2) < 0) {
      return 1;
    }
    if (uVar1 == 0) {
      return -(uint)(uVar2 != 0);
    }
  }
  if (uVar2 == 0) {
    return 1;
  }
  if (*(int *)(param_2 + 8) < *(int *)(param_1 + 8)) {
    return iVar4;
  }
  if (*(int *)(param_2 + 8) <= *(int *)(param_1 + 8)) {
    piVar8 = *(int **)(param_1 + 0xc);
    piVar7 = *(int **)(param_2 + 0xc);
    iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);
    iVar5 = (uVar2 ^ (int)uVar2 >> 0x1f) - ((int)uVar2 >> 0x1f);
    if (*piVar8 != 0) goto LAB_000210ce;
    do {
      piVar8 = piVar8 + 1;
      iVar6 = iVar6 + -1;
    } while (*piVar8 == 0);
    iVar3 = *piVar7;
    while (iVar3 == 0) {
      iVar5 = iVar5 + -1;
      piVar7 = piVar7 + 1;
LAB_000210ce:
      iVar3 = *piVar7;
    }
    if (iVar5 < iVar6) {
      iVar6 = iVar6 - iVar5;
      do {
        iVar5 = iVar5 + -1;
        if (iVar5 < 0) {
          return iVar4;
        }
        bVar9 = (uint)piVar8[iVar6 + iVar5] < (uint)piVar7[iVar5];
        bVar10 = piVar8[iVar6 + iVar5] == piVar7[iVar5];
      } while (bVar10);
    }
    else if (iVar6 < iVar5) {
      iVar5 = iVar5 - iVar6;
      do {
        iVar6 = iVar6 + -1;
        if (iVar6 < 0) goto LAB_000210f8;
        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar5 + iVar6];
        bVar10 = piVar8[iVar6] == piVar7[iVar5 + iVar6];
      } while (bVar10);
    }
    else {
      do {
        iVar6 = iVar6 + -1;
        if (iVar6 < 0) {
          return 0;
        }
        bVar9 = (uint)piVar8[iVar6] < (uint)piVar7[iVar6];
        bVar10 = piVar8[iVar6] == piVar7[iVar6];
      } while (bVar10);
    }
    if (!bVar9 && !bVar10) {
      return iVar4;
    }
  }
LAB_000210f8:
  return -iVar4;
}

