
/* DWARF original prototype: TimeStats get_pass_time(Timer * this, int n) */

TimeStats * __thiscall
gold::Timer::get_pass_time(TimeStats *__return_storage_ptr__,Timer *this,int n)

{
  long lVar1;
  long lVar2;
  TimeStats *thispass;
  
  if ((uint)n < 3) {
    lVar2 = this->pass_times_[n].sys;
    lVar1 = this->pass_times_[n].wall;
    __return_storage_ptr__->user = this->pass_times_[n].user;
    __return_storage_ptr__->sys = lVar2;
    __return_storage_ptr__->wall = lVar1;
    if (n != 0) {
      this = (Timer *)(this->pass_times_ + (n + -1));
    }
    __return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;
    __return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;
    __return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;
    return __return_storage_ptr__;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/timer.cc",0x7c,"get_pass_time");
}



long * FUN_0045b660(long *param_1,long *param_2,uint param_3)

{
  long lVar1;
  long lVar2;
  long lVar3;
  
  if (param_3 < 3) {
    lVar3 = (long)(int)param_3;
    lVar2 = param_2[lVar3 * 3 + 4];
    lVar1 = param_2[lVar3 * 3 + 5];
    *param_1 = param_2[lVar3 * 3 + 3];
    param_1[1] = lVar2;
    param_1[2] = lVar1;
    if (param_3 != 0) {
      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;
    }
    param_1[2] = param_1[2] - param_2[2];
    *param_1 = *param_1 - *param_2;
    param_1[1] = param_1[1] - param_2[1];
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");
}


CMP EDX,0x2
JA 0x0045b6ae
MOVSXD RAX,EDX
LEA RAX,[RAX + RAX*0x2]
LEA RAX,[RSI + RAX*0x8 + 0x10]
MOVDQU XMM0,xmmword ptr [RAX + 0x8]
MOV RAX,qword ptr [RAX + 0x18]
MOVUPS xmmword ptr [RDI],XMM0
MOV qword ptr [RDI + 0x10],RAX
TEST EDX,EDX
JZ 0x0045b694
SUB EDX,0x1
MOVSXD RDX,EDX
LEA RAX,[RDX + RDX*0x2 + 0x3]
LEA RSI,[RSI + RAX*0x8]
MOV RAX,qword ptr [RSI + 0x10]
SUB qword ptr [RDI + 0x10],RAX
MOV RAX,qword ptr [RSI]
SUB qword ptr [RDI],RAX
MOV RAX,qword ptr [RSI + 0x8]
SUB qword ptr [RDI + 0x8],RAX
MOV RAX,RDI
RET
PUSH RAX
LEA RDX,[0x582c50]
MOV ESI,0x7c
LEA RDI,[0x582c39]
CALL 0x00352af0
(translation_unit "long * FUN_0045b660(long *param_1,long *param_2,uint param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}\n\n" (function_definition "long * FUN_0045b660(long *param_1,long *param_2,uint param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0045b660(long *param_1,long *param_2,uint param_3)" * (function_declarator "FUN_0045b660(long *param_1,long *param_2,uint param_3)" identifier (parameter_list "(long *param_1,long *param_2,uint param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) )))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }" { (expression_statement "lVar3 = (long)(int)param_3;" (assignment_expression "lVar3 = (long)(int)param_3" identifier = (cast_expression "(long)(int)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "lVar2 = param_2[lVar3 * 3 + 4];" (assignment_expression "lVar2 = param_2[lVar3 * 3 + 4]" identifier = (subscript_expression "param_2[lVar3 * 3 + 4]" identifier [ (binary_expression "lVar3 * 3 + 4" (binary_expression "lVar3 * 3" identifier * number_literal) + number_literal) ])) ;) (expression_statement "lVar1 = param_2[lVar3 * 3 + 5];" (assignment_expression "lVar1 = param_2[lVar3 * 3 + 5]" identifier = (subscript_expression "param_2[lVar3 * 3 + 5]" identifier [ (binary_expression "lVar3 * 3 + 5" (binary_expression "lVar3 * 3" identifier * number_literal) + number_literal) ])) ;) (expression_statement "*param_1 = param_2[lVar3 * 3 + 3];" (assignment_expression "*param_1 = param_2[lVar3 * 3 + 3]" (pointer_expression "*param_1" * identifier) = (subscript_expression "param_2[lVar3 * 3 + 3]" identifier [ (binary_expression "lVar3 * 3 + 3" (binary_expression "lVar3 * 3" identifier * number_literal) + number_literal) ])) ;) (expression_statement "param_1[1] = lVar2;" (assignment_expression "param_1[1] = lVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = lVar1;" (assignment_expression "param_1[2] = lVar1" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }" { (expression_statement "param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;" (assignment_expression "param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3" identifier = (binary_expression "param_2 + (long)(int)(param_3 - 1) * 3 + 3" (binary_expression "param_2 + (long)(int)(param_3 - 1) * 3" identifier + (binary_expression "(long)(int)(param_3 - 1) * 3" (cast_expression "(long)(int)(param_3 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(param_3 - 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) )))) * number_literal)) + number_literal)) ;) })) (expression_statement "param_1[2] = param_1[2] - param_2[2];" (assignment_expression "param_1[2] = param_1[2] - param_2[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "param_1[2] - param_2[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (subscript_expression "param_2[2]" identifier [ number_literal ]))) ;) (expression_statement "*param_1 = *param_1 - *param_2;" (assignment_expression "*param_1 = *param_1 - *param_2" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 - *param_2" (pointer_expression "*param_1" * identifier) - (pointer_expression "*param_2" * identifier))) ;) (expression_statement "param_1[1] = param_1[1] - param_2[1];" (assignment_expression "param_1[1] = param_1[1] - param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] - param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (subscript_expression "param_2[1]" identifier [ number_literal ]))) ;) (return_statement "return param_1;" return identifier ;) })) comment (expression_statement "FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");" (call_expression "FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time")" identifier (argument_list "("../../gold/timer.cc",0x7c,"get_pass_time")" ( (string_literal ""../../gold/timer.cc"" " string_content ") , number_literal , (string_literal ""get_pass_time"" " string_content ") ))) ;) })))
(translation_unit "/* DWARF original prototype: TimeStats get_pass_time(Timer * this, int n) */\n\nTimeStats * __thiscall\ngold::Timer::get_pass_time(TimeStats *__return_storage_ptr__,Timer *this,int n)\n\n{\n  long lVar1;\n  long lVar2;\n  TimeStats *thispass;\n  \n  if ((uint)n < 3) {\n    lVar2 = this->pass_times_[n].sys;\n    lVar1 = this->pass_times_[n].wall;\n    __return_storage_ptr__->user = this->pass_times_[n].user;\n    __return_storage_ptr__->sys = lVar2;\n    __return_storage_ptr__->wall = lVar1;\n    if (n != 0) {\n      this = (Timer *)(this->pass_times_ + (n + -1));\n    }\n    __return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;\n    __return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;\n    __return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;\n    return __return_storage_ptr__;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/timer.cc",0x7c,"get_pass_time");\n}\n\n" comment (ERROR "TimeStats * __thiscall\ngold::Timer::get_pass_time(TimeStats *__return_storage_ptr__,Timer *this,int n)" (binary_expression "TimeStats * __thiscall\ngold::Timer::get_pass_time(TimeStats *__return_storage_ptr__" (binary_expression "TimeStats * __thiscall" identifier * identifier) (ERROR "gold::Timer::get_pass_time(TimeStats" identifier : : identifier : : identifier ( identifier) * identifier) , type_identifier (pointer_declarator "*this" * identifier) , identifier identifier )) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  TimeStats *thispass;\n  \n  if ((uint)n < 3) {\n    lVar2 = this->pass_times_[n].sys;\n    lVar1 = this->pass_times_[n].wall;\n    __return_storage_ptr__->user = this->pass_times_[n].user;\n    __return_storage_ptr__->sys = lVar2;\n    __return_storage_ptr__->wall = lVar1;\n    if (n != 0) {\n      this = (Timer *)(this->pass_times_ + (n + -1));\n    }\n    __return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;\n    __return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;\n    __return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;\n    return __return_storage_ptr__;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/timer.cc",0x7c,"get_pass_time");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "TimeStats *thispass;" type_identifier (pointer_declarator "*thispass" * identifier) ;) (if_statement "if ((uint)n < 3) {\n    lVar2 = this->pass_times_[n].sys;\n    lVar1 = this->pass_times_[n].wall;\n    __return_storage_ptr__->user = this->pass_times_[n].user;\n    __return_storage_ptr__->sys = lVar2;\n    __return_storage_ptr__->wall = lVar1;\n    if (n != 0) {\n      this = (Timer *)(this->pass_times_ + (n + -1));\n    }\n    __return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;\n    __return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;\n    __return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;\n    return __return_storage_ptr__;\n  }" if (parenthesized_expression "((uint)n < 3)" ( (binary_expression "(uint)n < 3" (cast_expression "(uint)n" ( (type_descriptor "uint" type_identifier) ) identifier) < number_literal) )) (compound_statement "{\n    lVar2 = this->pass_times_[n].sys;\n    lVar1 = this->pass_times_[n].wall;\n    __return_storage_ptr__->user = this->pass_times_[n].user;\n    __return_storage_ptr__->sys = lVar2;\n    __return_storage_ptr__->wall = lVar1;\n    if (n != 0) {\n      this = (Timer *)(this->pass_times_ + (n + -1));\n    }\n    __return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;\n    __return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;\n    __return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;\n    return __return_storage_ptr__;\n  }" { (expression_statement "lVar2 = this->pass_times_[n].sys;" (assignment_expression "lVar2 = this->pass_times_[n].sys" identifier = (field_expression "this->pass_times_[n].sys" (subscript_expression "this->pass_times_[n]" (field_expression "this->pass_times_" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (expression_statement "lVar1 = this->pass_times_[n].wall;" (assignment_expression "lVar1 = this->pass_times_[n].wall" identifier = (field_expression "this->pass_times_[n].wall" (subscript_expression "this->pass_times_[n]" (field_expression "this->pass_times_" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (expression_statement "__return_storage_ptr__->user = this->pass_times_[n].user;" (assignment_expression "__return_storage_ptr__->user = this->pass_times_[n].user" (field_expression "__return_storage_ptr__->user" identifier -> field_identifier) = (field_expression "this->pass_times_[n].user" (subscript_expression "this->pass_times_[n]" (field_expression "this->pass_times_" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (expression_statement "__return_storage_ptr__->sys = lVar2;" (assignment_expression "__return_storage_ptr__->sys = lVar2" (field_expression "__return_storage_ptr__->sys" identifier -> field_identifier) = identifier) ;) (expression_statement "__return_storage_ptr__->wall = lVar1;" (assignment_expression "__return_storage_ptr__->wall = lVar1" (field_expression "__return_storage_ptr__->wall" identifier -> field_identifier) = identifier) ;) (if_statement "if (n != 0) {\n      this = (Timer *)(this->pass_times_ + (n + -1));\n    }" if (parenthesized_expression "(n != 0)" ( (binary_expression "n != 0" identifier != number_literal) )) (compound_statement "{\n      this = (Timer *)(this->pass_times_ + (n + -1));\n    }" { (expression_statement "this = (Timer *)(this->pass_times_ + (n + -1));" (assignment_expression "this = (Timer *)(this->pass_times_ + (n + -1))" identifier = (cast_expression "(Timer *)(this->pass_times_ + (n + -1))" ( (type_descriptor "Timer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->pass_times_ + (n + -1))" ( (binary_expression "this->pass_times_ + (n + -1)" (field_expression "this->pass_times_" identifier -> field_identifier) + (parenthesized_expression "(n + -1)" ( (binary_expression "n + -1" identifier + number_literal) ))) )))) ;) })) (expression_statement "__return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;" (assignment_expression "__return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall" (field_expression "__return_storage_ptr__->wall" identifier -> field_identifier) = (binary_expression "__return_storage_ptr__->wall - (this->start_time_).wall" (field_expression "__return_storage_ptr__->wall" identifier -> field_identifier) - (field_expression "(this->start_time_).wall" (parenthesized_expression "(this->start_time_)" ( (field_expression "this->start_time_" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "__return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;" (assignment_expression "__return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user" (field_expression "__return_storage_ptr__->user" identifier -> field_identifier) = (binary_expression "__return_storage_ptr__->user - (this->start_time_).user" (field_expression "__return_storage_ptr__->user" identifier -> field_identifier) - (field_expression "(this->start_time_).user" (parenthesized_expression "(this->start_time_)" ( (field_expression "this->start_time_" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "__return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;" (assignment_expression "__return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys" (field_expression "__return_storage_ptr__->sys" identifier -> field_identifier) = (binary_expression "__return_storage_ptr__->sys - (this->start_time_).sys" (field_expression "__return_storage_ptr__->sys" identifier -> field_identifier) - (field_expression "(this->start_time_).sys" (parenthesized_expression "(this->start_time_)" ( (field_expression "this->start_time_" identifier -> field_identifier) )) . field_identifier))) ;) (return_statement "return __return_storage_ptr__;" return identifier ;) })) comment (expression_statement "do_gold_unreachable("../../gold/timer.cc",0x7c,"get_pass_time");" (call_expression "do_gold_unreachable("../../gold/timer.cc",0x7c,"get_pass_time")" identifier (argument_list "("../../gold/timer.cc",0x7c,"get_pass_time")" ( (string_literal ""../../gold/timer.cc"" " string_content ") , number_literal , (string_literal ""get_pass_time"" " string_content ") ))) ;) }))
(translation_unit "long * FUN_0045b660(long *param_1,long *param_2,uint param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    \n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}\n\n" (function_definition "long * FUN_0045b660(long *param_1,long *param_2,uint param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    \n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0045b660(long *param_1,long *param_2,uint param_3)" * (function_declarator "FUN_0045b660(long *param_1,long *param_2,uint param_3)" identifier (parameter_list "(long *param_1,long *param_2,uint param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) )))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    \n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }" { (expression_statement "lVar3 = (long)(int)param_3;" (assignment_expression "lVar3 = (long)(int)param_3" identifier = (cast_expression "(long)(int)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "lVar2 = param_2[lVar3 * 3 + 4];" (assignment_expression "lVar2 = param_2[lVar3 * 3 + 4]" identifier = (subscript_expression "param_2[lVar3 * 3 + 4]" identifier [ (binary_expression "lVar3 * 3 + 4" (binary_expression "lVar3 * 3" identifier * number_literal) + number_literal) ])) ;) (expression_statement "lVar1 = param_2[lVar3 * 3 + 5];" (assignment_expression "lVar1 = param_2[lVar3 * 3 + 5]" identifier = (subscript_expression "param_2[lVar3 * 3 + 5]" identifier [ (binary_expression "lVar3 * 3 + 5" (binary_expression "lVar3 * 3" identifier * number_literal) + number_literal) ])) ;) (expression_statement "*param_1 = param_2[lVar3 * 3 + 3];" (assignment_expression "*param_1 = param_2[lVar3 * 3 + 3]" (pointer_expression "*param_1" * identifier) = (subscript_expression "param_2[lVar3 * 3 + 3]" identifier [ (binary_expression "lVar3 * 3 + 3" (binary_expression "lVar3 * 3" identifier * number_literal) + number_literal) ])) ;) (expression_statement "param_1[1] = lVar2;" (assignment_expression "param_1[1] = lVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = lVar1;" (assignment_expression "param_1[2] = lVar1" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }" { (expression_statement "param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;" (assignment_expression "param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3" identifier = (binary_expression "param_2 + (long)(int)(param_3 - 1) * 3 + 3" (binary_expression "param_2 + (long)(int)(param_3 - 1) * 3" identifier + (binary_expression "(long)(int)(param_3 - 1) * 3" (cast_expression "(long)(int)(param_3 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(param_3 - 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) )))) * number_literal)) + number_literal)) ;) })) (expression_statement "param_1[2] = param_1[2] - param_2[2];" (assignment_expression "param_1[2] = param_1[2] - param_2[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "param_1[2] - param_2[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (subscript_expression "param_2[2]" identifier [ number_literal ]))) ;) (expression_statement "*param_1 = *param_1 - *param_2;" (assignment_expression "*param_1 = *param_1 - *param_2" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 - *param_2" (pointer_expression "*param_1" * identifier) - (pointer_expression "*param_2" * identifier))) ;) (expression_statement "param_1[1] = param_1[1] - param_2[1];" (assignment_expression "param_1[1] = param_1[1] - param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] - param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (subscript_expression "param_2[1]" identifier [ number_literal ]))) ;) (return_statement "return param_1;" return identifier ;) })) (expression_statement "FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");" (call_expression "FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time")" identifier (argument_list "("../../gold/timer.cc",0x7c,"get_pass_time")" ( (string_literal ""../../gold/timer.cc"" " string_content ") , number_literal , (string_literal ""get_pass_time"" " string_content ") ))) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) * LIT)) + LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) - (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ]))) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))
(function_definition "long * FUN_0045b660(long *param_1,long *param_2,uint param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    \n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_0045b660(long *param_1,long *param_2,uint param_3)" (* "*") (function_declarator "FUN_0045b660(long *param_1,long *param_2,uint param_3)" (identifier "FUN_0045b660") (parameter_list "(long *param_1,long *param_2,uint param_3)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")")))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  \n  if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }\n                    \n  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (if_statement "if (param_3 < 3) {\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }" (if "if") (parenthesized_expression "(param_3 < 3)" (( "(") (binary_expression "param_3 < 3" (identifier "param_3") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n    lVar3 = (long)(int)param_3;\n    lVar2 = param_2[lVar3 * 3 + 4];\n    lVar1 = param_2[lVar3 * 3 + 5];\n    *param_1 = param_2[lVar3 * 3 + 3];\n    param_1[1] = lVar2;\n    param_1[2] = lVar1;\n    if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }\n    param_1[2] = param_1[2] - param_2[2];\n    *param_1 = *param_1 - *param_2;\n    param_1[1] = param_1[1] - param_2[1];\n    return param_1;\n  }" ({ "{") (expression_statement "lVar3 = (long)(int)param_3;" (assignment_expression "lVar3 = (long)(int)param_3" (identifier "lVar3") (= "=") (cast_expression "(long)(int)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")))) (; ";")) (expression_statement "lVar2 = param_2[lVar3 * 3 + 4];" (assignment_expression "lVar2 = param_2[lVar3 * 3 + 4]" (identifier "lVar2") (= "=") (subscript_expression "param_2[lVar3 * 3 + 4]" (identifier "param_2") ([ "[") (binary_expression "lVar3 * 3 + 4" (binary_expression "lVar3 * 3" (identifier "lVar3") (* "*") (number_literal "3")) (+ "+") (number_literal "4")) (] "]"))) (; ";")) (expression_statement "lVar1 = param_2[lVar3 * 3 + 5];" (assignment_expression "lVar1 = param_2[lVar3 * 3 + 5]" (identifier "lVar1") (= "=") (subscript_expression "param_2[lVar3 * 3 + 5]" (identifier "param_2") ([ "[") (binary_expression "lVar3 * 3 + 5" (binary_expression "lVar3 * 3" (identifier "lVar3") (* "*") (number_literal "3")) (+ "+") (number_literal "5")) (] "]"))) (; ";")) (expression_statement "*param_1 = param_2[lVar3 * 3 + 3];" (assignment_expression "*param_1 = param_2[lVar3 * 3 + 3]" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (subscript_expression "param_2[lVar3 * 3 + 3]" (identifier "param_2") ([ "[") (binary_expression "lVar3 * 3 + 3" (binary_expression "lVar3 * 3" (identifier "lVar3") (* "*") (number_literal "3")) (+ "+") (number_literal "3")) (] "]"))) (; ";")) (expression_statement "param_1[1] = lVar2;" (assignment_expression "param_1[1] = lVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar2")) (; ";")) (expression_statement "param_1[2] = lVar1;" (assignment_expression "param_1[2] = lVar1" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "lVar1")) (; ";")) (if_statement "if (param_3 != 0) {\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }" (if "if") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;\n    }" ({ "{") (expression_statement "param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;" (assignment_expression "param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3" (identifier "param_2") (= "=") (binary_expression "param_2 + (long)(int)(param_3 - 1) * 3 + 3" (binary_expression "param_2 + (long)(int)(param_3 - 1) * 3" (identifier "param_2") (+ "+") (binary_expression "(long)(int)(param_3 - 1) * 3" (cast_expression "(long)(int)(param_3 - 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)(param_3 - 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_3 - 1)" (( "(") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) () ")")))) (* "*") (number_literal "3"))) (+ "+") (number_literal "3"))) (; ";")) (} "}"))) (expression_statement "param_1[2] = param_1[2] - param_2[2];" (assignment_expression "param_1[2] = param_1[2] - param_2[2]" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "param_1[2] - param_2[2]" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (- "-") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "*param_1 = *param_1 - *param_2;" (assignment_expression "*param_1 = *param_1 - *param_2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "*param_1 - *param_2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (- "-") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "param_1[1] = param_1[1] - param_2[1];" (assignment_expression "param_1[1] = param_1[1] - param_2[1]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_1[1] - param_2[1]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");" (call_expression "FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time")" (identifier "FUN_00352af0") (argument_list "("../../gold/timer.cc",0x7c,"get_pass_time")" (( "(") (string_literal ""../../gold/timer.cc"" (" """) (string_content "../../gold/timer.cc") (" """)) (, ",") (number_literal "0x7c") (, ",") (string_literal ""get_pass_time"" (" """) (string_content "get_pass_time") (" """)) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: TimeStats get_pass_time(Timer * this, int n) */

type_1 * __thiscall
gold::type_3::get_pass_time(type_1 *__return_storage_ptr__,type_3 *this,int var_1)

{
  long lVar1;
  long lVar2;
  type_1 *thispass;
  
  if ((type_2)var_1 < 3) {
    lVar2 = this->pass_times_[var_1].sys;
    lVar1 = this->pass_times_[var_1].wall;
    __return_storage_ptr__->user = this->pass_times_[var_1].user;
    __return_storage_ptr__->sys = lVar2;
    __return_storage_ptr__->wall = lVar1;
    if (var_1 != 0) {
      this = (type_3 *)(this->pass_times_ + (var_1 + -1));
    }
    __return_storage_ptr__->wall = __return_storage_ptr__->wall - (this->start_time_).wall;
    __return_storage_ptr__->user = __return_storage_ptr__->user - (this->start_time_).user;
    __return_storage_ptr__->sys = __return_storage_ptr__->sys - (this->start_time_).sys;
    return __return_storage_ptr__;
  }
                    /* WARNING: Subroutine does not return */
  var_2("../../gold/timer.cc",0x7c,"get_pass_time");
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier))))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))))) (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))))

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

{
  long lVar1;
  long lVar2;
  long lVar3;
  
  if (param_3 < 3) {
    lVar3 = (long)(int)param_3;
    lVar2 = param_2[lVar3 * 3 + 4];
    lVar1 = param_2[lVar3 * 3 + 5];
    *param_1 = param_2[lVar3 * 3 + 3];
    param_1[1] = lVar2;
    param_1[2] = lVar1;
    if (param_3 != 0) {
      param_2 = param_2 + (long)(int)(param_3 - 1) * 3 + 3;
    }
    param_1[2] = param_1[2] - param_2[2];
    *param_1 = *param_1 - *param_2;
    param_1[1] = param_1[1] - param_2[1];
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00352af0("../../gold/timer.cc",0x7c,"get_pass_time");
}

