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

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

{
  bool bVar1;
  int iVar2;
  int iVar3;
  uint extraout_EDX;
  uint __c;
  Input_section_sort_entry *__s;
  Input_section_sort_entry *this_00;
  
  __s = s1;
  iVar2 = Layout::special_ordering_of_input_section((s1->section_name_)._M_dataplus._M_p);
  this_00 = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;
  iVar3 = Layout::special_ordering_of_input_section((char *)this_00);
  if (iVar2 != iVar3) {
    bVar1 = false;
    if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {
      bVar1 = iVar2 < iVar3;
    }
    return bVar1;
  }
  __c = extraout_EDX;
  if ((s1->index_ != 0xffffffff) && (__c = s2->index_, __c != 0xffffffff)) {
    return s1->index_ < __c;
  }
                    /* WARNING: Subroutine does not return */
  Input_section_sort_entry::index(this_00,(char *)__s,__c);
}



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

{
  ulong uVar1;
  ulong uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long extraout_RDX;
  ulong __n;
  long lVar6;
  long lVar7;
  
  lVar7 = param_2;
  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));
  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));
  if (iVar3 != iVar4) {
    uVar5 = 0;
    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {
      uVar5 = (uint)(iVar3 < iVar4);
    }
    return uVar5;
  }
  uVar5 = *(uint *)(param_2 + 0x20);
  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {
    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));
  }
  FUN_0025fff0();
  uVar1 = *(ulong *)(lVar7 + 0x30);
  uVar2 = *(ulong *)(extraout_RDX + 0x30);
  __n = uVar2;
  if (uVar1 <= uVar2) {
    __n = uVar1;
  }
  if ((__n != 0) &&
     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {
    return uVar5 >> 0x1f;
  }
  lVar6 = uVar1 - uVar2;
  if (0x7fffffff < lVar6) {
    return 0;
  }
  if (lVar6 < -0x80000000) {
    uVar5 = 1;
  }
  else {
    if ((uint)lVar6 == 0) {
      uVar5 = *(uint *)(lVar7 + 0x20);
      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {
        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));
      }
      FUN_0025fff0();
    }
    uVar5 = (uint)lVar6 >> 0x1f;
  }
  return uVar5;
}


PUSH R12
MOV RDI,qword ptr [RSI + 0x28]
MOV R12,RDX
PUSH RBP
MOV RBP,RSI
PUSH RBX
CALL 0x00212400
MOV RDI,qword ptr [R12 + 0x28]
MOV EBX,EAX
CALL 0x00212400
CMP EBX,EAX
JZ 0x00261d90
MOV EDX,EAX
XOR EAX,EAX
TEST EBX,EBX
JS 0x00261d89
MOV EAX,0x1
TEST EDX,EDX
JS 0x00261d89
CMP EBX,EDX
SETL AL
POP RBX
POP RBP
POP R12
RET
MOV EAX,dword ptr [RBP + 0x20]
CMP EAX,-0x1
JZ 0x00261dac
MOV EDX,dword ptr [R12 + 0x20]
CMP EDX,-0x1
JZ 0x00261dac
CMP EAX,EDX
POP RBX
POP RBP
SETC AL
POP R12
RET
CALL 0x0025fff0
NOP
NOP dword ptr CS:[RAX + RAX*0x1]
NOP dword ptr [RAX]
(translation_unit "uint FUN_00261d50(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}\n\n" (function_definition "uint FUN_00261d50(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}" type_identifier (function_declarator "FUN_00261d50(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  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long extraout_RDX;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar7 = param_2;" (assignment_expression "lVar7 = param_2" identifier = identifier) ;) (expression_statement "iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));" (assignment_expression "iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28))" identifier = (call_expression "FUN_00212400(*(undefined8 *)(param_2 + 0x28))" identifier (argument_list "(*(undefined8 *)(param_2 + 0x28))" ( (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) )))) ;) (expression_statement "iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));" (assignment_expression "iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28))" identifier = (call_expression "FUN_00212400(*(undefined8 *)(param_3 + 0x28))" identifier (argument_list "(*(undefined8 *)(param_3 + 0x28))" ( (pointer_expression "*(undefined8 *)(param_3 + 0x28)" * (cast_expression "(undefined8 *)(param_3 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }" if (parenthesized_expression "(iVar3 != iVar4)" ( (binary_expression "iVar3 != iVar4" identifier != identifier) )) (compound_statement "{\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }" if (parenthesized_expression "((-1 < iVar3) && (uVar5 = 1, -1 < iVar4))" ( (binary_expression "(-1 < iVar3) && (uVar5 = 1, -1 < iVar4)" (parenthesized_expression "(-1 < iVar3)" ( (binary_expression "-1 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(uVar5 = 1, -1 < iVar4)" ( (comma_expression "uVar5 = 1, -1 < iVar4" (assignment_expression "uVar5 = 1" identifier = number_literal) , (binary_expression "-1 < iVar4" number_literal < identifier)) ))) )) (compound_statement "{\n      uVar5 = (uint)(iVar3 < iVar4);\n    }" { (expression_statement "uVar5 = (uint)(iVar3 < iVar4);" (assignment_expression "uVar5 = (uint)(iVar3 < iVar4)" identifier = (call_expression "(uint)(iVar3 < iVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar3 < iVar4)" ( (binary_expression "iVar3 < iVar4" identifier < identifier) )))) ;) })) (return_statement "return uVar5;" return identifier ;) })) (expression_statement "uVar5 = *(uint *)(param_2 + 0x20);" (assignment_expression "uVar5 = *(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 ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }" if (parenthesized_expression "((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff))" ( (binary_expression "(uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar5 != 0xffffffff)" ( (binary_expression "uVar5 != 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)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }" { (return_statement "return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));" return (call_expression "CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20))" identifier (argument_list "((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20))" ( (call_expression "(int3)(uVar5 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar5 >> 8)" ( (binary_expression "uVar5 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar5 < *(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_0025fff0();" (call_expression "FUN_0025fff0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar1 = *(ulong *)(lVar7 + 0x30);" (assignment_expression "uVar1 = *(ulong *)(lVar7 + 0x30)" identifier = (pointer_expression "*(ulong *)(lVar7 + 0x30)" * (cast_expression "(ulong *)(lVar7 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x30)" ( (binary_expression "lVar7 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(ulong *)(extraout_RDX + 0x30);" (assignment_expression "uVar2 = *(ulong *)(extraout_RDX + 0x30)" identifier = (pointer_expression "*(ulong *)(extraout_RDX + 0x30)" * (cast_expression "(ulong *)(extraout_RDX + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_RDX + 0x30)" ( (binary_expression "extraout_RDX + 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     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }" if (parenthesized_expression "((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0))" ( (binary_expression "(__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)" (parenthesized_expression "(__n != 0)" ( (binary_expression "__n != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)" ( (comma_expression "uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0" (assignment_expression "uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" identifier = (call_expression "memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" identifier (argument_list "(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" ( (pointer_expression "*(void **)(lVar7 + 0x28)" * (cast_expression "(void **)(lVar7 + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar7 + 0x28)" ( (binary_expression "lVar7 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(void **)(extraout_RDX + 0x28)" * (cast_expression "(void **)(extraout_RDX + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(extraout_RDX + 0x28)" ( (binary_expression "extraout_RDX + 0x28" identifier + number_literal) )))) , identifier )))) , (binary_expression "uVar5 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    return uVar5 >> 0x1f;\n  }" { (return_statement "return uVar5 >> 0x1f;" return (binary_expression "uVar5 >> 0x1f" identifier >> number_literal) ;) })) (expression_statement "lVar6 = uVar1 - uVar2;" (assignment_expression "lVar6 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (0x7fffffff < lVar6) {\n    return 0;\n  }" if (parenthesized_expression "(0x7fffffff < lVar6)" ( (binary_expression "0x7fffffff < lVar6" number_literal < identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" if (parenthesized_expression "(lVar6 < -0x80000000)" ( (binary_expression "lVar6 < -0x80000000" identifier < number_literal) )) (compound_statement "{\n    uVar5 = 1;\n  }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) }) (else_clause "else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" else (compound_statement "{\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" { (if_statement "if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }" if (parenthesized_expression "((uint)lVar6 == 0)" ( (binary_expression "(uint)lVar6 == 0" (cast_expression "(uint)lVar6" ( (type_descriptor "uint" type_identifier) ) identifier) == number_literal) )) (compound_statement "{\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }" { (expression_statement "uVar5 = *(uint *)(lVar7 + 0x20);" (assignment_expression "uVar5 = *(uint *)(lVar7 + 0x20)" identifier = (pointer_expression "*(uint *)(lVar7 + 0x20)" * (cast_expression "(uint *)(lVar7 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }" if (parenthesized_expression "((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff))" ( (binary_expression "(uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar5 != 0xffffffff)" ( (binary_expression "uVar5 != 0xffffffff" identifier != number_literal) )) && (parenthesized_expression "(*(uint *)(extraout_RDX + 0x20) != 0xffffffff)" ( (binary_expression "*(uint *)(extraout_RDX + 0x20) != 0xffffffff" (pointer_expression "*(uint *)(extraout_RDX + 0x20)" * (cast_expression "(uint *)(extraout_RDX + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_RDX + 0x20)" ( (binary_expression "extraout_RDX + 0x20" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }" { (return_statement "return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));" return (call_expression "CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20))" identifier (argument_list "((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20))" ( (call_expression "(int3)(uVar5 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar5 >> 8)" ( (binary_expression "uVar5 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar5 < *(uint *)(extraout_RDX + 0x20)" identifier < (pointer_expression "*(uint *)(extraout_RDX + 0x20)" * (cast_expression "(uint *)(extraout_RDX + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_RDX + 0x20)" ( (binary_expression "extraout_RDX + 0x20" identifier + number_literal) ))))) ))) ;) })) (expression_statement "FUN_0025fff0();" (call_expression "FUN_0025fff0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar5 = (uint)lVar6 >> 0x1f;" (assignment_expression "uVar5 = (uint)lVar6 >> 0x1f" identifier = (binary_expression "(uint)lVar6 >> 0x1f" (cast_expression "(uint)lVar6" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal)) ;) }))) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit "/* DWARF original prototype: bool\n   operator()(Input_section_sort_section_prefix_special_ordering_compare * this,\n   Input_section_sort_entry * s1, Input_section_sort_entry * s2) */\n\nbool __thiscall\ngold::Output_section::Input_section_sort_section_prefix_special_ordering_compare::operator()\n          (Input_section_sort_section_prefix_special_ordering_compare *this,\n          Input_section_sort_entry *s1,Input_section_sort_entry *s2)\n\n{\n  bool bVar1;\n  int iVar2;\n  int iVar3;\n  uint extraout_EDX;\n  uint __c;\n  Input_section_sort_entry *__s;\n  Input_section_sort_entry *this_00;\n  \n  __s = s1;\n  iVar2 = Layout::special_ordering_of_input_section((s1->section_name_)._M_dataplus._M_p);\n  this_00 = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n  iVar3 = Layout::special_ordering_of_input_section((char *)this_00);\n  if (iVar2 != iVar3) {\n    bVar1 = false;\n    if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {\n      bVar1 = iVar2 < iVar3;\n    }\n    return bVar1;\n  }\n  __c = extraout_EDX;\n  if ((s1->index_ != 0xffffffff) && (__c = s2->index_, __c != 0xffffffff)) {\n    return s1->index_ < __c;\n  }\n                    /* WARNING: Subroutine does not return */\n  Input_section_sort_entry::index(this_00,(char *)__s,__c);\n}\n\n" comment (function_definition "bool __thiscall\ngold::Output_section::Input_section_sort_section_prefix_special_ordering_compare::operator()\n          (Input_section_sort_section_prefix_special_ordering_compare *this,\n          Input_section_sort_entry *s1,Input_section_sort_entry *s2)\n\n{\n  bool bVar1;\n  int iVar2;\n  int iVar3;\n  uint extraout_EDX;\n  uint __c;\n  Input_section_sort_entry *__s;\n  Input_section_sort_entry *this_00;\n  \n  __s = s1;\n  iVar2 = Layout::special_ordering_of_input_section((s1->section_name_)._M_dataplus._M_p);\n  this_00 = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n  iVar3 = Layout::special_ordering_of_input_section((char *)this_00);\n  if (iVar2 != iVar3) {\n    bVar1 = false;\n    if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {\n      bVar1 = iVar2 < iVar3;\n    }\n    return bVar1;\n  }\n  __c = extraout_EDX;\n  if ((s1->index_ != 0xffffffff) && (__c = s2->index_, __c != 0xffffffff)) {\n    return s1->index_ < __c;\n  }\n                    /* WARNING: Subroutine does not return */\n  Input_section_sort_entry::index(this_00,(char *)__s,__c);\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_section::Input_section_sort_section_prefix_special_ordering_compare::" identifier : : identifier : : identifier : :) (function_declarator "operator()\n          (Input_section_sort_section_prefix_special_ordering_compare *this,\n          Input_section_sort_entry *s1,Input_section_sort_entry *s2)" (function_declarator "operator()" identifier (parameter_list "()" ( ))) (parameter_list "(Input_section_sort_section_prefix_special_ordering_compare *this,\n          Input_section_sort_entry *s1,Input_section_sort_entry *s2)" ( (parameter_declaration "Input_section_sort_section_prefix_special_ordering_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  bool bVar1;\n  int iVar2;\n  int iVar3;\n  uint extraout_EDX;\n  uint __c;\n  Input_section_sort_entry *__s;\n  Input_section_sort_entry *this_00;\n  \n  __s = s1;\n  iVar2 = Layout::special_ordering_of_input_section((s1->section_name_)._M_dataplus._M_p);\n  this_00 = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;\n  iVar3 = Layout::special_ordering_of_input_section((char *)this_00);\n  if (iVar2 != iVar3) {\n    bVar1 = false;\n    if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {\n      bVar1 = iVar2 < iVar3;\n    }\n    return bVar1;\n  }\n  __c = extraout_EDX;\n  if ((s1->index_ != 0xffffffff) && (__c = s2->index_, __c != 0xffffffff)) {\n    return s1->index_ < __c;\n  }\n                    /* WARNING: Subroutine does not return */\n  Input_section_sort_entry::index(this_00,(char *)__s,__c);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint extraout_EDX;" type_identifier identifier ;) (declaration "uint __c;" type_identifier identifier ;) (declaration "Input_section_sort_entry *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "Input_section_sort_entry *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (expression_statement "__s = s1;" (assignment_expression "__s = s1" identifier = identifier) ;) (ERROR "iVar2 = Layout::" (assignment_expression "iVar2 = Layout" identifier = identifier) : :) (expression_statement "special_ordering_of_input_section((s1->section_name_)._M_dataplus._M_p);" (call_expression "special_ordering_of_input_section((s1->section_name_)._M_dataplus._M_p)" identifier (argument_list "((s1->section_name_)._M_dataplus._M_p)" ( (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 "this_00 = (Input_section_sort_entry *)(s2->section_name_)._M_dataplus._M_p;" (assignment_expression "this_00 = (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))) ;) (ERROR "iVar3 = Layout::" (assignment_expression "iVar3 = Layout" identifier = identifier) : :) (expression_statement "special_ordering_of_input_section((char *)this_00);" (call_expression "special_ordering_of_input_section((char *)this_00)" identifier (argument_list "((char *)this_00)" ( (cast_expression "(char *)this_00" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (if_statement "if (iVar2 != iVar3) {\n    bVar1 = false;\n    if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {\n      bVar1 = iVar2 < iVar3;\n    }\n    return bVar1;\n  }" if (parenthesized_expression "(iVar2 != iVar3)" ( (binary_expression "iVar2 != iVar3" identifier != identifier) )) (compound_statement "{\n    bVar1 = false;\n    if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {\n      bVar1 = iVar2 < iVar3;\n    }\n    return bVar1;\n  }" { (expression_statement "bVar1 = false;" (assignment_expression "bVar1 = false" identifier = false) ;) (if_statement "if ((-1 < iVar2) && (bVar1 = true, -1 < iVar3)) {\n      bVar1 = iVar2 < iVar3;\n    }" if (parenthesized_expression "((-1 < iVar2) && (bVar1 = true, -1 < iVar3))" ( (binary_expression "(-1 < iVar2) && (bVar1 = true, -1 < iVar3)" (parenthesized_expression "(-1 < iVar2)" ( (binary_expression "-1 < iVar2" number_literal < identifier) )) && (parenthesized_expression "(bVar1 = true, -1 < iVar3)" ( (comma_expression "bVar1 = true, -1 < iVar3" (assignment_expression "bVar1 = true" identifier = true) , (binary_expression "-1 < iVar3" number_literal < identifier)) ))) )) (compound_statement "{\n      bVar1 = iVar2 < iVar3;\n    }" { (expression_statement "bVar1 = iVar2 < iVar3;" (assignment_expression "bVar1 = iVar2 < iVar3" identifier = (binary_expression "iVar2 < iVar3" identifier < identifier)) ;) })) (return_statement "return bVar1;" return identifier ;) })) (expression_statement "__c = extraout_EDX;" (assignment_expression "__c = extraout_EDX" identifier = identifier) ;) (if_statement "if ((s1->index_ != 0xffffffff) && (__c = s2->index_, __c != 0xffffffff)) {\n    return s1->index_ < __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    return s1->index_ < __c;\n  }" { (return_statement "return s1->index_ < __c;" return (binary_expression "s1->index_ < __c" (field_expression "s1->index_" identifier -> field_identifier) < identifier) ;) })) comment (labeled_statement "Input_section_sort_entry::index(this_00,(char *)__s,__c);" statement_identifier : (ERROR ":" :) (expression_statement "index(this_00,(char *)__s,__c);" (call_expression "index(this_00,(char *)__s,__c)" identifier (argument_list "(this_00,(char *)__s,__c)" ( identifier , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;)) })))
(translation_unit "uint FUN_00261d50(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}\n\n" (function_definition "uint FUN_00261d50(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}" type_identifier (function_declarator "FUN_00261d50(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  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long extraout_RDX;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar7 = param_2;" (assignment_expression "lVar7 = param_2" identifier = identifier) ;) (expression_statement "iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));" (assignment_expression "iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28))" identifier = (call_expression "FUN_00212400(*(undefined8 *)(param_2 + 0x28))" identifier (argument_list "(*(undefined8 *)(param_2 + 0x28))" ( (pointer_expression "*(undefined8 *)(param_2 + 0x28)" * (cast_expression "(undefined8 *)(param_2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) )))) ;) (expression_statement "iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));" (assignment_expression "iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28))" identifier = (call_expression "FUN_00212400(*(undefined8 *)(param_3 + 0x28))" identifier (argument_list "(*(undefined8 *)(param_3 + 0x28))" ( (pointer_expression "*(undefined8 *)(param_3 + 0x28)" * (cast_expression "(undefined8 *)(param_3 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }" if (parenthesized_expression "(iVar3 != iVar4)" ( (binary_expression "iVar3 != iVar4" identifier != identifier) )) (compound_statement "{\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }" if (parenthesized_expression "((-1 < iVar3) && (uVar5 = 1, -1 < iVar4))" ( (binary_expression "(-1 < iVar3) && (uVar5 = 1, -1 < iVar4)" (parenthesized_expression "(-1 < iVar3)" ( (binary_expression "-1 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(uVar5 = 1, -1 < iVar4)" ( (comma_expression "uVar5 = 1, -1 < iVar4" (assignment_expression "uVar5 = 1" identifier = number_literal) , (binary_expression "-1 < iVar4" number_literal < identifier)) ))) )) (compound_statement "{\n      uVar5 = (uint)(iVar3 < iVar4);\n    }" { (expression_statement "uVar5 = (uint)(iVar3 < iVar4);" (assignment_expression "uVar5 = (uint)(iVar3 < iVar4)" identifier = (call_expression "(uint)(iVar3 < iVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar3 < iVar4)" ( (binary_expression "iVar3 < iVar4" identifier < identifier) )))) ;) })) (return_statement "return uVar5;" return identifier ;) })) (expression_statement "uVar5 = *(uint *)(param_2 + 0x20);" (assignment_expression "uVar5 = *(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 ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }" if (parenthesized_expression "((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff))" ( (binary_expression "(uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar5 != 0xffffffff)" ( (binary_expression "uVar5 != 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)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }" { (return_statement "return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));" return (call_expression "CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20))" identifier (argument_list "((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20))" ( (call_expression "(int3)(uVar5 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar5 >> 8)" ( (binary_expression "uVar5 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar5 < *(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_0025fff0();" (call_expression "FUN_0025fff0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar1 = *(ulong *)(lVar7 + 0x30);" (assignment_expression "uVar1 = *(ulong *)(lVar7 + 0x30)" identifier = (pointer_expression "*(ulong *)(lVar7 + 0x30)" * (cast_expression "(ulong *)(lVar7 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x30)" ( (binary_expression "lVar7 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(ulong *)(extraout_RDX + 0x30);" (assignment_expression "uVar2 = *(ulong *)(extraout_RDX + 0x30)" identifier = (pointer_expression "*(ulong *)(extraout_RDX + 0x30)" * (cast_expression "(ulong *)(extraout_RDX + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_RDX + 0x30)" ( (binary_expression "extraout_RDX + 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     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }" if (parenthesized_expression "((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0))" ( (binary_expression "(__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)" (parenthesized_expression "(__n != 0)" ( (binary_expression "__n != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)" ( (comma_expression "uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0" (assignment_expression "uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" identifier = (call_expression "memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" identifier (argument_list "(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" ( (pointer_expression "*(void **)(lVar7 + 0x28)" * (cast_expression "(void **)(lVar7 + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar7 + 0x28)" ( (binary_expression "lVar7 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(void **)(extraout_RDX + 0x28)" * (cast_expression "(void **)(extraout_RDX + 0x28)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(extraout_RDX + 0x28)" ( (binary_expression "extraout_RDX + 0x28" identifier + number_literal) )))) , identifier )))) , (binary_expression "uVar5 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    return uVar5 >> 0x1f;\n  }" { (return_statement "return uVar5 >> 0x1f;" return (binary_expression "uVar5 >> 0x1f" identifier >> number_literal) ;) })) (expression_statement "lVar6 = uVar1 - uVar2;" (assignment_expression "lVar6 = uVar1 - uVar2" identifier = (binary_expression "uVar1 - uVar2" identifier - identifier)) ;) (if_statement "if (0x7fffffff < lVar6) {\n    return 0;\n  }" if (parenthesized_expression "(0x7fffffff < lVar6)" ( (binary_expression "0x7fffffff < lVar6" number_literal < identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" if (parenthesized_expression "(lVar6 < -0x80000000)" ( (binary_expression "lVar6 < -0x80000000" identifier < number_literal) )) (compound_statement "{\n    uVar5 = 1;\n  }" { (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) }) (else_clause "else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" else (compound_statement "{\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" { (if_statement "if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }" if (parenthesized_expression "((uint)lVar6 == 0)" ( (binary_expression "(uint)lVar6 == 0" (cast_expression "(uint)lVar6" ( (type_descriptor "uint" type_identifier) ) identifier) == number_literal) )) (compound_statement "{\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }" { (expression_statement "uVar5 = *(uint *)(lVar7 + 0x20);" (assignment_expression "uVar5 = *(uint *)(lVar7 + 0x20)" identifier = (pointer_expression "*(uint *)(lVar7 + 0x20)" * (cast_expression "(uint *)(lVar7 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }" if (parenthesized_expression "((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff))" ( (binary_expression "(uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar5 != 0xffffffff)" ( (binary_expression "uVar5 != 0xffffffff" identifier != number_literal) )) && (parenthesized_expression "(*(uint *)(extraout_RDX + 0x20) != 0xffffffff)" ( (binary_expression "*(uint *)(extraout_RDX + 0x20) != 0xffffffff" (pointer_expression "*(uint *)(extraout_RDX + 0x20)" * (cast_expression "(uint *)(extraout_RDX + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_RDX + 0x20)" ( (binary_expression "extraout_RDX + 0x20" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }" { (return_statement "return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));" return (call_expression "CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20))" identifier (argument_list "((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20))" ( (call_expression "(int3)(uVar5 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "(uVar5 >> 8)" ( (binary_expression "uVar5 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar5 < *(uint *)(extraout_RDX + 0x20)" identifier < (pointer_expression "*(uint *)(extraout_RDX + 0x20)" * (cast_expression "(uint *)(extraout_RDX + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_RDX + 0x20)" ( (binary_expression "extraout_RDX + 0x20" identifier + number_literal) ))))) ))) ;) })) (expression_statement "FUN_0025fff0();" (call_expression "FUN_0025fff0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar5 = (uint)lVar6 >> 0x1f;" (assignment_expression "uVar5 = (uint)lVar6 >> 0x1f" identifier = (binary_expression "(uint)lVar6 >> 0x1f" (cast_expression "(uint)lVar6" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal)) ;) }))) (return_statement "return uVar5;" 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 TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression LIT < IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) })) (return_statement return IDENT ;) })) (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 = (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_00261d50(undefined8 param_1,long param_2,long param_3)\n\n{\n  ulong uVar1;\n  ulong uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}" (type_identifier "uint") (function_declarator "FUN_00261d50(undefined8 param_1,long param_2,long param_3)" (identifier "FUN_00261d50") (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  int iVar3;\n  int iVar4;\n  uint uVar5;\n  long extraout_RDX;\n  ulong __n;\n  long lVar6;\n  long lVar7;\n  \n  lVar7 = param_2;\n  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));\n  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));\n  if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }\n  uVar5 = *(uint *)(param_2 + 0x20);\n  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }\n  FUN_0025fff0();\n  uVar1 = *(ulong *)(lVar7 + 0x30);\n  uVar2 = *(ulong *)(extraout_RDX + 0x30);\n  __n = uVar2;\n  if (uVar1 <= uVar2) {\n    __n = uVar1;\n  }\n  if ((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }\n  lVar6 = uVar1 - uVar2;\n  if (0x7fffffff < lVar6) {\n    return 0;\n  }\n  if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }\n  return uVar5;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "long extraout_RDX;" (sized_type_specifier "long" (long "long")) (identifier "extraout_RDX") (; ";")) (declaration "ulong __n;" (type_identifier "ulong") (identifier "__n") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (expression_statement "lVar7 = param_2;" (assignment_expression "lVar7 = param_2" (identifier "lVar7") (= "=") (identifier "param_2")) (; ";")) (expression_statement "iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));" (assignment_expression "iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28))" (identifier "iVar3") (= "=") (call_expression "FUN_00212400(*(undefined8 *)(param_2 + 0x28))" (identifier "FUN_00212400") (argument_list "(*(undefined8 *)(param_2 + 0x28))" (( "(") (pointer_expression "*(undefined8 *)(param_2 + 0x28)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) () ")")))) (; ";")) (expression_statement "iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));" (assignment_expression "iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28))" (identifier "iVar4") (= "=") (call_expression "FUN_00212400(*(undefined8 *)(param_3 + 0x28))" (identifier "FUN_00212400") (argument_list "(*(undefined8 *)(param_3 + 0x28))" (( "(") (pointer_expression "*(undefined8 *)(param_3 + 0x28)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x28)" (( "(") (binary_expression "param_3 + 0x28" (identifier "param_3") (+ "+") (number_literal "0x28")) () ")")))) () ")")))) (; ";")) (if_statement "if (iVar3 != iVar4) {\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }" (if "if") (parenthesized_expression "(iVar3 != iVar4)" (( "(") (binary_expression "iVar3 != iVar4" (identifier "iVar3") (!= "!=") (identifier "iVar4")) () ")")) (compound_statement "{\n    uVar5 = 0;\n    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }\n    return uVar5;\n  }" ({ "{") (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {\n      uVar5 = (uint)(iVar3 < iVar4);\n    }" (if "if") (parenthesized_expression "((-1 < iVar3) && (uVar5 = 1, -1 < iVar4))" (( "(") (binary_expression "(-1 < iVar3) && (uVar5 = 1, -1 < iVar4)" (parenthesized_expression "(-1 < iVar3)" (( "(") (binary_expression "-1 < iVar3" (number_literal "-1") (< "<") (identifier "iVar3")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 = 1, -1 < iVar4)" (( "(") (comma_expression "uVar5 = 1, -1 < iVar4" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (, ",") (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4"))) () ")"))) () ")")) (compound_statement "{\n      uVar5 = (uint)(iVar3 < iVar4);\n    }" ({ "{") (expression_statement "uVar5 = (uint)(iVar3 < iVar4);" (assignment_expression "uVar5 = (uint)(iVar3 < iVar4)" (identifier "uVar5") (= "=") (call_expression "(uint)(iVar3 < iVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar3 < iVar4)" (( "(") (binary_expression "iVar3 < iVar4" (identifier "iVar3") (< "<") (identifier "iVar4")) () ")")))) (; ";")) (} "}"))) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}"))) (expression_statement "uVar5 = *(uint *)(param_2 + 0x20);" (assignment_expression "uVar5 = *(uint *)(param_2 + 0x20)" (identifier "uVar5") (= "=") (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 ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {\n    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }" (if "if") (parenthesized_expression "((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff))" (( "(") (binary_expression "(uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar5 != 0xffffffff)" (( "(") (binary_expression "uVar5 != 0xffffffff" (identifier "uVar5") (!= "!=") (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)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));\n  }" ({ "{") (return_statement "return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));" (return "return") (call_expression "CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20))" (identifier "CONCAT31") (argument_list "((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20))" (( "(") (call_expression "(int3)(uVar5 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(uVar5 >> 8)" (( "(") (binary_expression "uVar5 >> 8" (identifier "uVar5") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar5 < *(uint *)(param_3 + 0x20)" (identifier "uVar5") (< "<") (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_0025fff0();" (call_expression "FUN_0025fff0()" (identifier "FUN_0025fff0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar1 = *(ulong *)(lVar7 + 0x30);" (assignment_expression "uVar1 = *(ulong *)(lVar7 + 0x30)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(lVar7 + 0x30)" (* "*") (cast_expression "(ulong *)(lVar7 + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x30)" (( "(") (binary_expression "lVar7 + 0x30" (identifier "lVar7") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "uVar2 = *(ulong *)(extraout_RDX + 0x30);" (assignment_expression "uVar2 = *(ulong *)(extraout_RDX + 0x30)" (identifier "uVar2") (= "=") (pointer_expression "*(ulong *)(extraout_RDX + 0x30)" (* "*") (cast_expression "(ulong *)(extraout_RDX + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(extraout_RDX + 0x30)" (( "(") (binary_expression "extraout_RDX + 0x30" (identifier "extraout_RDX") (+ "+") (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     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {\n    return uVar5 >> 0x1f;\n  }" (if "if") (parenthesized_expression "((__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0))" (( "(") (binary_expression "(__n != 0) &&\n     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)" (parenthesized_expression "(__n != 0)" (( "(") (binary_expression "__n != 0" (identifier "__n") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)" (( "(") (comma_expression "uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0" (assignment_expression "uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" (identifier "uVar5") (= "=") (call_expression "memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" (identifier "memcmp") (argument_list "(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n)" (( "(") (pointer_expression "*(void **)(lVar7 + 0x28)" (* "*") (cast_expression "(void **)(lVar7 + 0x28)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar7 + 0x28)" (( "(") (binary_expression "lVar7 + 0x28" (identifier "lVar7") (+ "+") (number_literal "0x28")) () ")")))) (, ",") (pointer_expression "*(void **)(extraout_RDX + 0x28)" (* "*") (cast_expression "(void **)(extraout_RDX + 0x28)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(extraout_RDX + 0x28)" (( "(") (binary_expression "extraout_RDX + 0x28" (identifier "extraout_RDX") (+ "+") (number_literal "0x28")) () ")")))) (, ",") (identifier "__n") () ")")))) (, ",") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    return uVar5 >> 0x1f;\n  }" ({ "{") (return_statement "return uVar5 >> 0x1f;" (return "return") (binary_expression "uVar5 >> 0x1f" (identifier "uVar5") (>> ">>") (number_literal "0x1f")) (; ";")) (} "}"))) (expression_statement "lVar6 = uVar1 - uVar2;" (assignment_expression "lVar6 = uVar1 - uVar2" (identifier "lVar6") (= "=") (binary_expression "uVar1 - uVar2" (identifier "uVar1") (- "-") (identifier "uVar2"))) (; ";")) (if_statement "if (0x7fffffff < lVar6) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(0x7fffffff < lVar6)" (( "(") (binary_expression "0x7fffffff < lVar6" (number_literal "0x7fffffff") (< "<") (identifier "lVar6")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (lVar6 < -0x80000000) {\n    uVar5 = 1;\n  }\n  else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" (if "if") (parenthesized_expression "(lVar6 < -0x80000000)" (( "(") (binary_expression "lVar6 < -0x80000000" (identifier "lVar6") (< "<") (number_literal "-0x80000000")) () ")")) (compound_statement "{\n    uVar5 = 1;\n  }" ({ "{") (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" (else "else") (compound_statement "{\n    if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }\n    uVar5 = (uint)lVar6 >> 0x1f;\n  }" ({ "{") (if_statement "if ((uint)lVar6 == 0) {\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }" (if "if") (parenthesized_expression "((uint)lVar6 == 0)" (( "(") (binary_expression "(uint)lVar6 == 0" (cast_expression "(uint)lVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar6")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar5 = *(uint *)(lVar7 + 0x20);\n      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }\n      FUN_0025fff0();\n    }" ({ "{") (expression_statement "uVar5 = *(uint *)(lVar7 + 0x20);" (assignment_expression "uVar5 = *(uint *)(lVar7 + 0x20)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(lVar7 + 0x20)" (* "*") (cast_expression "(uint *)(lVar7 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x20)" (( "(") (binary_expression "lVar7 + 0x20" (identifier "lVar7") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }" (if "if") (parenthesized_expression "((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff))" (( "(") (binary_expression "(uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)" (parenthesized_expression "(uVar5 != 0xffffffff)" (( "(") (binary_expression "uVar5 != 0xffffffff" (identifier "uVar5") (!= "!=") (number_literal "0xffffffff")) () ")")) (&& "&&") (parenthesized_expression "(*(uint *)(extraout_RDX + 0x20) != 0xffffffff)" (( "(") (binary_expression "*(uint *)(extraout_RDX + 0x20) != 0xffffffff" (pointer_expression "*(uint *)(extraout_RDX + 0x20)" (* "*") (cast_expression "(uint *)(extraout_RDX + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(extraout_RDX + 0x20)" (( "(") (binary_expression "extraout_RDX + 0x20" (identifier "extraout_RDX") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (number_literal "0xffffffff")) () ")"))) () ")")) (compound_statement "{\n        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));\n      }" ({ "{") (return_statement "return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));" (return "return") (call_expression "CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20))" (identifier "CONCAT31") (argument_list "((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20))" (( "(") (call_expression "(int3)(uVar5 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "(uVar5 >> 8)" (( "(") (binary_expression "uVar5 >> 8" (identifier "uVar5") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar5 < *(uint *)(extraout_RDX + 0x20)" (identifier "uVar5") (< "<") (pointer_expression "*(uint *)(extraout_RDX + 0x20)" (* "*") (cast_expression "(uint *)(extraout_RDX + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(extraout_RDX + 0x20)" (( "(") (binary_expression "extraout_RDX + 0x20" (identifier "extraout_RDX") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_0025fff0();" (call_expression "FUN_0025fff0()" (identifier "FUN_0025fff0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar5 = (uint)lVar6 >> 0x1f;" (assignment_expression "uVar5 = (uint)lVar6 >> 0x1f" (identifier "uVar5") (= "=") (binary_expression "(uint)lVar6 >> 0x1f" (cast_expression "(uint)lVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar6")) (>> ">>") (number_literal "0x1f"))) (; ";")) (} "}")))) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}")))

/* DWARF original prototype: bool
   operator()(Input_section_sort_section_prefix_special_ordering_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)

{
  bool bVar1;
  int var_2;
  int var_3;
  type_3 extraout_EDX;
  type_3 var_4;
  type_2 *__s;
  type_2 *this_00;
  
  __s = s1;
  var_2 = Layout::var_1((s1->section_name_)._M_dataplus._M_p);
  this_00 = (type_2 *)(s2->section_name_)._M_dataplus._M_p;
  var_3 = Layout::var_1((char *)this_00);
  if (var_2 != var_3) {
    bVar1 = false;
    if ((-1 < var_2) && (bVar1 = true, -1 < var_3)) {
      bVar1 = var_2 < var_3;
    }
    return bVar1;
  }
  var_4 = extraout_EDX;
  if ((s1->index_ != 0xffffffff) && (var_4 = s2->index_, var_4 != 0xffffffff)) {
    return s1->index_ < var_4;
  }
                    /* WARNING: Subroutine does not return */
  Input_section_sort_entry::var_5(this_00,(char *)__s,var_4);
}


(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: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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: (call_expression function: (identifier) arguments: (argument_list (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: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (number_literal) right: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))))) (return_statement (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))))))) (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: (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;
  int iVar3;
  int iVar4;
  uint uVar5;
  long extraout_RDX;
  ulong __n;
  long lVar6;
  long lVar7;
  
  lVar7 = param_2;
  iVar3 = FUN_00212400(*(undefined8 *)(param_2 + 0x28));
  iVar4 = FUN_00212400(*(undefined8 *)(param_3 + 0x28));
  if (iVar3 != iVar4) {
    uVar5 = 0;
    if ((-1 < iVar3) && (uVar5 = 1, -1 < iVar4)) {
      uVar5 = (uint)(iVar3 < iVar4);
    }
    return uVar5;
  }
  uVar5 = *(uint *)(param_2 + 0x20);
  if ((uVar5 != 0xffffffff) && (*(uint *)(param_3 + 0x20) != 0xffffffff)) {
    return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(param_3 + 0x20));
  }
  FUN_0025fff0();
  uVar1 = *(ulong *)(lVar7 + 0x30);
  uVar2 = *(ulong *)(extraout_RDX + 0x30);
  __n = uVar2;
  if (uVar1 <= uVar2) {
    __n = uVar1;
  }
  if ((__n != 0) &&
     (uVar5 = memcmp(*(void **)(lVar7 + 0x28),*(void **)(extraout_RDX + 0x28),__n), uVar5 != 0)) {
    return uVar5 >> 0x1f;
  }
  lVar6 = uVar1 - uVar2;
  if (0x7fffffff < lVar6) {
    return 0;
  }
  if (lVar6 < -0x80000000) {
    uVar5 = 1;
  }
  else {
    if ((uint)lVar6 == 0) {
      uVar5 = *(uint *)(lVar7 + 0x20);
      if ((uVar5 != 0xffffffff) && (*(uint *)(extraout_RDX + 0x20) != 0xffffffff)) {
        return CONCAT31((int3)(uVar5 >> 8),uVar5 < *(uint *)(extraout_RDX + 0x20));
      }
      FUN_0025fff0();
    }
    uVar5 = (uint)lVar6 >> 0x1f;
  }
  return uVar5;
}

