
/* DWARF original prototype: void extend_match(match * m, Sym * sym, Sym_Table * tab, bfd_boolean
   second_pass, Sym_Table * tab) */

void extend_match(match *m,Sym *sym,Sym_Table *tab,bfd_boolean second_pass,Sym_Table *tab_1)

{
  uint uVar1;
  Sym *pSVar2;
  undefined4 in_register_0000000c;
  long lVar3;
  Sym *pSVar4;
  Sym *pSVar5;
  
  lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);
  if (m->prev_match != sym + -1) {
    uVar1 = tab->len;
    pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);
    pSVar4 = sym;
    pSVar5 = pSVar2;
    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {
      pSVar5->addr = pSVar4->addr;
      pSVar4 = (Sym *)&pSVar4->end_addr;
      pSVar5 = (Sym *)&pSVar5->end_addr;
    }
    m->prev_index = uVar1;
    pSVar2->next = m->first_match;
    m->first_match = pSVar2;
    lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);
    tab->len = tab->len + 1;
  }
  *(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158) = sym->end_addr;
  m->prev_match = sym;
  return;
}



void FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)

{
  uint uVar1;
  undefined8 *puVar2;
  long lVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  
  lVar3 = *param_4;
  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {
    uVar1 = *param_3;
    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);
    puVar4 = param_2;
    puVar5 = puVar2;
    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {
      *puVar5 = *puVar4;
      puVar4 = puVar4 + 1;
      puVar5 = puVar5 + 1;
    }
    *param_1 = uVar1;
    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);
    *(undefined8 **)(param_1 + 4) = puVar2;
    lVar3 = *param_4;
    *param_3 = *param_3 + 1;
  }
  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];
  *(undefined8 **)(param_1 + 2) = param_2;
  return;
}


MOV R10,RCX
MOV RAX,qword ptr [RCX]
MOV R8,RDI
MOV R9,RSI
LEA RCX,[RSI + -0x158]
CMP qword ptr [RDI + 0x8],RCX
JZ 0x0010c80b
MOV ECX,dword ptr [RDX]
MOV R11,RCX
IMUL RCX,RCX,0x158
ADD RAX,RCX
MOV ECX,0x2b
MOV RDI,RAX
MOVSQ.REP RDI,RSI
MOV RCX,qword ptr [R8 + 0x10]
MOV dword ptr [R8],R11D
MOV qword ptr [RAX + 0xd8],RCX
MOV qword ptr [R8 + 0x10],RAX
MOV RAX,qword ptr [R10]
ADD dword ptr [RDX],0x1
MOVSXD RDX,dword ptr [R8]
MOV RCX,qword ptr [R9 + 0x8]
IMUL RDX,RDX,0x158
MOV qword ptr [RAX + RDX*0x1 + 0x8],RCX
MOV qword ptr [R8 + 0x8],R9
RET
(translation_unit "void FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)\n\n{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}\n\n" (function_definition "void FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)\n\n{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}" primitive_type (function_declarator "FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)" identifier (parameter_list "(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (expression_statement "lVar3 = *param_4;" (assignment_expression "lVar3 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (if_statement "if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 2) != param_2 + -0x2b)" ( (binary_expression "*(undefined8 **)(param_1 + 2) != param_2 + -0x2b" (pointer_expression "*(undefined8 **)(param_1 + 2)" * (cast_expression "(undefined8 **)(param_1 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) != (binary_expression "param_2 + -0x2b" identifier + number_literal)) )) (compound_statement "{\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }" { (expression_statement "uVar1 = *param_3;" (assignment_expression "uVar1 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);" (assignment_expression "puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158)" identifier = (cast_expression "(undefined8 *)(lVar3 + (ulong)uVar1 * 0x158)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + (ulong)uVar1 * 0x158)" ( (binary_expression "lVar3 + (ulong)uVar1 * 0x158" identifier + (binary_expression "(ulong)uVar1 * 0x158" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "puVar4 = param_2;" (assignment_expression "puVar4 = param_2" identifier = identifier) ;) (expression_statement "puVar5 = puVar2;" (assignment_expression "puVar5 = puVar2" identifier = identifier) ;) (for_statement "for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }" for ( (assignment_expression "lVar3 = 0x2b" identifier = number_literal) ; (binary_expression "lVar3 != 0" identifier != number_literal) ; (assignment_expression "lVar3 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ) (compound_statement "{\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "*puVar5 = *puVar4;" (assignment_expression "*puVar5 = *puVar4" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "puVar2[0x1b] = *(undefined8 *)(param_1 + 4);" (assignment_expression "puVar2[0x1b] = *(undefined8 *)(param_1 + 4)" (subscript_expression "puVar2[0x1b]" identifier [ number_literal ]) = (pointer_expression "*(undefined8 *)(param_1 + 4)" * (cast_expression "(undefined8 *)(param_1 + 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 **)(param_1 + 4) = puVar2;" (assignment_expression "*(undefined8 **)(param_1 + 4) = puVar2" (pointer_expression "*(undefined8 **)(param_1 + 4)" * (cast_expression "(undefined8 **)(param_1 + 4)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar3 = *param_4;" (assignment_expression "lVar3 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (expression_statement "*param_3 = *param_3 + 1;" (assignment_expression "*param_3 = *param_3 + 1" (pointer_expression "*param_3" * identifier) = (binary_expression "*param_3 + 1" (pointer_expression "*param_3" * identifier) + number_literal)) ;) })) (expression_statement "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];" (assignment_expression "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1]" (pointer_expression "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158)" * (cast_expression "(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8 + (long)(int)*param_1 * 0x158)" ( (binary_expression "lVar3 + 8 + (long)(int)*param_1 * 0x158" (binary_expression "lVar3 + 8" identifier + number_literal) + (binary_expression "(long)(int)*param_1 * 0x158" (cast_expression "(long)(int)*param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)*param_1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_1" * identifier))) * number_literal)) )))) = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 **)(param_1 + 2) = param_2;" (assignment_expression "*(undefined8 **)(param_1 + 2) = param_2" (pointer_expression "*(undefined8 **)(param_1 + 2)" * (cast_expression "(undefined8 **)(param_1 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void extend_match(match * m, Sym * sym, Sym_Table * tab, bfd_boolean\n   second_pass, Sym_Table * tab) */\n\nvoid extend_match(match *m,Sym *sym,Sym_Table *tab,bfd_boolean second_pass,Sym_Table *tab_1)\n\n{\n  uint uVar1;\n  Sym *pSVar2;\n  undefined4 in_register_0000000c;\n  long lVar3;\n  Sym *pSVar4;\n  Sym *pSVar5;\n  \n  lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n  if (m->prev_match != sym + -1) {\n    uVar1 = tab->len;\n    pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);\n    pSVar4 = sym;\n    pSVar5 = pSVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }\n    m->prev_index = uVar1;\n    pSVar2->next = m->first_match;\n    m->first_match = pSVar2;\n    lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n    tab->len = tab->len + 1;\n  }\n  *(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158) = sym->end_addr;\n  m->prev_match = sym;\n  return;\n}\n\n" comment (function_definition "void extend_match(match *m,Sym *sym,Sym_Table *tab,bfd_boolean second_pass,Sym_Table *tab_1)\n\n{\n  uint uVar1;\n  Sym *pSVar2;\n  undefined4 in_register_0000000c;\n  long lVar3;\n  Sym *pSVar4;\n  Sym *pSVar5;\n  \n  lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n  if (m->prev_match != sym + -1) {\n    uVar1 = tab->len;\n    pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);\n    pSVar4 = sym;\n    pSVar5 = pSVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }\n    m->prev_index = uVar1;\n    pSVar2->next = m->first_match;\n    m->first_match = pSVar2;\n    lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n    tab->len = tab->len + 1;\n  }\n  *(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158) = sym->end_addr;\n  m->prev_match = sym;\n  return;\n}" primitive_type (function_declarator "extend_match(match *m,Sym *sym,Sym_Table *tab,bfd_boolean second_pass,Sym_Table *tab_1)" identifier (parameter_list "(match *m,Sym *sym,Sym_Table *tab,bfd_boolean second_pass,Sym_Table *tab_1)" ( (parameter_declaration "match *m" type_identifier (pointer_declarator "*m" * identifier)) , (parameter_declaration "Sym *sym" type_identifier (pointer_declarator "*sym" * identifier)) , (parameter_declaration "Sym_Table *tab" type_identifier (pointer_declarator "*tab" * identifier)) , (parameter_declaration "bfd_boolean second_pass" type_identifier identifier) , (parameter_declaration "Sym_Table *tab_1" type_identifier (pointer_declarator "*tab_1" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  Sym *pSVar2;\n  undefined4 in_register_0000000c;\n  long lVar3;\n  Sym *pSVar4;\n  Sym *pSVar5;\n  \n  lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n  if (m->prev_match != sym + -1) {\n    uVar1 = tab->len;\n    pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);\n    pSVar4 = sym;\n    pSVar5 = pSVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }\n    m->prev_index = uVar1;\n    pSVar2->next = m->first_match;\n    m->first_match = pSVar2;\n    lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n    tab->len = tab->len + 1;\n  }\n  *(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158) = sym->end_addr;\n  m->prev_match = sym;\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "Sym *pSVar2;" type_identifier (pointer_declarator "*pSVar2" * identifier) ;) (declaration "undefined4 in_register_0000000c;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "Sym *pSVar4;" type_identifier (pointer_declarator "*pSVar4" * identifier) ;) (declaration "Sym *pSVar5;" type_identifier (pointer_declarator "*pSVar5" * identifier) ;) (expression_statement "lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);" (assignment_expression "lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass)" identifier = (pointer_expression "*(long *)CONCAT44(in_register_0000000c,second_pass)" * (cast_expression "(long *)CONCAT44(in_register_0000000c,second_pass)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(in_register_0000000c,second_pass)" identifier (argument_list "(in_register_0000000c,second_pass)" ( identifier , identifier )))))) ;) (if_statement "if (m->prev_match != sym + -1) {\n    uVar1 = tab->len;\n    pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);\n    pSVar4 = sym;\n    pSVar5 = pSVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }\n    m->prev_index = uVar1;\n    pSVar2->next = m->first_match;\n    m->first_match = pSVar2;\n    lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n    tab->len = tab->len + 1;\n  }" if (parenthesized_expression "(m->prev_match != sym + -1)" ( (binary_expression "m->prev_match != sym + -1" (field_expression "m->prev_match" identifier -> field_identifier) != (binary_expression "sym + -1" identifier + number_literal)) )) (compound_statement "{\n    uVar1 = tab->len;\n    pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);\n    pSVar4 = sym;\n    pSVar5 = pSVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }\n    m->prev_index = uVar1;\n    pSVar2->next = m->first_match;\n    m->first_match = pSVar2;\n    lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);\n    tab->len = tab->len + 1;\n  }" { (expression_statement "uVar1 = tab->len;" (assignment_expression "uVar1 = tab->len" identifier = (field_expression "tab->len" identifier -> field_identifier)) ;) (expression_statement "pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158);" (assignment_expression "pSVar2 = (Sym *)(lVar3 + (ulong)uVar1 * 0x158)" identifier = (cast_expression "(Sym *)(lVar3 + (ulong)uVar1 * 0x158)" ( (type_descriptor "Sym *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + (ulong)uVar1 * 0x158)" ( (binary_expression "lVar3 + (ulong)uVar1 * 0x158" identifier + (binary_expression "(ulong)uVar1 * 0x158" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "pSVar4 = sym;" (assignment_expression "pSVar4 = sym" identifier = identifier) ;) (expression_statement "pSVar5 = pSVar2;" (assignment_expression "pSVar5 = pSVar2" identifier = identifier) ;) (for_statement "for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }" for ( (assignment_expression "lVar3 = 0x2b" identifier = number_literal) ; (binary_expression "lVar3 != 0" identifier != number_literal) ; (assignment_expression "lVar3 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ) (compound_statement "{\n      pSVar5->addr = pSVar4->addr;\n      pSVar4 = (Sym *)&pSVar4->end_addr;\n      pSVar5 = (Sym *)&pSVar5->end_addr;\n    }" { (expression_statement "pSVar5->addr = pSVar4->addr;" (assignment_expression "pSVar5->addr = pSVar4->addr" (field_expression "pSVar5->addr" identifier -> field_identifier) = (field_expression "pSVar4->addr" identifier -> field_identifier)) ;) (expression_statement "pSVar4 = (Sym *)&pSVar4->end_addr;" (assignment_expression "pSVar4 = (Sym *)&pSVar4->end_addr" identifier = (cast_expression "(Sym *)&pSVar4->end_addr" ( (type_descriptor "Sym *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pSVar4->end_addr" & (field_expression "pSVar4->end_addr" identifier -> field_identifier)))) ;) (expression_statement "pSVar5 = (Sym *)&pSVar5->end_addr;" (assignment_expression "pSVar5 = (Sym *)&pSVar5->end_addr" identifier = (cast_expression "(Sym *)&pSVar5->end_addr" ( (type_descriptor "Sym *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pSVar5->end_addr" & (field_expression "pSVar5->end_addr" identifier -> field_identifier)))) ;) })) (expression_statement "m->prev_index = uVar1;" (assignment_expression "m->prev_index = uVar1" (field_expression "m->prev_index" identifier -> field_identifier) = identifier) ;) (expression_statement "pSVar2->next = m->first_match;" (assignment_expression "pSVar2->next = m->first_match" (field_expression "pSVar2->next" identifier -> field_identifier) = (field_expression "m->first_match" identifier -> field_identifier)) ;) (expression_statement "m->first_match = pSVar2;" (assignment_expression "m->first_match = pSVar2" (field_expression "m->first_match" identifier -> field_identifier) = identifier) ;) (expression_statement "lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass);" (assignment_expression "lVar3 = *(long *)CONCAT44(in_register_0000000c,second_pass)" identifier = (pointer_expression "*(long *)CONCAT44(in_register_0000000c,second_pass)" * (cast_expression "(long *)CONCAT44(in_register_0000000c,second_pass)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(in_register_0000000c,second_pass)" identifier (argument_list "(in_register_0000000c,second_pass)" ( identifier , identifier )))))) ;) (expression_statement "tab->len = tab->len + 1;" (assignment_expression "tab->len = tab->len + 1" (field_expression "tab->len" identifier -> field_identifier) = (binary_expression "tab->len + 1" (field_expression "tab->len" identifier -> field_identifier) + number_literal)) ;) })) (expression_statement "*(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158) = sym->end_addr;" (assignment_expression "*(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158) = sym->end_addr" (pointer_expression "*(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158)" * (cast_expression "(bfd_vma *)(lVar3 + 8 + (long)m->prev_index * 0x158)" ( (type_descriptor "bfd_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8 + (long)m->prev_index * 0x158)" ( (binary_expression "lVar3 + 8 + (long)m->prev_index * 0x158" (binary_expression "lVar3 + 8" identifier + number_literal) + (binary_expression "(long)m->prev_index * 0x158" (cast_expression "(long)m->prev_index" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "m->prev_index" identifier -> field_identifier)) * number_literal)) )))) = (field_expression "sym->end_addr" identifier -> field_identifier)) ;) (expression_statement "m->prev_match = sym;" (assignment_expression "m->prev_match = sym" (field_expression "m->prev_match" identifier -> field_identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)\n\n{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}\n\n" (function_definition "void FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)\n\n{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}" primitive_type (function_declarator "FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)" identifier (parameter_list "(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (expression_statement "lVar3 = *param_4;" (assignment_expression "lVar3 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (if_statement "if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 2) != param_2 + -0x2b)" ( (binary_expression "*(undefined8 **)(param_1 + 2) != param_2 + -0x2b" (pointer_expression "*(undefined8 **)(param_1 + 2)" * (cast_expression "(undefined8 **)(param_1 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) != (binary_expression "param_2 + -0x2b" identifier + number_literal)) )) (compound_statement "{\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }" { (expression_statement "uVar1 = *param_3;" (assignment_expression "uVar1 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);" (assignment_expression "puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158)" identifier = (cast_expression "(undefined8 *)(lVar3 + (ulong)uVar1 * 0x158)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + (ulong)uVar1 * 0x158)" ( (binary_expression "lVar3 + (ulong)uVar1 * 0x158" identifier + (binary_expression "(ulong)uVar1 * 0x158" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "puVar4 = param_2;" (assignment_expression "puVar4 = param_2" identifier = identifier) ;) (expression_statement "puVar5 = puVar2;" (assignment_expression "puVar5 = puVar2" identifier = identifier) ;) (for_statement "for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }" for ( (assignment_expression "lVar3 = 0x2b" identifier = number_literal) ; (binary_expression "lVar3 != 0" identifier != number_literal) ; (assignment_expression "lVar3 = lVar3 + -1" identifier = (binary_expression "lVar3 + -1" identifier + number_literal)) ) (compound_statement "{\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "*puVar5 = *puVar4;" (assignment_expression "*puVar5 = *puVar4" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "puVar2[0x1b] = *(undefined8 *)(param_1 + 4);" (assignment_expression "puVar2[0x1b] = *(undefined8 *)(param_1 + 4)" (subscript_expression "puVar2[0x1b]" identifier [ number_literal ]) = (pointer_expression "*(undefined8 *)(param_1 + 4)" * (cast_expression "(undefined8 *)(param_1 + 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 **)(param_1 + 4) = puVar2;" (assignment_expression "*(undefined8 **)(param_1 + 4) = puVar2" (pointer_expression "*(undefined8 **)(param_1 + 4)" * (cast_expression "(undefined8 **)(param_1 + 4)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar3 = *param_4;" (assignment_expression "lVar3 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (expression_statement "*param_3 = *param_3 + 1;" (assignment_expression "*param_3 = *param_3 + 1" (pointer_expression "*param_3" * identifier) = (binary_expression "*param_3 + 1" (pointer_expression "*param_3" * identifier) + number_literal)) ;) })) (expression_statement "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];" (assignment_expression "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1]" (pointer_expression "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158)" * (cast_expression "(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8 + (long)(int)*param_1 * 0x158)" ( (binary_expression "lVar3 + 8 + (long)(int)*param_1 * 0x158" (binary_expression "lVar3 + 8" identifier + number_literal) + (binary_expression "(long)(int)*param_1 * 0x158" (cast_expression "(long)(int)*param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)*param_1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_1" * identifier))) * number_literal)) )))) = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 **)(param_1 + 2) = param_2;" (assignment_expression "*(undefined8 **)(param_1 + 2) = param_2" (pointer_expression "*(undefined8 **)(param_1 + 2)" * (cast_expression "(undefined8 **)(param_1 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (for_statement for ( (assignment_expression IDENT = LIT) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) * LIT)) )))) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)\n\n{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0010c7c0(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)" (identifier "FUN_0010c7c0") (parameter_list "(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  undefined8 *puVar5;\n  \n  lVar3 = *param_4;\n  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }\n  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];\n  *(undefined8 **)(param_1 + 2) = param_2;\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "undefined8 *puVar5;" (type_identifier "undefined8") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (expression_statement "lVar3 = *param_4;" (assignment_expression "lVar3 = *param_4" (identifier "lVar3") (= "=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) (; ";")) (if_statement "if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }" (if "if") (parenthesized_expression "(*(undefined8 **)(param_1 + 2) != param_2 + -0x2b)" (( "(") (binary_expression "*(undefined8 **)(param_1 + 2) != param_2 + -0x2b" (pointer_expression "*(undefined8 **)(param_1 + 2)" (* "*") (cast_expression "(undefined8 **)(param_1 + 2)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) (!= "!=") (binary_expression "param_2 + -0x2b" (identifier "param_2") (+ "+") (number_literal "-0x2b"))) () ")")) (compound_statement "{\n    uVar1 = *param_3;\n    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);\n    puVar4 = param_2;\n    puVar5 = puVar2;\n    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }\n    *param_1 = uVar1;\n    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);\n    *(undefined8 **)(param_1 + 4) = puVar2;\n    lVar3 = *param_4;\n    *param_3 = *param_3 + 1;\n  }" ({ "{") (expression_statement "uVar1 = *param_3;" (assignment_expression "uVar1 = *param_3" (identifier "uVar1") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);" (assignment_expression "puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158)" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)(lVar3 + (ulong)uVar1 * 0x158)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + (ulong)uVar1 * 0x158)" (( "(") (binary_expression "lVar3 + (ulong)uVar1 * 0x158" (identifier "lVar3") (+ "+") (binary_expression "(ulong)uVar1 * 0x158" (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1")) (* "*") (number_literal "0x158"))) () ")")))) (; ";")) (expression_statement "puVar4 = param_2;" (assignment_expression "puVar4 = param_2" (identifier "puVar4") (= "=") (identifier "param_2")) (; ";")) (expression_statement "puVar5 = puVar2;" (assignment_expression "puVar5 = puVar2" (identifier "puVar5") (= "=") (identifier "puVar2")) (; ";")) (for_statement "for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }" (for "for") (( "(") (assignment_expression "lVar3 = 0x2b" (identifier "lVar3") (= "=") (number_literal "0x2b")) (; ";") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "lVar3 = lVar3 + -1" (identifier "lVar3") (= "=") (binary_expression "lVar3 + -1" (identifier "lVar3") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n      *puVar5 = *puVar4;\n      puVar4 = puVar4 + 1;\n      puVar5 = puVar5 + 1;\n    }" ({ "{") (expression_statement "*puVar5 = *puVar4;" (assignment_expression "*puVar5 = *puVar4" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "puVar2[0x1b] = *(undefined8 *)(param_1 + 4);" (assignment_expression "puVar2[0x1b] = *(undefined8 *)(param_1 + 4)" (subscript_expression "puVar2[0x1b]" (identifier "puVar2") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (pointer_expression "*(undefined8 *)(param_1 + 4)" (* "*") (cast_expression "(undefined8 *)(param_1 + 4)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "*(undefined8 **)(param_1 + 4) = puVar2;" (assignment_expression "*(undefined8 **)(param_1 + 4) = puVar2" (pointer_expression "*(undefined8 **)(param_1 + 4)" (* "*") (cast_expression "(undefined8 **)(param_1 + 4)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "puVar2")) (; ";")) (expression_statement "lVar3 = *param_4;" (assignment_expression "lVar3 = *param_4" (identifier "lVar3") (= "=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) (; ";")) (expression_statement "*param_3 = *param_3 + 1;" (assignment_expression "*param_3 = *param_3 + 1" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (binary_expression "*param_3 + 1" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];" (assignment_expression "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1]" (pointer_expression "*(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158)" (* "*") (cast_expression "(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 8 + (long)(int)*param_1 * 0x158)" (( "(") (binary_expression "lVar3 + 8 + (long)(int)*param_1 * 0x158" (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8")) (+ "+") (binary_expression "(long)(int)*param_1 * 0x158" (cast_expression "(long)(int)*param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)*param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (* "*") (number_literal "0x158"))) () ")")))) (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*(undefined8 **)(param_1 + 2) = param_2;" (assignment_expression "*(undefined8 **)(param_1 + 2) = param_2" (pointer_expression "*(undefined8 **)(param_1 + 2)" (* "*") (cast_expression "(undefined8 **)(param_1 + 2)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "param_2")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void extend_match(match * m, Sym * sym, Sym_Table * tab, bfd_boolean
   second_pass, Sym_Table * tab) */

void function_1(type_1 *m,type_2 *var_2,type_3 *tab,type_4 second_pass,type_3 *tab_1)

{
  type_5 uVar1;
  type_2 *pSVar2;
  type_6 in_register_0000000c;
  long var_3;
  type_2 *pSVar4;
  type_2 *pSVar5;
  
  var_3 = *(long *)var_1(in_register_0000000c,second_pass);
  if (m->prev_match != var_2 + -1) {
    uVar1 = tab->len;
    pSVar2 = (type_2 *)(var_3 + (type_7)uVar1 * 0x158);
    pSVar4 = var_2;
    pSVar5 = pSVar2;
    for (var_3 = 0x2b; var_3 != 0; var_3 = var_3 + -1) {
      pSVar5->addr = pSVar4->addr;
      pSVar4 = (type_2 *)&pSVar4->end_addr;
      pSVar5 = (type_2 *)&pSVar5->end_addr;
    }
    m->prev_index = uVar1;
    pSVar2->next = m->first_match;
    m->first_match = pSVar2;
    var_3 = *(long *)var_1(in_register_0000000c,second_pass);
    tab->len = tab->len + 1;
  }
  *(type_8 *)(var_3 + 8 + (long)m->prev_index * 0x158) = var_2->end_addr;
  m->prev_match = var_2;
  return;
}


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

void MASKED(uint *param_1,undefined8 *param_2,uint *param_3,long *param_4)

{
  uint uVar1;
  undefined8 *puVar2;
  long lVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  
  lVar3 = *param_4;
  if (*(undefined8 **)(param_1 + 2) != param_2 + -0x2b) {
    uVar1 = *param_3;
    puVar2 = (undefined8 *)(lVar3 + (ulong)uVar1 * 0x158);
    puVar4 = param_2;
    puVar5 = puVar2;
    for (lVar3 = 0x2b; lVar3 != 0; lVar3 = lVar3 + -1) {
      *puVar5 = *puVar4;
      puVar4 = puVar4 + 1;
      puVar5 = puVar5 + 1;
    }
    *param_1 = uVar1;
    puVar2[0x1b] = *(undefined8 *)(param_1 + 4);
    *(undefined8 **)(param_1 + 4) = puVar2;
    lVar3 = *param_4;
    *param_3 = *param_3 + 1;
  }
  *(undefined8 *)(lVar3 + 8 + (long)(int)*param_1 * 0x158) = param_2[1];
  *(undefined8 **)(param_1 + 2) = param_2;
  return;
}

