
int __gmpf_cmp_si(mpf_srcptr u,long vval)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  mp_limb_t *pmVar6;
  
  uVar1 = u->_mp_size;
  uVar2 = (int)uVar1 >> 0x1f;
  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f)) {
    return uVar2 | 1;
  }
  if (uVar1 == 0) {
    return -(uint)(vval != 0);
  }
  uVar3 = 1;
  if (vval != 0) {
    uVar3 = uVar2 | 1;
    uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);
    if (u->_mp_exp != 1) {
      if (u->_mp_exp < 1) {
        uVar3 = -uVar3;
      }
      return uVar3;
    }
    pmVar6 = u->_mp_d;
    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;
    if (uVar4 == pmVar6[iVar5]) {
      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {
        iVar5 = iVar5 + -1;
      }
      if (iVar5 < 1) {
        uVar3 = 0;
      }
    }
    else if (pmVar6[iVar5] < uVar4) {
      uVar3 = -uVar3;
    }
  }
  return uVar3;
}



uint __gmpf_cmp_si(int param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int *piVar6;
  
  uVar1 = *(uint *)(param_1 + 4);
  uVar2 = (int)uVar1 >> 0x1f;
  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {
    return uVar2 | 1;
  }
  if (uVar1 == 0) {
    return -(uint)(param_2 != 0);
  }
  uVar3 = 1;
  if (param_2 != 0) {
    uVar3 = uVar2 | 1;
    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);
    if (*(int *)(param_1 + 8) != 1) {
      if (*(int *)(param_1 + 8) < 1) {
        uVar3 = -uVar3;
      }
      return uVar3;
    }
    piVar6 = *(int **)(param_1 + 0xc);
    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;
    if (uVar4 == piVar6[iVar5]) {
      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {
        iVar5 = iVar5 + -1;
      }
      if (iVar5 < 1) {
        uVar3 = 0;
      }
    }
    else if ((uint)piVar6[iVar5] < uVar4) {
      uVar3 = -uVar3;
    }
  }
  return uVar3;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBP,dword ptr [ESP + 0x14]
MOV ECX,dword ptr [ESP + 0x18]
MOV EDX,dword ptr [EBP + 0x4]
MOV ESI,ECX
MOV EAX,EDX
SHR ESI,0x1f
NOT EAX
MOV EBX,ESI
SHR EAX,0x1f
CMP AL,BL
JZ 0x00021350
TEST EDX,EDX
JZ 0x00021340
MOV EAX,0x1
TEST ECX,ECX
JZ 0x00021336
MOV ESI,ECX
MOV EAX,EDX
MOV EDI,dword ptr [EBP + 0x8]
SAR ESI,0x1f
SAR EAX,0x1f
XOR ECX,ESI
OR EAX,0x1
SUB ECX,ESI
CMP EDI,0x1
JNZ 0x00021380
MOV ESI,EDX
MOV EBX,dword ptr [EBP + 0xc]
SAR ESI,0x1f
XOR EDX,ESI
SUB EDX,ESI
SUB EDX,0x1
MOV ESI,dword ptr [EBX + EDX*0x4]
CMP ECX,ESI
JZ 0x00021366
MOV EDX,EAX
NEG EDX
CMP ECX,ESI
CMOVA EAX,EDX
POP EBX
POP ESI
POP EDI
POP EBP
RET
XOR EAX,EAX
TEST ECX,ECX
POP EBX
POP ESI
SETNZ AL
POP EDI
POP EBP
NEG EAX
RET
MOV EAX,EDX
POP EBX
POP ESI
SAR EAX,0x1f
POP EDI
POP EBP
OR EAX,0x1
RET
SUB EDX,0x1
ADD EBX,0x4
MOV ECX,dword ptr [EBX]
TEST ECX,ECX
JZ 0x00021360
TEST EDX,EDX
MOV EDX,0x0
CMOVLE EAX,EDX
JMP 0x00021336
MOV EDX,EAX
POP EBX
POP ESI
NEG EDX
TEST EDI,EDI
POP EDI
POP EBP
CMOVLE EAX,EDX
RET
(translation_unit "uint __gmpf_cmp_si(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}\n\n" (function_definition "uint __gmpf_cmp_si(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" type_identifier (function_declarator "__gmpf_cmp_si(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * 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 = (int)uVar1 >> 0x1f;" (assignment_expression "uVar2 = (int)uVar1 >> 0x1f" identifier = (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (if_statement "if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }" if (parenthesized_expression "((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f))" ( (binary_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)" (cast_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7)" ( (type_descriptor "char" primitive_type) ) (unary_expression "-((char)~(byte)(uVar1 >> 0x18) >> 7)" - (parenthesized_expression "((char)~(byte)(uVar1 >> 0x18) >> 7)" ( (binary_expression "(char)~(byte)(uVar1 >> 0x18) >> 7" (cast_expression "(char)~(byte)(uVar1 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (unary_expression "~(byte)(uVar1 >> 0x18)" ~ (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) ))))) >> number_literal) )))) == (cast_expression "(char)-(char)((int)param_2 >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (unary_expression "-(char)((int)param_2 >> 0x1f)" - (cast_expression "(char)((int)param_2 >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)param_2 >> 0x1f)" ( (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))))) )) (compound_statement "{\n    return uVar2 | 1;\n  }" { (return_statement "return uVar2 | 1;" return (binary_expression "uVar2 | 1" identifier | number_literal) ;) })) (if_statement "if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return -(uint)(param_2 != 0);\n  }" { (return_statement "return -(uint)(param_2 != 0);" return (unary_expression "-(uint)(param_2 != 0)" - (call_expression "(uint)(param_2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )))) ;) })) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" { (expression_statement "uVar3 = uVar2 | 1;" (assignment_expression "uVar3 = uVar2 | 1" identifier = (binary_expression "uVar2 | 1" identifier | number_literal)) ;) (expression_statement "uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);" (assignment_expression "uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f)" identifier = (binary_expression "(param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f)" (parenthesized_expression "(param_2 ^ (int)param_2 >> 0x1f)" ( (binary_expression "param_2 ^ (int)param_2 >> 0x1f" identifier ^ (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)param_2 >> 0x1f)" ( (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 8) != 1)" ( (binary_expression "*(int *)(param_1 + 8) != 1" (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) )))) != number_literal) )) (compound_statement "{\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" { (if_statement "if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 8) < 1)" ( (binary_expression "*(int *)(param_1 + 8) < 1" (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) )))) < number_literal) )) (compound_statement "{\n        uVar3 = -uVar3;\n      }" { (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" identifier = (unary_expression "-uVar3" - identifier)) ;) })) (return_statement "return uVar3;" return identifier ;) })) (expression_statement "piVar6 = *(int **)(param_1 + 0xc);" (assignment_expression "piVar6 = *(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 "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;" (assignment_expression "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1" identifier = (binary_expression "((uVar1 ^ uVar2) - uVar2) + -1" (parenthesized_expression "((uVar1 ^ uVar2) - uVar2)" ( (binary_expression "(uVar1 ^ uVar2) - uVar2" (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) )) - identifier) )) + number_literal)) ;) (if_statement "if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" if (parenthesized_expression "(uVar4 == piVar6[iVar5])" ( (binary_expression "uVar4 == piVar6[iVar5]" identifier == (subscript_expression "piVar6[iVar5]" identifier [ identifier ])) )) (compound_statement "{\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }" { (for_statement "for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }" for ( ; (binary_expression "*piVar6 == 0" (pointer_expression "*piVar6" * identifier) == number_literal) ; (assignment_expression "piVar6 = piVar6 + 1" identifier = (binary_expression "piVar6 + 1" identifier + number_literal)) ) (compound_statement "{\n        iVar5 = iVar5 + -1;\n      }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) })) (if_statement "if (iVar5 < 1) {\n        uVar3 = 0;\n      }" if (parenthesized_expression "(iVar5 < 1)" ( (binary_expression "iVar5 < 1" identifier < number_literal) )) (compound_statement "{\n        uVar3 = 0;\n      }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) }) (else_clause "else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" else (if_statement "if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" if (parenthesized_expression "((uint)piVar6[iVar5] < uVar4)" ( (binary_expression "(uint)piVar6[iVar5] < uVar4" (cast_expression "(uint)piVar6[iVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar6[iVar5]" identifier [ identifier ])) < identifier) )) (compound_statement "{\n      uVar3 = -uVar3;\n    }" { (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" identifier = (unary_expression "-uVar3" - identifier)) ;) })))) })) (return_statement "return uVar3;" return identifier ;) })))
(translation_unit "int __gmpf_cmp_si(mpf_srcptr u,long vval)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  mp_limb_t *pmVar6;\n  \n  uVar1 = u->_mp_size;\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(vval != 0);\n  }\n  uVar3 = 1;\n  if (vval != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);\n    if (u->_mp_exp != 1) {\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    pmVar6 = u->_mp_d;\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == pmVar6[iVar5]) {\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}\n\n" (function_definition "int __gmpf_cmp_si(mpf_srcptr u,long vval)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  mp_limb_t *pmVar6;\n  \n  uVar1 = u->_mp_size;\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(vval != 0);\n  }\n  uVar3 = 1;\n  if (vval != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);\n    if (u->_mp_exp != 1) {\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    pmVar6 = u->_mp_d;\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == pmVar6[iVar5]) {\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" primitive_type (function_declarator "__gmpf_cmp_si(mpf_srcptr u,long vval)" identifier (parameter_list "(mpf_srcptr u,long vval)" ( (parameter_declaration "mpf_srcptr u" type_identifier identifier) , (parameter_declaration "long vval" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  mp_limb_t *pmVar6;\n  \n  uVar1 = u->_mp_size;\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(vval != 0);\n  }\n  uVar3 = 1;\n  if (vval != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);\n    if (u->_mp_exp != 1) {\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    pmVar6 = u->_mp_d;\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == pmVar6[iVar5]) {\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "mp_limb_t *pmVar6;" type_identifier (pointer_declarator "*pmVar6" * 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 = (int)uVar1 >> 0x1f;" (assignment_expression "uVar2 = (int)uVar1 >> 0x1f" identifier = (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (if_statement "if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f)) {\n    return uVar2 | 1;\n  }" if (parenthesized_expression "((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f))" ( (binary_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)(vval >> 0x1f)" (cast_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7)" ( (type_descriptor "char" primitive_type) ) (unary_expression "-((char)~(byte)(uVar1 >> 0x18) >> 7)" - (parenthesized_expression "((char)~(byte)(uVar1 >> 0x18) >> 7)" ( (binary_expression "(char)~(byte)(uVar1 >> 0x18) >> 7" (cast_expression "(char)~(byte)(uVar1 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (unary_expression "~(byte)(uVar1 >> 0x18)" ~ (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) ))))) >> number_literal) )))) == (cast_expression "(char)-(char)(vval >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (unary_expression "-(char)(vval >> 0x1f)" - (cast_expression "(char)(vval >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(vval >> 0x1f)" ( (binary_expression "vval >> 0x1f" identifier >> number_literal) )))))) )) (compound_statement "{\n    return uVar2 | 1;\n  }" { (return_statement "return uVar2 | 1;" return (binary_expression "uVar2 | 1" identifier | number_literal) ;) })) (if_statement "if (uVar1 == 0) {\n    return -(uint)(vval != 0);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return -(uint)(vval != 0);\n  }" { (return_statement "return -(uint)(vval != 0);" return (unary_expression "-(uint)(vval != 0)" - (call_expression "(uint)(vval != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(vval != 0)" ( (binary_expression "vval != 0" identifier != number_literal) )))) ;) })) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (vval != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);\n    if (u->_mp_exp != 1) {\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    pmVar6 = u->_mp_d;\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == pmVar6[iVar5]) {\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" if (parenthesized_expression "(vval != 0)" ( (binary_expression "vval != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = uVar2 | 1;\n    uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);\n    if (u->_mp_exp != 1) {\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    pmVar6 = u->_mp_d;\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == pmVar6[iVar5]) {\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" { (expression_statement "uVar3 = uVar2 | 1;" (assignment_expression "uVar3 = uVar2 | 1" identifier = (binary_expression "uVar2 | 1" identifier | number_literal)) ;) (expression_statement "uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f);" (assignment_expression "uVar4 = (vval ^ vval >> 0x1f) - (vval >> 0x1f)" identifier = (binary_expression "(vval ^ vval >> 0x1f) - (vval >> 0x1f)" (parenthesized_expression "(vval ^ vval >> 0x1f)" ( (binary_expression "vval ^ vval >> 0x1f" identifier ^ (binary_expression "vval >> 0x1f" identifier >> number_literal)) )) - (parenthesized_expression "(vval >> 0x1f)" ( (binary_expression "vval >> 0x1f" identifier >> number_literal) )))) ;) (if_statement "if (u->_mp_exp != 1) {\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" if (parenthesized_expression "(u->_mp_exp != 1)" ( (binary_expression "u->_mp_exp != 1" (field_expression "u->_mp_exp" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" { (if_statement "if (u->_mp_exp < 1) {\n        uVar3 = -uVar3;\n      }" if (parenthesized_expression "(u->_mp_exp < 1)" ( (binary_expression "u->_mp_exp < 1" (field_expression "u->_mp_exp" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n        uVar3 = -uVar3;\n      }" { (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" identifier = (unary_expression "-uVar3" - identifier)) ;) })) (return_statement "return uVar3;" return identifier ;) })) (expression_statement "pmVar6 = u->_mp_d;" (assignment_expression "pmVar6 = u->_mp_d" identifier = (field_expression "u->_mp_d" identifier -> field_identifier)) ;) (expression_statement "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;" (assignment_expression "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1" identifier = (binary_expression "((uVar1 ^ uVar2) - uVar2) + -1" (parenthesized_expression "((uVar1 ^ uVar2) - uVar2)" ( (binary_expression "(uVar1 ^ uVar2) - uVar2" (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) )) - identifier) )) + number_literal)) ;) (if_statement "if (uVar4 == pmVar6[iVar5]) {\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" if (parenthesized_expression "(uVar4 == pmVar6[iVar5])" ( (binary_expression "uVar4 == pmVar6[iVar5]" identifier == (subscript_expression "pmVar6[iVar5]" identifier [ identifier ])) )) (compound_statement "{\n      for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }" { (for_statement "for (; *pmVar6 == 0; pmVar6 = pmVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }" for ( ; (binary_expression "*pmVar6 == 0" (pointer_expression "*pmVar6" * identifier) == number_literal) ; (assignment_expression "pmVar6 = pmVar6 + 1" identifier = (binary_expression "pmVar6 + 1" identifier + number_literal)) ) (compound_statement "{\n        iVar5 = iVar5 + -1;\n      }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) })) (if_statement "if (iVar5 < 1) {\n        uVar3 = 0;\n      }" if (parenthesized_expression "(iVar5 < 1)" ( (binary_expression "iVar5 < 1" identifier < number_literal) )) (compound_statement "{\n        uVar3 = 0;\n      }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) }) (else_clause "else if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" else (if_statement "if (pmVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" if (parenthesized_expression "(pmVar6[iVar5] < uVar4)" ( (binary_expression "pmVar6[iVar5] < uVar4" (subscript_expression "pmVar6[iVar5]" identifier [ identifier ]) < identifier) )) (compound_statement "{\n      uVar3 = -uVar3;\n    }" { (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" identifier = (unary_expression "-uVar3" - identifier)) ;) })))) })) (return_statement "return uVar3;" return identifier ;) })))
(translation_unit "uint __gmpf_cmp_si(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}\n\n" (function_definition "uint __gmpf_cmp_si(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" type_identifier (function_declarator "__gmpf_cmp_si(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * 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 = (int)uVar1 >> 0x1f;" (assignment_expression "uVar2 = (int)uVar1 >> 0x1f" identifier = (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (if_statement "if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }" if (parenthesized_expression "((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f))" ( (binary_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)" (cast_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7)" ( (type_descriptor "char" primitive_type) ) (unary_expression "-((char)~(byte)(uVar1 >> 0x18) >> 7)" - (parenthesized_expression "((char)~(byte)(uVar1 >> 0x18) >> 7)" ( (binary_expression "(char)~(byte)(uVar1 >> 0x18) >> 7" (cast_expression "(char)~(byte)(uVar1 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (unary_expression "~(byte)(uVar1 >> 0x18)" ~ (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar1 >> 0x18)" ( (binary_expression "uVar1 >> 0x18" identifier >> number_literal) ))))) >> number_literal) )))) == (cast_expression "(char)-(char)((int)param_2 >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (unary_expression "-(char)((int)param_2 >> 0x1f)" - (cast_expression "(char)((int)param_2 >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)param_2 >> 0x1f)" ( (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))))) )) (compound_statement "{\n    return uVar2 | 1;\n  }" { (return_statement "return uVar2 | 1;" return (binary_expression "uVar2 | 1" identifier | number_literal) ;) })) (if_statement "if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return -(uint)(param_2 != 0);\n  }" { (return_statement "return -(uint)(param_2 != 0);" return (unary_expression "-(uint)(param_2 != 0)" - (call_expression "(uint)(param_2 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )))) ;) })) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" { (expression_statement "uVar3 = uVar2 | 1;" (assignment_expression "uVar3 = uVar2 | 1" identifier = (binary_expression "uVar2 | 1" identifier | number_literal)) ;) (expression_statement "uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);" (assignment_expression "uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f)" identifier = (binary_expression "(param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f)" (parenthesized_expression "(param_2 ^ (int)param_2 >> 0x1f)" ( (binary_expression "param_2 ^ (int)param_2 >> 0x1f" identifier ^ (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)param_2 >> 0x1f)" ( (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 8) != 1)" ( (binary_expression "*(int *)(param_1 + 8) != 1" (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) )))) != number_literal) )) (compound_statement "{\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" { (if_statement "if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 8) < 1)" ( (binary_expression "*(int *)(param_1 + 8) < 1" (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) )))) < number_literal) )) (compound_statement "{\n        uVar3 = -uVar3;\n      }" { (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" identifier = (unary_expression "-uVar3" - identifier)) ;) })) (return_statement "return uVar3;" return identifier ;) })) (expression_statement "piVar6 = *(int **)(param_1 + 0xc);" (assignment_expression "piVar6 = *(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 "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;" (assignment_expression "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1" identifier = (binary_expression "((uVar1 ^ uVar2) - uVar2) + -1" (parenthesized_expression "((uVar1 ^ uVar2) - uVar2)" ( (binary_expression "(uVar1 ^ uVar2) - uVar2" (parenthesized_expression "(uVar1 ^ uVar2)" ( (binary_expression "uVar1 ^ uVar2" identifier ^ identifier) )) - identifier) )) + number_literal)) ;) (if_statement "if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" if (parenthesized_expression "(uVar4 == piVar6[iVar5])" ( (binary_expression "uVar4 == piVar6[iVar5]" identifier == (subscript_expression "piVar6[iVar5]" identifier [ identifier ])) )) (compound_statement "{\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }" { (for_statement "for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }" for ( ; (binary_expression "*piVar6 == 0" (pointer_expression "*piVar6" * identifier) == number_literal) ; (assignment_expression "piVar6 = piVar6 + 1" identifier = (binary_expression "piVar6 + 1" identifier + number_literal)) ) (compound_statement "{\n        iVar5 = iVar5 + -1;\n      }" { (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) })) (if_statement "if (iVar5 < 1) {\n        uVar3 = 0;\n      }" if (parenthesized_expression "(iVar5 < 1)" ( (binary_expression "iVar5 < 1" identifier < number_literal) )) (compound_statement "{\n        uVar3 = 0;\n      }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) }) (else_clause "else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" else (if_statement "if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" if (parenthesized_expression "((uint)piVar6[iVar5] < uVar4)" ( (binary_expression "(uint)piVar6[iVar5] < uVar4" (cast_expression "(uint)piVar6[iVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar6[iVar5]" identifier [ identifier ])) < identifier) )) (compound_statement "{\n      uVar3 = -uVar3;\n    }" { (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" identifier = (unary_expression "-uVar3" - identifier)) ;) })))) })) (return_statement "return uVar3;" return 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 (pointer_declarator * 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 = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (unary_expression - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (unary_expression ~ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))))) >> LIT) )))) == (cast_expression ( (type_descriptor TYPE) ) (unary_expression - (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))))) )) (compound_statement { (return_statement return (binary_expression IDENT | 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) )))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (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) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) })) (return_statement return IDENT ;) })) (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 (parenthesized_expression ( (binary_expression IDENT ^ IDENT) )) - IDENT) )) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (subscript_expression IDENT [ IDENT ])) )) (compound_statement { (for_statement for ( ; (binary_expression (pointer_expression * IDENT) == LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) })))) })) (return_statement return IDENT ;) })))
(function_definition "uint __gmpf_cmp_si(int param_1,uint param_2)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" (type_identifier "uint") (function_declarator "__gmpf_cmp_si(int param_1,uint param_2)" (identifier "__gmpf_cmp_si") (parameter_list "(int param_1,uint param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  uVar1 = *(uint *)(param_1 + 4);\n  uVar2 = (int)uVar1 >> 0x1f;\n  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }\n  if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }\n  uVar3 = 1;\n  if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }\n  return uVar3;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (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 = (int)uVar1 >> 0x1f;" (assignment_expression "uVar2 = (int)uVar1 >> 0x1f" (identifier "uVar2") (= "=") (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (>> ">>") (number_literal "0x1f"))) (; ";")) (if_statement "if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {\n    return uVar2 | 1;\n  }" (if "if") (parenthesized_expression "((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f))" (( "(") (binary_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)" (cast_expression "(char)-((char)~(byte)(uVar1 >> 0x18) >> 7)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (unary_expression "-((char)~(byte)(uVar1 >> 0x18) >> 7)" (- "-") (parenthesized_expression "((char)~(byte)(uVar1 >> 0x18) >> 7)" (( "(") (binary_expression "(char)~(byte)(uVar1 >> 0x18) >> 7" (cast_expression "(char)~(byte)(uVar1 >> 0x18)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (unary_expression "~(byte)(uVar1 >> 0x18)" (~ "~") (call_expression "(byte)(uVar1 >> 0x18)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar1 >> 0x18)" (( "(") (binary_expression "uVar1 >> 0x18" (identifier "uVar1") (>> ">>") (number_literal "0x18")) () ")"))))) (>> ">>") (number_literal "7")) () ")")))) (== "==") (cast_expression "(char)-(char)((int)param_2 >> 0x1f)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (unary_expression "-(char)((int)param_2 >> 0x1f)" (- "-") (cast_expression "(char)((int)param_2 >> 0x1f)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((int)param_2 >> 0x1f)" (( "(") (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (>> ">>") (number_literal "0x1f")) () ")")))))) () ")")) (compound_statement "{\n    return uVar2 | 1;\n  }" ({ "{") (return_statement "return uVar2 | 1;" (return "return") (binary_expression "uVar2 | 1" (identifier "uVar2") (| "|") (number_literal "1")) (; ";")) (} "}"))) (if_statement "if (uVar1 == 0) {\n    return -(uint)(param_2 != 0);\n  }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return -(uint)(param_2 != 0);\n  }" ({ "{") (return_statement "return -(uint)(param_2 != 0);" (return "return") (unary_expression "-(uint)(param_2 != 0)" (- "-") (call_expression "(uint)(param_2 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")))) (; ";")) (} "}"))) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" (identifier "uVar3") (= "=") (number_literal "1")) (; ";")) (if_statement "if (param_2 != 0) {\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = uVar2 | 1;\n    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);\n    if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }\n    piVar6 = *(int **)(param_1 + 0xc);\n    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;\n    if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }\n  }" ({ "{") (expression_statement "uVar3 = uVar2 | 1;" (assignment_expression "uVar3 = uVar2 | 1" (identifier "uVar3") (= "=") (binary_expression "uVar2 | 1" (identifier "uVar2") (| "|") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);" (assignment_expression "uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f)" (identifier "uVar4") (= "=") (binary_expression "(param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f)" (parenthesized_expression "(param_2 ^ (int)param_2 >> 0x1f)" (( "(") (binary_expression "param_2 ^ (int)param_2 >> 0x1f" (identifier "param_2") (^ "^") (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (>> ">>") (number_literal "0x1f"))) () ")")) (- "-") (parenthesized_expression "((int)param_2 >> 0x1f)" (( "(") (binary_expression "(int)param_2 >> 0x1f" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (*(int *)(param_1 + 8) != 1) {\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 8) != 1)" (( "(") (binary_expression "*(int *)(param_1 + 8) != 1" (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")) () ")")))) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n      if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }\n      return uVar3;\n    }" ({ "{") (if_statement "if (*(int *)(param_1 + 8) < 1) {\n        uVar3 = -uVar3;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 8) < 1)" (( "(") (binary_expression "*(int *)(param_1 + 8) < 1" (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")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        uVar3 = -uVar3;\n      }" ({ "{") (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" (identifier "uVar3") (= "=") (unary_expression "-uVar3" (- "-") (identifier "uVar3"))) (; ";")) (} "}"))) (return_statement "return uVar3;" (return "return") (identifier "uVar3") (; ";")) (} "}"))) (expression_statement "piVar6 = *(int **)(param_1 + 0xc);" (assignment_expression "piVar6 = *(int **)(param_1 + 0xc)" (identifier "piVar6") (= "=") (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 "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;" (assignment_expression "iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1" (identifier "iVar5") (= "=") (binary_expression "((uVar1 ^ uVar2) - uVar2) + -1" (parenthesized_expression "((uVar1 ^ uVar2) - uVar2)" (( "(") (binary_expression "(uVar1 ^ uVar2) - uVar2" (parenthesized_expression "(uVar1 ^ uVar2)" (( "(") (binary_expression "uVar1 ^ uVar2" (identifier "uVar1") (^ "^") (identifier "uVar2")) () ")")) (- "-") (identifier "uVar2")) () ")")) (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (uVar4 == piVar6[iVar5]) {\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }\n    else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" (if "if") (parenthesized_expression "(uVar4 == piVar6[iVar5])" (( "(") (binary_expression "uVar4 == piVar6[iVar5]" (identifier "uVar4") (== "==") (subscript_expression "piVar6[iVar5]" (identifier "piVar6") ([ "[") (identifier "iVar5") (] "]"))) () ")")) (compound_statement "{\n      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }\n      if (iVar5 < 1) {\n        uVar3 = 0;\n      }\n    }" ({ "{") (for_statement "for (; *piVar6 == 0; piVar6 = piVar6 + 1) {\n        iVar5 = iVar5 + -1;\n      }" (for "for") (( "(") (; ";") (binary_expression "*piVar6 == 0" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (== "==") (number_literal "0")) (; ";") (assignment_expression "piVar6 = piVar6 + 1" (identifier "piVar6") (= "=") (binary_expression "piVar6 + 1" (identifier "piVar6") (+ "+") (number_literal "1"))) () ")") (compound_statement "{\n        iVar5 = iVar5 + -1;\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 < 1) {\n        uVar3 = 0;\n      }" (if "if") (parenthesized_expression "(iVar5 < 1)" (( "(") (binary_expression "iVar5 < 1" (identifier "iVar5") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        uVar3 = 0;\n      }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (else_clause "else if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" (else "else") (if_statement "if ((uint)piVar6[iVar5] < uVar4) {\n      uVar3 = -uVar3;\n    }" (if "if") (parenthesized_expression "((uint)piVar6[iVar5] < uVar4)" (( "(") (binary_expression "(uint)piVar6[iVar5] < uVar4" (cast_expression "(uint)piVar6[iVar5]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar6[iVar5]" (identifier "piVar6") ([ "[") (identifier "iVar5") (] "]"))) (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n      uVar3 = -uVar3;\n    }" ({ "{") (expression_statement "uVar3 = -uVar3;" (assignment_expression "uVar3 = -uVar3" (identifier "uVar3") (= "=") (unary_expression "-uVar3" (- "-") (identifier "uVar3"))) (; ";")) (} "}"))))) (} "}"))) (return_statement "return uVar3;" (return "return") (identifier "uVar3") (; ";")) (} "}")))

int function_1(type_1 u,long var_2)

{
  type_2 var_1;
  type_2 var_3;
  type_2 uVar3;
  type_2 var_4;
  int var_6;
  type_3 *var_5;
  
  var_1 = u->_mp_size;
  var_3 = (int)var_1 >> 0x1f;
  if ((char)-((char)~(byte)(var_1 >> 0x18) >> 7) == (char)-(char)(var_2 >> 0x1f)) {
    return var_3 | 1;
  }
  if (var_1 == 0) {
    return -(type_2)(var_2 != 0);
  }
  uVar3 = 1;
  if (var_2 != 0) {
    uVar3 = var_3 | 1;
    var_4 = (var_2 ^ var_2 >> 0x1f) - (var_2 >> 0x1f);
    if (u->_mp_exp != 1) {
      if (u->_mp_exp < 1) {
        uVar3 = -uVar3;
      }
      return uVar3;
    }
    var_5 = u->_mp_d;
    var_6 = ((var_1 ^ var_3) - var_3) + -1;
    if (var_4 == var_5[var_6]) {
      for (; *var_5 == 0; var_5 = var_5 + 1) {
        var_6 = var_6 + -1;
      }
      if (var_6 < 1) {
        uVar3 = 0;
      }
    }
    else if (var_5[var_6] < var_4) {
      uVar3 = -uVar3;
    }
  }
  return uVar3;
}


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

uint MASKED(int param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int *piVar6;
  
  uVar1 = *(uint *)(param_1 + 4);
  uVar2 = (int)uVar1 >> 0x1f;
  if ((char)-((char)~(byte)(uVar1 >> 0x18) >> 7) == (char)-(char)((int)param_2 >> 0x1f)) {
    return uVar2 | 1;
  }
  if (uVar1 == 0) {
    return -(uint)(param_2 != 0);
  }
  uVar3 = 1;
  if (param_2 != 0) {
    uVar3 = uVar2 | 1;
    uVar4 = (param_2 ^ (int)param_2 >> 0x1f) - ((int)param_2 >> 0x1f);
    if (*(int *)(param_1 + 8) != 1) {
      if (*(int *)(param_1 + 8) < 1) {
        uVar3 = -uVar3;
      }
      return uVar3;
    }
    piVar6 = *(int **)(param_1 + 0xc);
    iVar5 = ((uVar1 ^ uVar2) - uVar2) + -1;
    if (uVar4 == piVar6[iVar5]) {
      for (; *piVar6 == 0; piVar6 = piVar6 + 1) {
        iVar5 = iVar5 + -1;
      }
      if (iVar5 < 1) {
        uVar3 = 0;
      }
    }
    else if ((uint)piVar6[iVar5] < uVar4) {
      uVar3 = -uVar3;
    }
  }
  return uVar3;
}

