
/* DWARF original prototype: int advance(Track_relocs<64,_true> * this, off_t offset) */

int __thiscall gold::Track_relocs<64,_true>::advance(Track_relocs<64,_true> *this,off_t offset)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int in_a2;
  uint in_a3;
  
  uVar2 = this->pos_;
  if (this->len_ <= uVar2) {
    return 0;
  }
  piVar1 = (int *)(this->prelocs_ + uVar2);
  iVar3 = *piVar1;
  if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {
    return 0;
  }
  iVar3 = 1;
  while (uVar2 = this->reloc_size_ + uVar2, uVar2 < this->len_) {
    piVar1 = (int *)(this->prelocs_ + uVar2);
    iVar4 = *piVar1;
    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;
    iVar3 = iVar3 + 1;
  }
  this->pos_ = uVar2;
  return iVar3;
}



/* gold::Track_relocs<64, true>::advance(long long) */

int gold::Track_relocs<64,true>::advance(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  int *in_a0;
  int iVar3;
  int iVar4;
  int in_a2;
  uint in_a3;
  
  uVar2 = in_a0[2];
  if ((uint)in_a0[1] <= uVar2) {
    return 0;
  }
  piVar1 = (int *)(*in_a0 + uVar2);
  iVar3 = *piVar1;
  if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {
    return 0;
  }
  iVar3 = 1;
  while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {
    piVar1 = (int *)(*in_a0 + uVar2);
    iVar4 = *piVar1;
    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;
    iVar3 = iVar3 + 1;
  }
  in_a0[2] = uVar2;
  return iVar3;
}


lw v1,0x8(a0)
lw t3,0x4(a0)
sltu v0,v1,t3
beq v0,zero,0x0027f534
_nop
lw t4,0x0(a0)
addu v0,t4,v1
lw a1,0x0(v0)
slt t0,a1,a2
beq t0,zero,0x0027f53c
_nop
lw t5,0xc(a0)
or v0,zero,zero
addiu v0,v0,0x1
addu v1,t5,v1
sltu a1,v1,t3
beq a1,zero,0x0027f50c
_addu t0,t4,v1
lw a1,0x0(t0)
slt t1,a1,a2
beq t1,zero,0x0027f514
_addu t2,v1,t5
or v1,t2,zero
sltu a1,v1,t3
addu t0,t4,v1
bne a1,zero,0x0027f4e8
_addiu v0,v0,0x1
jr ra
_sw v1,0x8(a0)
bne a1,a2,0x0027f50c
_nop
lw a1,0x4(t0)
sltu a1,a1,a3
beq a1,zero,0x0027f50c
_nop
b 0x0027f4fc
_or v1,t2,zero
jr ra
_or v0,zero,zero
bne a1,a2,0x0027f554
_nop
lw v0,0x4(v0)
sltu v0,v0,a3
bne v0,zero,0x0027f4cc
_nop
jr ra
_or v0,zero,zero
(translation_unit "/* gold::Track_relocs<64, true>::advance(long long) */\n\nint gold::Track_relocs<64,true>::advance(longlong param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *in_a0;\n  int iVar3;\n  int iVar4;\n  int in_a2;\n  uint in_a3;\n  \n  uVar2 = in_a0[2];\n  if ((uint)in_a0[1] <= uVar2) {\n    return 0;\n  }\n  piVar1 = (int *)(*in_a0 + uVar2);\n  iVar3 = *piVar1;\n  if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }\n  iVar3 = 1;\n  while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }\n  in_a0[2] = uVar2;\n  return iVar3;\n}\n\n" comment (declaration "int gold::Track_relocs<64,true>::advance(longlong param_1)\n\n{\n  int *piVar1;" primitive_type (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "true>::advance(longlong param_1)\n\n{\n  int" identifier > : : (function_declarator "advance(longlong param_1)" identifier (parameter_list "(longlong param_1)" ( (parameter_declaration "longlong param_1" type_identifier identifier) ))) { primitive_type) (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int *in_a0;" primitive_type (pointer_declarator "*in_a0" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int in_a2;" primitive_type identifier ;) (declaration "uint in_a3;" type_identifier identifier ;) (expression_statement "uVar2 = in_a0[2];" (assignment_expression "uVar2 = in_a0[2]" identifier = (subscript_expression "in_a0[2]" identifier [ number_literal ])) ;) (if_statement "if ((uint)in_a0[1] <= uVar2) {\n    return 0;\n  }" if (parenthesized_expression "((uint)in_a0[1] <= uVar2)" ( (binary_expression "(uint)in_a0[1] <= uVar2" (cast_expression "(uint)in_a0[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in_a0[1]" identifier [ number_literal ])) <= identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar1 = (int *)(*in_a0 + uVar2);" (assignment_expression "piVar1 = (int *)(*in_a0 + uVar2)" identifier = (cast_expression "(int *)(*in_a0 + uVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*in_a0 + uVar2)" ( (binary_expression "*in_a0 + uVar2" (pointer_expression "*in_a0" * identifier) + identifier) )))) ;) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }" if (parenthesized_expression "((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" ( (binary_expression "(in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar3)" ( (binary_expression "in_a2 <= iVar3" identifier <= identifier) )) && (parenthesized_expression "((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" ( (parenthesized_expression "(iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))" ( (binary_expression "iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar3 != in_a2" identifier != identifier) || (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" ( (binary_expression "in_a3 <= (uint)piVar1[1]" identifier <= (cast_expression "(uint)piVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[1]" identifier [ number_literal ]))) ))) )) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" identifier = number_literal) ;) (while_statement "while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" while (parenthesized_expression "(uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1])" ( (comma_expression "uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]" (assignment_expression "uVar2 = in_a0[3] + uVar2" identifier = (binary_expression "in_a0[3] + uVar2" (subscript_expression "in_a0[3]" identifier [ number_literal ]) + identifier)) , (binary_expression "uVar2 < (uint)in_a0[1]" identifier < (cast_expression "(uint)in_a0[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in_a0[1]" identifier [ number_literal ])))) )) (compound_statement "{\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" { (expression_statement "piVar1 = (int *)(*in_a0 + uVar2);" (assignment_expression "piVar1 = (int *)(*in_a0 + uVar2)" identifier = (cast_expression "(int *)(*in_a0 + uVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*in_a0 + uVar2)" ( (binary_expression "*in_a0 + uVar2" (pointer_expression "*in_a0" * identifier) + identifier) )))) ;) (expression_statement "iVar4 = *piVar1;" (assignment_expression "iVar4 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;" if (parenthesized_expression "((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" ( (binary_expression "(in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar4)" ( (binary_expression "in_a2 <= iVar4" identifier <= identifier) )) && (parenthesized_expression "((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" ( (parenthesized_expression "(iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))" ( (binary_expression "iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar4 != in_a2" identifier != identifier) || (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" ( (binary_expression "in_a3 <= (uint)piVar1[1]" identifier <= (cast_expression "(uint)piVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[1]" identifier [ number_literal ]))) ))) )) ))) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) })) (expression_statement "in_a0[2] = uVar2;" (assignment_expression "in_a0[2] = uVar2" (subscript_expression "in_a0[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return iVar3;" return identifier ;) (ERROR "}" }))
(translation_unit "/* DWARF original prototype: int advance(Track_relocs<64,_true> * this, off_t offset) */\n\nint __thiscall gold::Track_relocs<64,_true>::advance(Track_relocs<64,_true> *this,off_t offset)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int in_a2;\n  uint in_a3;\n  \n  uVar2 = this->pos_;\n  if (this->len_ <= uVar2) {\n    return 0;\n  }\n  piVar1 = (int *)(this->prelocs_ + uVar2);\n  iVar3 = *piVar1;\n  if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }\n  iVar3 = 1;\n  while (uVar2 = this->reloc_size_ + uVar2, uVar2 < this->len_) {\n    piVar1 = (int *)(this->prelocs_ + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }\n  this->pos_ = uVar2;\n  return iVar3;\n}\n\n" comment (declaration "int __thiscall gold::Track_relocs<64,_true>::advance(Track_relocs<64,_true> *this,off_t offset)\n\n{\n  int *piVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_true>::advance(Track_relocs<64,_true> *this,off_t offset)\n\n{\n  int" identifier > : : (function_declarator "advance(Track_relocs<64,_true> *this,off_t offset)" identifier (parameter_list "(Track_relocs<64,_true> *this,off_t offset)" ( (parameter_declaration "Track_relocs" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_true> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "off_t offset" type_identifier identifier) ))) { primitive_type) (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int in_a2;" primitive_type identifier ;) (declaration "uint in_a3;" type_identifier identifier ;) (expression_statement "uVar2 = this->pos_;" (assignment_expression "uVar2 = this->pos_" identifier = (field_expression "this->pos_" identifier -> field_identifier)) ;) (if_statement "if (this->len_ <= uVar2) {\n    return 0;\n  }" if (parenthesized_expression "(this->len_ <= uVar2)" ( (binary_expression "this->len_ <= uVar2" (field_expression "this->len_" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar1 = (int *)(this->prelocs_ + uVar2);" (assignment_expression "piVar1 = (int *)(this->prelocs_ + uVar2)" identifier = (cast_expression "(int *)(this->prelocs_ + uVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->prelocs_ + uVar2)" ( (binary_expression "this->prelocs_ + uVar2" (field_expression "this->prelocs_" identifier -> field_identifier) + identifier) )))) ;) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }" if (parenthesized_expression "((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" ( (binary_expression "(in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar3)" ( (binary_expression "in_a2 <= iVar3" identifier <= identifier) )) && (parenthesized_expression "((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" ( (parenthesized_expression "(iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))" ( (binary_expression "iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar3 != in_a2" identifier != identifier) || (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" ( (binary_expression "in_a3 <= (uint)piVar1[1]" identifier <= (cast_expression "(uint)piVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[1]" identifier [ number_literal ]))) ))) )) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" identifier = number_literal) ;) (while_statement "while (uVar2 = this->reloc_size_ + uVar2, uVar2 < this->len_) {\n    piVar1 = (int *)(this->prelocs_ + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" while (parenthesized_expression "(uVar2 = this->reloc_size_ + uVar2, uVar2 < this->len_)" ( (comma_expression "uVar2 = this->reloc_size_ + uVar2, uVar2 < this->len_" (assignment_expression "uVar2 = this->reloc_size_ + uVar2" identifier = (binary_expression "this->reloc_size_ + uVar2" (field_expression "this->reloc_size_" identifier -> field_identifier) + identifier)) , (binary_expression "uVar2 < this->len_" identifier < (field_expression "this->len_" identifier -> field_identifier))) )) (compound_statement "{\n    piVar1 = (int *)(this->prelocs_ + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" { (expression_statement "piVar1 = (int *)(this->prelocs_ + uVar2);" (assignment_expression "piVar1 = (int *)(this->prelocs_ + uVar2)" identifier = (cast_expression "(int *)(this->prelocs_ + uVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->prelocs_ + uVar2)" ( (binary_expression "this->prelocs_ + uVar2" (field_expression "this->prelocs_" identifier -> field_identifier) + identifier) )))) ;) (expression_statement "iVar4 = *piVar1;" (assignment_expression "iVar4 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;" if (parenthesized_expression "((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" ( (binary_expression "(in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar4)" ( (binary_expression "in_a2 <= iVar4" identifier <= identifier) )) && (parenthesized_expression "((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" ( (parenthesized_expression "(iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))" ( (binary_expression "iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar4 != in_a2" identifier != identifier) || (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" ( (binary_expression "in_a3 <= (uint)piVar1[1]" identifier <= (cast_expression "(uint)piVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[1]" identifier [ number_literal ]))) ))) )) ))) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) })) (expression_statement "this->pos_ = uVar2;" (assignment_expression "this->pos_ = uVar2" (field_expression "this->pos_" identifier -> field_identifier) = identifier) ;) (return_statement "return iVar3;" return identifier ;) (ERROR "}" }))
(translation_unit "int gold::Track_relocs<64,true>::advance(longlong param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *in_a0;\n  int iVar3;\n  int iVar4;\n  int in_a2;\n  uint in_a3;\n  \n  uVar2 = in_a0[2];\n  if ((uint)in_a0[1] <= uVar2) {\n    return 0;\n  }\n  piVar1 = (int *)(*in_a0 + uVar2);\n  iVar3 = *piVar1;\n  if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }\n  iVar3 = 1;\n  while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }\n  in_a0[2] = uVar2;\n  return iVar3;\n}\n\n" (declaration "int gold::Track_relocs<64,true>::advance(longlong param_1)\n\n{\n  int *piVar1;" primitive_type (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "true>::advance(longlong param_1)\n\n{\n  int" identifier > : : (function_declarator "advance(longlong param_1)" identifier (parameter_list "(longlong param_1)" ( (parameter_declaration "longlong param_1" type_identifier identifier) ))) { primitive_type) (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int *in_a0;" primitive_type (pointer_declarator "*in_a0" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int in_a2;" primitive_type identifier ;) (declaration "uint in_a3;" type_identifier identifier ;) (expression_statement "uVar2 = in_a0[2];" (assignment_expression "uVar2 = in_a0[2]" identifier = (subscript_expression "in_a0[2]" identifier [ number_literal ])) ;) (if_statement "if ((uint)in_a0[1] <= uVar2) {\n    return 0;\n  }" if (parenthesized_expression "((uint)in_a0[1] <= uVar2)" ( (binary_expression "(uint)in_a0[1] <= uVar2" (cast_expression "(uint)in_a0[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in_a0[1]" identifier [ number_literal ])) <= identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar1 = (int *)(*in_a0 + uVar2);" (assignment_expression "piVar1 = (int *)(*in_a0 + uVar2)" identifier = (cast_expression "(int *)(*in_a0 + uVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*in_a0 + uVar2)" ( (binary_expression "*in_a0 + uVar2" (pointer_expression "*in_a0" * identifier) + identifier) )))) ;) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }" if (parenthesized_expression "((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" ( (binary_expression "(in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar3)" ( (binary_expression "in_a2 <= iVar3" identifier <= identifier) )) && (parenthesized_expression "((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" ( (parenthesized_expression "(iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))" ( (binary_expression "iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar3 != in_a2" identifier != identifier) || (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" ( (binary_expression "in_a3 <= (uint)piVar1[1]" identifier <= (cast_expression "(uint)piVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[1]" identifier [ number_literal ]))) ))) )) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" identifier = number_literal) ;) (while_statement "while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" while (parenthesized_expression "(uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1])" ( (comma_expression "uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]" (assignment_expression "uVar2 = in_a0[3] + uVar2" identifier = (binary_expression "in_a0[3] + uVar2" (subscript_expression "in_a0[3]" identifier [ number_literal ]) + identifier)) , (binary_expression "uVar2 < (uint)in_a0[1]" identifier < (cast_expression "(uint)in_a0[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in_a0[1]" identifier [ number_literal ])))) )) (compound_statement "{\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" { (expression_statement "piVar1 = (int *)(*in_a0 + uVar2);" (assignment_expression "piVar1 = (int *)(*in_a0 + uVar2)" identifier = (cast_expression "(int *)(*in_a0 + uVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*in_a0 + uVar2)" ( (binary_expression "*in_a0 + uVar2" (pointer_expression "*in_a0" * identifier) + identifier) )))) ;) (expression_statement "iVar4 = *piVar1;" (assignment_expression "iVar4 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;" if (parenthesized_expression "((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" ( (binary_expression "(in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar4)" ( (binary_expression "in_a2 <= iVar4" identifier <= identifier) )) && (parenthesized_expression "((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" ( (parenthesized_expression "(iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))" ( (binary_expression "iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar4 != in_a2" identifier != identifier) || (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" ( (binary_expression "in_a3 <= (uint)piVar1[1]" identifier <= (cast_expression "(uint)piVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[1]" identifier [ number_literal ]))) ))) )) ))) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) })) (expression_statement "in_a0[2] = uVar2;" (assignment_expression "in_a0[2] = uVar2" (subscript_expression "in_a0[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return iVar3;" return identifier ;) (ERROR "}" }))
(translation_unit (declaration TYPE (ERROR IDENT : :) IDENT (ERROR < LIT) , (ERROR IDENT > : : (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) { TYPE) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != IDENT) || (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) , (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != IDENT) || (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) ))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return IDENT ;) (ERROR }))
(declaration "int gold::Track_relocs<64,true>::advance(longlong param_1)\n\n{\n  int *piVar1;" (primitive_type "int") (ERROR "gold::" (identifier "gold") (: ":") (: ":")) (identifier "Track_relocs") (ERROR "<64" (< "<") (number_literal "64")) (, ",") (ERROR "true>::advance(longlong param_1)\n\n{\n  int" (identifier "true") (> ">") (: ":") (: ":") (function_declarator "advance(longlong param_1)" (identifier "advance") (parameter_list "(longlong param_1)" (( "(") (parameter_declaration "longlong param_1" (type_identifier "longlong") (identifier "param_1")) () ")"))) ({ "{") (primitive_type "int")) (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int *in_a0;" (primitive_type "int") (pointer_declarator "*in_a0" (* "*") (identifier "in_a0")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int in_a2;" (primitive_type "int") (identifier "in_a2") (; ";")) (declaration "uint in_a3;" (type_identifier "uint") (identifier "in_a3") (; ";")) (expression_statement "uVar2 = in_a0[2];" (assignment_expression "uVar2 = in_a0[2]" (identifier "uVar2") (= "=") (subscript_expression "in_a0[2]" (identifier "in_a0") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if ((uint)in_a0[1] <= uVar2) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((uint)in_a0[1] <= uVar2)" (( "(") (binary_expression "(uint)in_a0[1] <= uVar2" (cast_expression "(uint)in_a0[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "in_a0[1]" (identifier "in_a0") ([ "[") (number_literal "1") (] "]"))) (<= "<=") (identifier "uVar2")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "piVar1 = (int *)(*in_a0 + uVar2);" (assignment_expression "piVar1 = (int *)(*in_a0 + uVar2)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*in_a0 + uVar2)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*in_a0 + uVar2)" (( "(") (binary_expression "*in_a0 + uVar2" (pointer_expression "*in_a0" (* "*") (identifier "in_a0")) (+ "+") (identifier "uVar2")) () ")")))) (; ";")) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" (identifier "iVar3") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (if_statement "if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" (( "(") (binary_expression "(in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar3)" (( "(") (binary_expression "in_a2 <= iVar3" (identifier "in_a2") (<= "<=") (identifier "iVar3")) () ")")) (&& "&&") (parenthesized_expression "((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (( "(") (parenthesized_expression "(iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1]))" (( "(") (binary_expression "iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar3 != in_a2" (identifier "iVar3") (!= "!=") (identifier "in_a2")) (|| "||") (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" (( "(") (binary_expression "in_a3 <= (uint)piVar1[1]" (identifier "in_a3") (<= "<=") (cast_expression "(uint)piVar1[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]")))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar3 = 1;" (assignment_expression "iVar3 = 1" (identifier "iVar3") (= "=") (number_literal "1")) (; ";")) (while_statement "while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" (while "while") (parenthesized_expression "(uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1])" (( "(") (comma_expression "uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]" (assignment_expression "uVar2 = in_a0[3] + uVar2" (identifier "uVar2") (= "=") (binary_expression "in_a0[3] + uVar2" (subscript_expression "in_a0[3]" (identifier "in_a0") ([ "[") (number_literal "3") (] "]")) (+ "+") (identifier "uVar2"))) (, ",") (binary_expression "uVar2 < (uint)in_a0[1]" (identifier "uVar2") (< "<") (cast_expression "(uint)in_a0[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "in_a0[1]" (identifier "in_a0") ([ "[") (number_literal "1") (] "]"))))) () ")")) (compound_statement "{\n    piVar1 = (int *)(*in_a0 + uVar2);\n    iVar4 = *piVar1;\n    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;\n    iVar3 = iVar3 + 1;\n  }" ({ "{") (expression_statement "piVar1 = (int *)(*in_a0 + uVar2);" (assignment_expression "piVar1 = (int *)(*in_a0 + uVar2)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*in_a0 + uVar2)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*in_a0 + uVar2)" (( "(") (binary_expression "*in_a0 + uVar2" (pointer_expression "*in_a0" (* "*") (identifier "in_a0")) (+ "+") (identifier "uVar2")) () ")")))) (; ";")) (expression_statement "iVar4 = *piVar1;" (assignment_expression "iVar4 = *piVar1" (identifier "iVar4") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (if_statement "if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;" (if "if") (parenthesized_expression "((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))))" (( "(") (binary_expression "(in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (parenthesized_expression "(in_a2 <= iVar4)" (( "(") (binary_expression "in_a2 <= iVar4" (identifier "in_a2") (<= "<=") (identifier "iVar4")) () ")")) (&& "&&") (parenthesized_expression "((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))" (( "(") (parenthesized_expression "(iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1]))" (( "(") (binary_expression "iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])" (binary_expression "iVar4 != in_a2" (identifier "iVar4") (!= "!=") (identifier "in_a2")) (|| "||") (parenthesized_expression "(in_a3 <= (uint)piVar1[1])" (( "(") (binary_expression "in_a3 <= (uint)piVar1[1]" (identifier "in_a3") (<= "<=") (cast_expression "(uint)piVar1[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]")))) () ")"))) () ")")) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "in_a0[2] = uVar2;" (assignment_expression "in_a0[2] = uVar2" (subscript_expression "in_a0[2]" (identifier "in_a0") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (ERROR "}" (} "}"))
(translation_unit (declaration type: (primitive_type) (ERROR (identifier)) declarator: (identifier) (ERROR (number_literal)) (ERROR (identifier) (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)))) (primitive_type)) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (return_statement (identifier)) (ERROR))

/* gold::Track_relocs<64, true>::MASKED(long long) */

int gold::Track_relocs<64,true>::MASKED(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  int *in_a0;
  int iVar3;
  int iVar4;
  int in_a2;
  uint in_a3;
  
  uVar2 = in_a0[2];
  if ((uint)in_a0[1] <= uVar2) {
    return 0;
  }
  piVar1 = (int *)(*in_a0 + uVar2);
  iVar3 = *piVar1;
  if ((in_a2 <= iVar3) && ((iVar3 != in_a2 || (in_a3 <= (uint)piVar1[1])))) {
    return 0;
  }
  iVar3 = 1;
  while (uVar2 = in_a0[3] + uVar2, uVar2 < (uint)in_a0[1]) {
    piVar1 = (int *)(*in_a0 + uVar2);
    iVar4 = *piVar1;
    if ((in_a2 <= iVar4) && ((iVar4 != in_a2 || (in_a3 <= (uint)piVar1[1])))) break;
    iVar3 = iVar3 + 1;
  }
  in_a0[2] = uVar2;
  return iVar3;
}

