
/* DWARF original prototype: bool operator()(Input_section_sort_section_name_compare * this,
   Input_section_sort_entry * s1, Input_section_sort_entry * s2) */

bool __thiscall
gold::Output_section::Input_section_sort_section_name_compare::operator()
          (Input_section_sort_section_name_compare *this,Input_section_sort_entry *s1,
          Input_section_sort_entry *s2)

{
  ulong uVar1;
  ulong uVar2;
  int iVar3;
  uint __c;
  size_t extraout_RDX;
  long lVar4;
  Input_section_sort_entry *__s;
  bool bVar5;
  size_t __n;
  
  uVar1 = (s1->section_name_)._M_string_length;
  uVar2 = (s2->section_name_)._M_string_length;
  __n = uVar2;
  if (uVar1 <= uVar2) {
    __n = uVar1;
  }
  __s = s1;
  if (__n != 0) {
    __s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;
    this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;
    iVar3 = memcmp(this,__s,__n);
    __n = extraout_RDX;
    if (iVar3 != 0) {
      return SUB41((uint)iVar3 >> 0x1f,0);
    }
  }
  __c = (uint)__n;
  lVar4 = uVar1 - uVar2;
  if (lVar4 < 0x80000000) {
    if (lVar4 < -0x80000000) {
      bVar5 = true;
    }
    else if ((int)lVar4 == 0) {
      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {
                    /* WARNING: Subroutine does not return */
        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);
      }
      bVar5 = s1->index_ < __c;
    }
    else {
      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);
    }
    return bVar5;
  }
  return false;
}



uint FUN_001f6770(undefined8 param_1,long param_2,long param_3)

{
  ulong uVar1;
  ulong uVar2;
  uint uVar3;
  ulong __n;
  long lVar4;
  
  uVar1 = *(ulong *)(param_2 + 0x30);
  uVar2 = *(ulong *)(param_3 + 0x30);
  __n = uVar2;
  if (uVar1 <= uVar2) {
    __n = uVar1;
  }
  if ((__n != 0) &&
     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {
    return uVar3 >> 0x1f;
  }
  lVar4 = uVar1 - uVar2;
  if (0x7fffffff < lVar4) {
    return 0;
  }
  if (lVar4 < -0x80000000) {
    uVar3 = 1;
  }
  else {
    if ((uint)lVar4 == 0) {
      uVar3 = *(uint *)(param_2 + 0x20);
      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {
        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));
      }
      FUN_001f49a0();
    }
    uVar3 = (uint)lVar4 >> 0x1f;
  }
  return uVar3;
}


PUSH R13
MOV R13,RDX
PUSH R12
MOV R12,RSI
PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBX,qword ptr [RSI + 0x30]
MOV RBP,qword ptr [RDX + 0x30]
CMP RBX,RBP
MOV RDX,RBP
CMOVBE RDX,RBX
TEST RDX,RDX
JZ 0x001f67a9
MOV RSI,qword ptr [R13 + 0x28]
MOV RDI,qword ptr [R12 + 0x28]
CALL 0x00147840
TEST EAX,EAX
JNZ 0x001f67e8
SUB RBX,RBP
CMP RBX,0x7fffffff
JG 0x001f6800
CMP RBX,-0x80000000
JL 0x001f6810
TEST EBX,EBX
JNZ 0x001f681c
MOV EAX,dword ptr [R12 + 0x20]
CMP EAX,-0x1
JZ 0x001f6817
MOV EDX,dword ptr [R13 + 0x20]
CMP EDX,-0x1
JZ 0x001f6817
CMP EAX,EDX
SETC AL
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
ADD RSP,0x8
SHR EAX,0x1f
POP RBX
POP RBP
POP R12
POP R13
RET
ADD RSP,0x8
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
RET
MOV EAX,0x1
JMP 0x001f67da
CALL 0x001f49a0
SHR EBX,0x1f
MOV EAX,EBX
JMP 0x001f67da
(translation_unit "uint FUN_001f6770(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}\n\n" (function_definition "uint FUN_001f6770(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}" type_identifier (function_declarator "FUN_001f6770(undefined8 param_1,long param_2,long param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,long param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = *(ulong *)(param_2 + 0x30);" (assignment_expression "uVar1 = *(ulong *)(param_2 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x30)" * (cast_expression "(ulong *)(param_2 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(ulong *)(param_3 + 0x30);" (assignment_expression "uVar2 = *(ulong *)(param_3 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_3 + 0x30)" * (cast_expression "(ulong *)(param_3 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x30)" ( (binary_expression "param_3 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "__n = uVar2;" (assignment_expression "__n = uVar2" identifier = identifier) ;) (if_statement "if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }" if (parenthesized_expression "(uVar1 <= uVar2)" ( (binary_expression "uVar1 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    __n = uVar1;\n  }" { (expression_statement "__n = uVar1;" (assignment_expression "__n = uVar1" identifier = identifier) ;) })) (if_statement "if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }" if (parenthesized_expression "((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0))" ( (binary_expression "(__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)" (parenthesized_expression "(__n != 0)" ( (binary_expression "__n != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)" ( (comma_expression "uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0" (assignment_expression "uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" identifier = (call_expression "memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" identifier (argument_list "(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" ( (pointer_expression "*(void **)(param_2 + 0x28)" * (cast_expression "(void **)(param_2 + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(void **)(param_3 + 0x28)" * (cast_expression "(void **)(param_3 + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) , identifier )))) , (binary_expression "uVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    return uVar3 >> 0x1f;\n  }" { (return_statement "return uVar3 >> 0x1f;" return (binary_expression "uVar3 >> 0x1f" identifier >> number_literal) ;) })) (expression_statement "lVar4 = uVar1 - uVar2;" (assignment_expression "lVar4 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (0x7fffffff < lVar4) {\n    return 0;\n  }" if (parenthesized_expression "(0x7fffffff < lVar4)" ( (binary_expression "0x7fffffff < lVar4" number_literal < identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" if (parenthesized_expression "(lVar4 < -0x80000000)" ( (binary_expression "lVar4 < -0x80000000" identifier < number_literal) )) (compound_statement "{\n    uVar3 = 1;\n  }" { (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) }) (else_clause "else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" else (compound_statement "{\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" { (if_statement "if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }" if (parenthesized_expression "((uint)lVar4 == 0)" ( (binary_expression "(uint)lVar4 == 0" (cast_expression "(uint)lVar4" ( (type_descriptor "uint" type_identifier) ) identifier) == number_literal) )) (compound_statement "{\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }" { (expression_statement "uVar3 = *(uint *)(param_2 + 0x20);" (assignment_expression "uVar3 = *(uint *)(param_2 + 0x20)" identifier = (pointer_expression "*(uint *)(param_2 + 0x20)" * (cast_expression "(uint *)(param_2 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }" if (parenthesized_expression "((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff))" ( (binary_expression "(uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar3 != 0xffffffff)" ( (binary_expression "uVar3 != 0xffffffff" identifier != number_literal) )) && (parenthesized_expression "(*(uint *)(param_3 + 0x20) != 0xffffffff)" ( (binary_expression "*(uint *)(param_3 + 0x20) != 0xffffffff" (pointer_expression "*(uint *)(param_3 + 0x20)" * (cast_expression "(uint *)(param_3 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }" { (return_statement "return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));" return (call_expression "CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20))" identifier (argument_list "((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20))" ( (call_expression "(int3)(uVar3 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar3 >> 8)" ( (binary_expression "uVar3 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar3 < *(uint *)(param_3 + 0x20)" identifier < (pointer_expression "*(uint *)(param_3 + 0x20)" * (cast_expression "(uint *)(param_3 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) ))))) ))) ;) })) (expression_statement "FUN_001f49a0();" (call_expression "FUN_001f49a0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar3 = (uint)lVar4 >> 0x1f;" (assignment_expression "uVar3 = (uint)lVar4 >> 0x1f" identifier = (binary_expression "(uint)lVar4 >> 0x1f" (cast_expression "(uint)lVar4" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal)) ;) }))) (return_statement "return uVar3;" return identifier ;) })))
(translation_unit "/* DWARF original prototype: bool operator()(Input_section_sort_section_name_compare * this,\n   Input_section_sort_entry * s1, Input_section_sort_entry * s2) */\n\nbool __thiscall\ngold::Output_section::Input_section_sort_section_name_compare::operator()\n          (Input_section_sort_section_name_compare *this,Input_section_sort_entry *s1,\n          Input_section_sort_entry *s2)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  uint __c;\n  size_t extraout_RDX;\n  long lVar4;\n  Input_section_sort_entry *__s;\n  bool bVar5;\n  size_t __n;\n  \n  uVar1 = (s1->section_name_)._M_string_length;\n  uVar2 = (s2->section_name_)._M_string_length;\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  __s = s1;\n  if (__n != 0) {\n    __s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n    this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;\n    iVar3 = memcmp(this,__s,__n);\n    __n = extraout_RDX;\n    if (iVar3 != 0) {\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }\n  }\n  __c = (uint)__n;\n  lVar4 = uVar1 - uVar2;\n  if (lVar4 < 0x80000000) {\n    if (lVar4 < -0x80000000) {\n      bVar5 = true;\n    }\n    else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }\n    return bVar5;\n  }\n  return false;\n}\n\n" comment (function_definition "bool __thiscall\ngold::Output_section::Input_section_sort_section_name_compare::operator()\n          (Input_section_sort_section_name_compare *this,Input_section_sort_entry *s1,\n          Input_section_sort_entry *s2)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  uint __c;\n  size_t extraout_RDX;\n  long lVar4;\n  Input_section_sort_entry *__s;\n  bool bVar5;\n  size_t __n;\n  \n  uVar1 = (s1->section_name_)._M_string_length;\n  uVar2 = (s2->section_name_)._M_string_length;\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  __s = s1;\n  if (__n != 0) {\n    __s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n    this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;\n    iVar3 = memcmp(this,__s,__n);\n    __n = extraout_RDX;\n    if (iVar3 != 0) {\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }\n  }\n  __c = (uint)__n;\n  lVar4 = uVar1 - uVar2;\n  if (lVar4 < 0x80000000) {\n    if (lVar4 < -0x80000000) {\n      bVar5 = true;\n    }\n    else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }\n    return bVar5;\n  }\n  return false;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_section::Input_section_sort_section_name_compare::" identifier : : identifier : : identifier : :) (function_declarator "operator()\n          (Input_section_sort_section_name_compare *this,Input_section_sort_entry *s1,\n          Input_section_sort_entry *s2)" (function_declarator "operator()" identifier (parameter_list "()" ( ))) (parameter_list "(Input_section_sort_section_name_compare *this,Input_section_sort_entry *s1,\n          Input_section_sort_entry *s2)" ( (parameter_declaration "Input_section_sort_section_name_compare *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Input_section_sort_entry *s1" type_identifier (pointer_declarator "*s1" * identifier)) , (parameter_declaration "Input_section_sort_entry *s2" type_identifier (pointer_declarator "*s2" * identifier)) ))) (compound_statement "{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  uint __c;\n  size_t extraout_RDX;\n  long lVar4;\n  Input_section_sort_entry *__s;\n  bool bVar5;\n  size_t __n;\n  \n  uVar1 = (s1->section_name_)._M_string_length;\n  uVar2 = (s2->section_name_)._M_string_length;\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  __s = s1;\n  if (__n != 0) {\n    __s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n    this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;\n    iVar3 = memcmp(this,__s,__n);\n    __n = extraout_RDX;\n    if (iVar3 != 0) {\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }\n  }\n  __c = (uint)__n;\n  lVar4 = uVar1 - uVar2;\n  if (lVar4 < 0x80000000) {\n    if (lVar4 < -0x80000000) {\n      bVar5 = true;\n    }\n    else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }\n    return bVar5;\n  }\n  return false;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint __c;" type_identifier identifier ;) (declaration "size_t extraout_RDX;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "Input_section_sort_entry *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (expression_statement "uVar1 = (s1->section_name_)._M_string_length;" (assignment_expression "uVar1 = (s1->section_name_)._M_string_length" identifier = (field_expression "(s1->section_name_)._M_string_length" (parenthesized_expression "(s1->section_name_)" ( (field_expression "s1->section_name_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar2 = (s2->section_name_)._M_string_length;" (assignment_expression "uVar2 = (s2->section_name_)._M_string_length" identifier = (field_expression "(s2->section_name_)._M_string_length" (parenthesized_expression "(s2->section_name_)" ( (field_expression "s2->section_name_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "__n = uVar2;" (assignment_expression "__n = uVar2" identifier = identifier) ;) (if_statement "if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }" if (parenthesized_expression "(uVar1 <= uVar2)" ( (binary_expression "uVar1 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    __n = uVar1;\n  }" { (expression_statement "__n = uVar1;" (assignment_expression "__n = uVar1" identifier = identifier) ;) })) (expression_statement "__s = s1;" (assignment_expression "__s = s1" identifier = identifier) ;) (if_statement "if (__n != 0) {\n    __s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n    this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;\n    iVar3 = memcmp(this,__s,__n);\n    __n = extraout_RDX;\n    if (iVar3 != 0) {\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }\n  }" if (parenthesized_expression "(__n != 0)" ( (binary_expression "__n != 0" identifier != number_literal) )) (compound_statement "{\n    __s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n    this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;\n    iVar3 = memcmp(this,__s,__n);\n    __n = extraout_RDX;\n    if (iVar3 != 0) {\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }\n  }" { (expression_statement "__s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;" (assignment_expression "__s = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p" identifier = (cast_expression "(Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p" ( (type_descriptor "Input_section_sort_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(s2->section_name_)._M_dataplus._M_p" (field_expression "(s2->section_name_)._M_dataplus" (parenthesized_expression "(s2->section_name_)" ( (field_expression "s2->section_name_" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p;" (assignment_expression "this = (Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p" identifier = (cast_expression "(Input_section_sort_section_name_compare *)(s1->section_name_)._M_dataplus._M_p" ( (type_descriptor "Input_section_sort_section_name_compare *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(s1->section_name_)._M_dataplus._M_p" (field_expression "(s1->section_name_)._M_dataplus" (parenthesized_expression "(s1->section_name_)" ( (field_expression "s1->section_name_" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "iVar3 = memcmp(this,__s,__n);" (assignment_expression "iVar3 = memcmp(this,__s,__n)" identifier = (call_expression "memcmp(this,__s,__n)" identifier (argument_list "(this,__s,__n)" ( identifier , identifier , identifier )))) ;) (expression_statement "__n = extraout_RDX;" (assignment_expression "__n = extraout_RDX" identifier = identifier) ;) (if_statement "if (iVar3 != 0) {\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      return SUB41((uint)iVar3 >> 0x1f,0);\n    }" { (return_statement "return SUB41((uint)iVar3 >> 0x1f,0);" return (call_expression "SUB41((uint)iVar3 >> 0x1f,0)" identifier (argument_list "((uint)iVar3 >> 0x1f,0)" ( (binary_expression "(uint)iVar3 >> 0x1f" (cast_expression "(uint)iVar3" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) , number_literal ))) ;) })) })) (expression_statement "__c = (uint)__n;" (assignment_expression "__c = (uint)__n" identifier = (cast_expression "(uint)__n" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar4 = uVar1 - uVar2;" (assignment_expression "lVar4 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (lVar4 < 0x80000000) {\n    if (lVar4 < -0x80000000) {\n      bVar5 = true;\n    }\n    else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }\n    return bVar5;\n  }" if (parenthesized_expression "(lVar4 < 0x80000000)" ( (binary_expression "lVar4 < 0x80000000" identifier < number_literal) )) (compound_statement "{\n    if (lVar4 < -0x80000000) {\n      bVar5 = true;\n    }\n    else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }\n    return bVar5;\n  }" { (if_statement "if (lVar4 < -0x80000000) {\n      bVar5 = true;\n    }\n    else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }" if (parenthesized_expression "(lVar4 < -0x80000000)" ( (binary_expression "lVar4 < -0x80000000" identifier < number_literal) )) (compound_statement "{\n      bVar5 = true;\n    }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) }) (else_clause "else if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }" else (if_statement "if ((int)lVar4 == 0) {\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }\n    else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }" if (parenthesized_expression "((int)lVar4 == 0)" ( (binary_expression "(int)lVar4 == 0" (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) == number_literal) )) (compound_statement "{\n      if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }\n      bVar5 = s1->index_ < __c;\n    }" { (if_statement "if ((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)) {\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }" if (parenthesized_expression "((s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff))" ( (binary_expression "(s1->index_ == 0xffffffff) || (__c = s2->index_, __c == 0xffffffff)" (parenthesized_expression "(s1->index_ == 0xffffffff)" ( (binary_expression "s1->index_ == 0xffffffff" (field_expression "s1->index_" identifier -> field_identifier) == number_literal) )) || (parenthesized_expression "(__c = s2->index_, __c == 0xffffffff)" ( (comma_expression "__c = s2->index_, __c == 0xffffffff" (assignment_expression "__c = s2->index_" identifier = (field_expression "s2->index_" identifier -> field_identifier)) , (binary_expression "__c == 0xffffffff" identifier == number_literal)) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);\n      }" { comment (labeled_statement "Input_section_sort_entry::index((Input_section_sort_entry *)this,(char *)__s,__c);" statement_identifier : (ERROR ":" :) (expression_statement "index((Input_section_sort_entry *)this,(char *)__s,__c);" (call_expression "index((Input_section_sort_entry *)this,(char *)__s,__c)" identifier (argument_list "((Input_section_sort_entry *)this,(char *)__s,__c)" ( (cast_expression "(Input_section_sort_entry *)this" ( (type_descriptor "Input_section_sort_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;)) })) (expression_statement "bVar5 = s1->index_ < __c;" (assignment_expression "bVar5 = s1->index_ < __c" identifier = (binary_expression "s1->index_ < __c" (field_expression "s1->index_" identifier -> field_identifier) < identifier)) ;) }) (else_clause "else {\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }" else (compound_statement "{\n      bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);\n    }" { (expression_statement "bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7);" (assignment_expression "bVar5 = (bool)((byte)((ulong)lVar4 >> 0x18) >> 7)" identifier = (cast_expression "(bool)((byte)((ulong)lVar4 >> 0x18) >> 7)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "((byte)((ulong)lVar4 >> 0x18) >> 7)" ( (binary_expression "(byte)((ulong)lVar4 >> 0x18) >> 7" (call_expression "(byte)((ulong)lVar4 >> 0x18)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((ulong)lVar4 >> 0x18)" ( (binary_expression "(ulong)lVar4 >> 0x18" (cast_expression "(ulong)lVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) >> number_literal) )))) ;) }))))) (return_statement "return bVar5;" return identifier ;) })) (return_statement "return false;" return false ;) })))
(translation_unit "uint FUN_001f6770(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}\n\n" (function_definition "uint FUN_001f6770(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}" type_identifier (function_declarator "FUN_001f6770(undefined8 param_1,long param_2,long param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,long param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = *(ulong *)(param_2 + 0x30);" (assignment_expression "uVar1 = *(ulong *)(param_2 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x30)" * (cast_expression "(ulong *)(param_2 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(ulong *)(param_3 + 0x30);" (assignment_expression "uVar2 = *(ulong *)(param_3 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_3 + 0x30)" * (cast_expression "(ulong *)(param_3 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x30)" ( (binary_expression "param_3 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "__n = uVar2;" (assignment_expression "__n = uVar2" identifier = identifier) ;) (if_statement "if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }" if (parenthesized_expression "(uVar1 <= uVar2)" ( (binary_expression "uVar1 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    __n = uVar1;\n  }" { (expression_statement "__n = uVar1;" (assignment_expression "__n = uVar1" identifier = identifier) ;) })) (if_statement "if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }" if (parenthesized_expression "((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0))" ( (binary_expression "(__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)" (parenthesized_expression "(__n != 0)" ( (binary_expression "__n != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)" ( (comma_expression "uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0" (assignment_expression "uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" identifier = (call_expression "memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" identifier (argument_list "(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" ( (pointer_expression "*(void **)(param_2 + 0x28)" * (cast_expression "(void **)(param_2 + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(void **)(param_3 + 0x28)" * (cast_expression "(void **)(param_3 + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) , identifier )))) , (binary_expression "uVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    return uVar3 >> 0x1f;\n  }" { (return_statement "return uVar3 >> 0x1f;" return (binary_expression "uVar3 >> 0x1f" identifier >> number_literal) ;) })) (expression_statement "lVar4 = uVar1 - uVar2;" (assignment_expression "lVar4 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (0x7fffffff < lVar4) {\n    return 0;\n  }" if (parenthesized_expression "(0x7fffffff < lVar4)" ( (binary_expression "0x7fffffff < lVar4" number_literal < identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" if (parenthesized_expression "(lVar4 < -0x80000000)" ( (binary_expression "lVar4 < -0x80000000" identifier < number_literal) )) (compound_statement "{\n    uVar3 = 1;\n  }" { (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) }) (else_clause "else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" else (compound_statement "{\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" { (if_statement "if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }" if (parenthesized_expression "((uint)lVar4 == 0)" ( (binary_expression "(uint)lVar4 == 0" (cast_expression "(uint)lVar4" ( (type_descriptor "uint" type_identifier) ) identifier) == number_literal) )) (compound_statement "{\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }" { (expression_statement "uVar3 = *(uint *)(param_2 + 0x20);" (assignment_expression "uVar3 = *(uint *)(param_2 + 0x20)" identifier = (pointer_expression "*(uint *)(param_2 + 0x20)" * (cast_expression "(uint *)(param_2 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }" if (parenthesized_expression "((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff))" ( (binary_expression "(uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar3 != 0xffffffff)" ( (binary_expression "uVar3 != 0xffffffff" identifier != number_literal) )) && (parenthesized_expression "(*(uint *)(param_3 + 0x20) != 0xffffffff)" ( (binary_expression "*(uint *)(param_3 + 0x20) != 0xffffffff" (pointer_expression "*(uint *)(param_3 + 0x20)" * (cast_expression "(uint *)(param_3 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }" { (return_statement "return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));" return (call_expression "CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20))" identifier (argument_list "((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20))" ( (call_expression "(int3)(uVar3 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar3 >> 8)" ( (binary_expression "uVar3 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar3 < *(uint *)(param_3 + 0x20)" identifier < (pointer_expression "*(uint *)(param_3 + 0x20)" * (cast_expression "(uint *)(param_3 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) ))))) ))) ;) })) (expression_statement "FUN_001f49a0();" (call_expression "FUN_001f49a0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar3 = (uint)lVar4 >> 0x1f;" (assignment_expression "uVar3 = (uint)lVar4 >> 0x1f" identifier = (binary_expression "(uint)lVar4 >> 0x1f" (cast_expression "(uint)lVar4" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal)) ;) }))) (return_statement "return uVar3;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) 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) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (return_statement return (binary_expression IDENT >> LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == LIT) )) (compound_statement { (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 (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) (compound_statement { (return_statement return (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;) }))) (return_statement return IDENT ;) })))
(function_definition "uint FUN_001f6770(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}" (type_identifier "uint") (function_declarator "FUN_001f6770(undefined8 param_1,long param_2,long param_3)" (identifier "FUN_001f6770") (parameter_list "(undefined8 param_1,long param_2,long param_3)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  ulong uVar2;\n  uint uVar3;\n  ulong __n;\n  long lVar4;\n  \n  uVar1 = *(ulong *)(param_2 + 0x30);\n  uVar2 = *(ulong *)(param_3 + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }\n  lVar4 = uVar1 - uVar2;\n  if (0x7fffffff < lVar4) {\n    return 0;\n  }\n  if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }\n  return uVar3;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "ulong __n;" (type_identifier "ulong") (identifier "__n") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (expression_statement "uVar1 = *(ulong *)(param_2 + 0x30);" (assignment_expression "uVar1 = *(ulong *)(param_2 + 0x30)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(param_2 + 0x30)" (* "*") (cast_expression "(ulong *)(param_2 + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "uVar2 = *(ulong *)(param_3 + 0x30);" (assignment_expression "uVar2 = *(ulong *)(param_3 + 0x30)" (identifier "uVar2") (= "=") (pointer_expression "*(ulong *)(param_3 + 0x30)" (* "*") (cast_expression "(ulong *)(param_3 + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x30)" (( "(") (binary_expression "param_3 + 0x30" (identifier "param_3") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "__n = uVar2;" (assignment_expression "__n = uVar2" (identifier "__n") (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }" (if "if") (parenthesized_expression "(uVar1 <= uVar2)" (( "(") (binary_expression "uVar1 <= uVar2" (identifier "uVar1") (<= "<=") (identifier "uVar2")) () ")")) (compound_statement "{\n    __n = uVar1;\n  }" ({ "{") (expression_statement "__n = uVar1;" (assignment_expression "__n = uVar1" (identifier "__n") (= "=") (identifier "uVar1")) (; ";")) (} "}"))) (if_statement "if ((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {\n    return uVar3 >> 0x1f;\n  }" (if "if") (parenthesized_expression "((__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0))" (( "(") (binary_expression "(__n != 0) &&\n     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)" (parenthesized_expression "(__n != 0)" (( "(") (binary_expression "__n != 0" (identifier "__n") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)" (( "(") (comma_expression "uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0" (assignment_expression "uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" (identifier "uVar3") (= "=") (call_expression "memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" (identifier "memcmp") (argument_list "(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n)" (( "(") (pointer_expression "*(void **)(param_2 + 0x28)" (* "*") (cast_expression "(void **)(param_2 + 0x28)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (, ",") (pointer_expression "*(void **)(param_3 + 0x28)" (* "*") (cast_expression "(void **)(param_3 + 0x28)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 0x28)" (( "(") (binary_expression "param_3 + 0x28" (identifier "param_3") (+ "+") (number_literal "0x28")) () ")")))) (, ",") (identifier "__n") () ")")))) (, ",") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    return uVar3 >> 0x1f;\n  }" ({ "{") (return_statement "return uVar3 >> 0x1f;" (return "return") (binary_expression "uVar3 >> 0x1f" (identifier "uVar3") (>> ">>") (number_literal "0x1f")) (; ";")) (} "}"))) (expression_statement "lVar4 = uVar1 - uVar2;" (assignment_expression "lVar4 = uVar1 - uVar2" (identifier "lVar4") (= "=") (binary_expression "uVar1 - uVar2" (identifier "uVar1") (- "-") (identifier "uVar2"))) (; ";")) (if_statement "if (0x7fffffff < lVar4) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(0x7fffffff < lVar4)" (( "(") (binary_expression "0x7fffffff < lVar4" (number_literal "0x7fffffff") (< "<") (identifier "lVar4")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (lVar4 < -0x80000000) {\n    uVar3 = 1;\n  }\n  else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" (if "if") (parenthesized_expression "(lVar4 < -0x80000000)" (( "(") (binary_expression "lVar4 < -0x80000000" (identifier "lVar4") (< "<") (number_literal "-0x80000000")) () ")")) (compound_statement "{\n    uVar3 = 1;\n  }" ({ "{") (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" (identifier "uVar3") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" (else "else") (compound_statement "{\n    if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }\n    uVar3 = (uint)lVar4 >> 0x1f;\n  }" ({ "{") (if_statement "if ((uint)lVar4 == 0) {\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }" (if "if") (parenthesized_expression "((uint)lVar4 == 0)" (( "(") (binary_expression "(uint)lVar4 == 0" (cast_expression "(uint)lVar4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar4")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar3 = *(uint *)(param_2 + 0x20);\n      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }\n      FUN_001f49a0();\n    }" ({ "{") (expression_statement "uVar3 = *(uint *)(param_2 + 0x20);" (assignment_expression "uVar3 = *(uint *)(param_2 + 0x20)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(param_2 + 0x20)" (* "*") (cast_expression "(uint *)(param_2 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }" (if "if") (parenthesized_expression "((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff))" (( "(") (binary_expression "(uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar3 != 0xffffffff)" (( "(") (binary_expression "uVar3 != 0xffffffff" (identifier "uVar3") (!= "!=") (number_literal "0xffffffff")) () ")")) (&& "&&") (parenthesized_expression "(*(uint *)(param_3 + 0x20) != 0xffffffff)" (( "(") (binary_expression "*(uint *)(param_3 + 0x20) != 0xffffffff" (pointer_expression "*(uint *)(param_3 + 0x20)" (* "*") (cast_expression "(uint *)(param_3 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (number_literal "0xffffffff")) () ")"))) () ")")) (compound_statement "{\n        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));\n      }" ({ "{") (return_statement "return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));" (return "return") (call_expression "CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20))" (identifier "CONCAT31") (argument_list "((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20))" (( "(") (call_expression "(int3)(uVar3 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(uVar3 >> 8)" (( "(") (binary_expression "uVar3 >> 8" (identifier "uVar3") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar3 < *(uint *)(param_3 + 0x20)" (identifier "uVar3") (< "<") (pointer_expression "*(uint *)(param_3 + 0x20)" (* "*") (cast_expression "(uint *)(param_3 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001f49a0();" (call_expression "FUN_001f49a0()" (identifier "FUN_001f49a0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = (uint)lVar4 >> 0x1f;" (assignment_expression "uVar3 = (uint)lVar4 >> 0x1f" (identifier "uVar3") (= "=") (binary_expression "(uint)lVar4 >> 0x1f" (cast_expression "(uint)lVar4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar4")) (>> ">>") (number_literal "0x1f"))) (; ";")) (} "}")))) (return_statement "return uVar3;" (return "return") (identifier "uVar3") (; ";")) (} "}")))

/* DWARF original prototype: bool operator()(Input_section_sort_section_name_compare * this,
   Input_section_sort_entry * s1, Input_section_sort_entry * s2) */

bool __thiscall
gold::Output_section::type_1::function_1()
          (type_1 *this,type_2 *s1,
          type_2 *s2)

{
  type_3 var_1;
  type_3 var_2;
  int var_5;
  type_4 var_8;
  size_t extraout_RDX;
  long var_7;
  type_2 *__s;
  bool bVar5;
  size_t var_3;
  
  var_1 = (s1->section_name_)._M_string_length;
  var_2 = (s2->section_name_)._M_string_length;
  var_3 = var_2;
  if (var_1 <= var_2) {
    var_3 = var_1;
  }
  __s = s1;
  if (var_3 != 0) {
    __s = (type_2 *)(s2->section_name_)._M_dataplus._M_p;
    this = (type_1 *)(s1->section_name_)._M_dataplus._M_p;
    var_5 = var_4(this,__s,var_3);
    var_3 = extraout_RDX;
    if (var_5 != 0) {
      return var_6((type_4)var_5 >> 0x1f,0);
    }
  }
  var_8 = (type_4)var_3;
  var_7 = var_1 - var_2;
  if (var_7 < 0x80000000) {
    if (var_7 < -0x80000000) {
      bVar5 = true;
    }
    else if ((int)var_7 == 0) {
      if ((s1->index_ == 0xffffffff) || (var_8 = s2->index_, var_8 == 0xffffffff)) {
                    /* WARNING: Subroutine does not return */
        Input_section_sort_entry::var_9((type_2 *)this,(char *)__s,var_8);
      }
      bVar5 = s1->index_ < var_8;
    }
    else {
      bVar5 = (bool)((byte)((type_3)var_7 >> 0x18) >> 7);
    }
    return bVar5;
  }
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) 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: (sized_type_specifier) 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))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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))))) (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))))) (identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (return_statement (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (return_statement (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 (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) consequence: (compound_statement (return_statement (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) (binary_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 (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (return_statement (identifier)))))

uint MASKED(undefined8 param_1,long param_2,long param_3)

{
  ulong uVar1;
  ulong uVar2;
  uint uVar3;
  ulong __n;
  long lVar4;
  
  uVar1 = *(ulong *)(param_2 + 0x30);
  uVar2 = *(ulong *)(param_3 + 0x30);
  __n = uVar2;
  if (uVar1 <= uVar2) {
    __n = uVar1;
  }
  if ((__n != 0) &&
     (uVar3 = memcmp(*(void **)(param_2 + 0x28),*(void **)(param_3 + 0x28),__n), uVar3 != 0)) {
    return uVar3 >> 0x1f;
  }
  lVar4 = uVar1 - uVar2;
  if (0x7fffffff < lVar4) {
    return 0;
  }
  if (lVar4 < -0x80000000) {
    uVar3 = 1;
  }
  else {
    if ((uint)lVar4 == 0) {
      uVar3 = *(uint *)(param_2 + 0x20);
      if ((uVar3 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {
        return CONCAT31((int3)(uVar3 >> 8),uVar3 < *(uint *)(param_3 + 0x20));
      }
      FUN_001f49a0();
    }
    uVar3 = (uint)lVar4 >> 0x1f;
  }
  return uVar3;
}

