
/* DWARF original prototype: uint64_t do_plt_address_for_local(Target_sparc<64,_true> * this, Relobj
   * relobj, uint symndx) */

uint64_t __thiscall
anon_unknown.dwarf_4cd88d::Target_sparc<64,_true>::do_plt_address_for_local
          (Target_sparc<64,_true> *this,Relobj *relobj,uint symndx)

{
  uint64_t uVar1;
  long lVar2;
  uint uVar3;
  uint uVar4;
  section_offset_type offset;
  
  uVar1 = (this->sparc_info).abi_pagesize;
  if (uVar1 == 0) {
                    /* WARNING: Subroutine does not return */
    plt_section(this);
  }
  if ((*(byte *)(uVar1 + 0x20) & 1) != 0) {
    lVar2 = *(long *)(uVar1 + 8);
    uVar3 = *(int *)(uVar1 + 0x48) + 4;
    if (uVar3 < 0x8000) {
      uVar3 = uVar3 * 0x20;
    }
    else {
      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;
      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;
    }
    uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx);
    return (ulong)uVar4 + (ulong)uVar3 + lVar2;
  }
                    /* WARNING: Subroutine does not return */
  gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");
}



ulong FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)

{
  long lVar1;
  long lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  ulong uVar6;
  undefined1 (*pauVar7) [16];
  undefined1 (*pauVar8) [16];
  ulong uVar9;
  undefined1 (*pauVar10) [16];
  undefined1 (*pauVar11) [16];
  
  lVar1 = *(long *)(param_1 + 0x28);
  if (lVar1 != 0) {
    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {
      lVar2 = *(long *)(lVar1 + 8);
      uVar3 = *(int *)(lVar1 + 0x48) + 4;
      if (uVar3 < 0x8000) {
        uVar3 = uVar3 * 0x20;
      }
      else {
        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;
        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;
      }
      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);
      return (ulong)uVar4 + (ulong)uVar3 + lVar2;
    }
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0xc5,"address");
  }
  FUN_001c5910();
  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0xe3,"offset");
  }
  lVar1 = *(long *)(param_1 + 0x18);
  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0xcf,"data_size");
  }
  lVar2 = *(long *)(param_1 + 0x10);
  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");
  }
  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);
  *pauVar11 = (undefined1  [16])0x0;
  pauVar10 = pauVar11 + 3;
  pauVar11[1] = (undefined1  [16])0x0;
  pauVar11[2] = (undefined1  [16])0x0;
  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);
  uVar6 = (ulong)uVar3;
  if (uVar3 != 0) {
    uVar9 = (ulong)(uVar3 - 1);
    uVar4 = 0x30000003;
    uVar3 = 0xf3ffbf30;
    pauVar7 = pauVar10;
    while( true ) {
      *(uint *)*pauVar7 = uVar4;
      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);
      *(uint *)(*pauVar7 + 4) = uVar3;
      *(undefined4 *)(*pauVar7 + 8) = 1;
      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;
      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;
      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;
      uVar5 = uVar3 + 0x30800000;
      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;
      pauVar7 = pauVar8;
    }
    uVar6 = uVar9 * 3 + 3;
    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);
  }
  *(undefined4 *)*pauVar10 = 1;
  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {
    return uVar6;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");
}


PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RAX,qword ptr [RDI + 0x28]
TEST RAX,RAX
JZ 0x001c6ad7
TEST byte ptr [RAX + 0x20],0x1
JZ 0x001c6abf
MOV R8,RSI
MOV ESI,EDX
MOV EDX,dword ptr [RAX + 0x48]
MOV RBX,qword ptr [RAX + 0x8]
LEA EAX,[RDX + 0x4]
CMP EAX,0x7fff
JBE 0x001c6ab8
LEA ECX,[RDX + -0x7ffc]
MOV EDX,0xcccccccd
MOV EAX,ECX
MUL EDX
SHR EDX,0x7
LEA EAX,[RDX + RDX*0x4]
MOV EDI,EAX
SHL EAX,0x5
SUB ECX,EAX
SHL EDI,0xa
LEA EAX,[RCX + RCX*0x2]
LEA EBP,[RDI + RAX*0x8 + 0x100000]
MOV RAX,qword ptr [R8]
MOV RDI,R8
CALL qword ptr [RAX + 0x150]
ADD RSP,0x8
MOV EAX,EAX
ADD RAX,RBP
ADD RAX,RBX
POP RBX
POP RBP
RET
SHL EAX,0x5
MOV EBP,EAX
JMP 0x001c6a98
LEA RDX,[0x53c808]
MOV ESI,0xc5
LEA RDI,[0x533384]
CALL 0x00352af0
CALL 0x001c5910
NOP dword ptr [RAX]
(translation_unit "ulong FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}\n\n" (function_definition "ulong FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}" type_identifier (function_declarator "FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)" identifier (parameter_list "(long param_1,long *param_2,undefined4 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (expression_statement "undefined1 (*pauVar7) [16];" (subscript_expression "undefined1 (*pauVar7) [16]" (call_expression "undefined1 (*pauVar7)" identifier (argument_list "(*pauVar7)" ( (pointer_expression "*pauVar7" * identifier) ))) [ number_literal ]) ;) (expression_statement "undefined1 (*pauVar8) [16];" (subscript_expression "undefined1 (*pauVar8) [16]" (call_expression "undefined1 (*pauVar8)" identifier (argument_list "(*pauVar8)" ( (pointer_expression "*pauVar8" * identifier) ))) [ number_literal ]) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "undefined1 (*pauVar10) [16];" (subscript_expression "undefined1 (*pauVar10) [16]" (call_expression "undefined1 (*pauVar10)" identifier (argument_list "(*pauVar10)" ( (pointer_expression "*pauVar10" * identifier) ))) [ number_literal ]) ;) (expression_statement "undefined1 (*pauVar11) [16];" (subscript_expression "undefined1 (*pauVar11) [16]" (call_expression "undefined1 (*pauVar11)" identifier (argument_list "(*pauVar11)" ( (pointer_expression "*pauVar11" * identifier) ))) [ number_literal ]) ;) (expression_statement "lVar1 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }" { (if_statement "if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }" if (parenthesized_expression "((*(byte *)(lVar1 + 0x20) & 1) != 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x20) & 1)" ( (binary_expression "*(byte *)(lVar1 + 0x20) & 1" (pointer_expression "*(byte *)(lVar1 + 0x20)" * (cast_expression "(byte *)(lVar1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x20)" ( (binary_expression "lVar1 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }" { (expression_statement "lVar2 = *(long *)(lVar1 + 8);" (assignment_expression "lVar2 = *(long *)(lVar1 + 8)" identifier = (pointer_expression "*(long *)(lVar1 + 8)" * (cast_expression "(long *)(lVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(int *)(lVar1 + 0x48) + 4;" (assignment_expression "uVar3 = *(int *)(lVar1 + 0x48) + 4" identifier = (binary_expression "*(int *)(lVar1 + 0x48) + 4" (pointer_expression "*(int *)(lVar1 + 0x48)" * (cast_expression "(int *)(lVar1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x48)" ( (binary_expression "lVar1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" if (parenthesized_expression "(uVar3 < 0x8000)" ( (binary_expression "uVar3 < 0x8000" identifier < number_literal) )) (compound_statement "{\n        uVar3 = uVar3 * 0x20;\n      }" { (expression_statement "uVar3 = uVar3 * 0x20;" (assignment_expression "uVar3 = uVar3 * 0x20" identifier = (binary_expression "uVar3 * 0x20" identifier * number_literal)) ;) }) (else_clause "else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" else (compound_statement "{\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" { (expression_statement "uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;" (assignment_expression "uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc" identifier = (binary_expression "*(int *)(lVar1 + 0x48) - 0x7ffc" (pointer_expression "*(int *)(lVar1 + 0x48)" * (cast_expression "(int *)(lVar1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x48)" ( (binary_expression "lVar1 + 0x48" identifier + number_literal) )))) - number_literal)) ;) (expression_statement "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;" (assignment_expression "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" identifier = (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000" (binary_expression "(uVar3 / 0xa0) * 0x500" (parenthesized_expression "(uVar3 / 0xa0)" ( (binary_expression "uVar3 / 0xa0" identifier / number_literal) )) * number_literal) + number_literal) + (binary_expression "uVar3 * 0x18" identifier * number_literal))) ;) }))) (expression_statement "uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);" (assignment_expression "uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3)" identifier = (call_expression "(**(code **)(*param_2 + 0x150))(param_2,param_3)" (parenthesized_expression "(**(code **)(*param_2 + 0x150))" ( (pointer_expression "**(code **)(*param_2 + 0x150)" * (pointer_expression "*(code **)(*param_2 + 0x150)" * (cast_expression "(code **)(*param_2 + 0x150)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x150)" ( (binary_expression "*param_2 + 0x150" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (return_statement "return (ulong)uVar4 + (ulong)uVar3 + lVar2;" return (binary_expression "(ulong)uVar4 + (ulong)uVar3 + lVar2" (binary_expression "(ulong)uVar4 + (ulong)uVar3" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) + (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) + identifier) ;) })) comment (expression_statement "FUN_00352af0("../../gold/output.h",0xc5,"address");" (call_expression "FUN_00352af0("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;) })) (expression_statement "FUN_001c5910();" (call_expression "FUN_001c5910()" identifier (argument_list "()" ( ))) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }" { comment (expression_statement "FUN_00352af0("../../gold/output.h",0xe3,"offset");" (call_expression "FUN_00352af0("../../gold/output.h",0xe3,"offset")" identifier (argument_list "("../../gold/output.h",0xe3,"offset")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""offset"" " string_content ") ))) ;) })) (expression_statement "lVar1 = *(long *)(param_1 + 0x18);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x18)" identifier = (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }" { comment (expression_statement "FUN_00352af0("../../gold/output.h",0xcf,"data_size");" (call_expression "FUN_00352af0("../../gold/output.h",0xcf,"data_size")" identifier (argument_list "("../../gold/output.h",0xcf,"data_size")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""data_size"" " string_content ") ))) ;) })) (expression_statement "lVar2 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }" if (parenthesized_expression "((lVar1 < 0) || (param_2[2] < lVar2 + lVar1))" ( (binary_expression "(lVar1 < 0) || (param_2[2] < lVar2 + lVar1)" (parenthesized_expression "(lVar1 < 0)" ( (binary_expression "lVar1 < 0" identifier < number_literal) )) || (parenthesized_expression "(param_2[2] < lVar2 + lVar1)" ( (binary_expression "param_2[2] < lVar2 + lVar1" (subscript_expression "param_2[2]" identifier [ number_literal ]) < (binary_expression "lVar2 + lVar1" identifier + identifier)) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }" { comment (expression_statement "FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");" (call_expression "FUN_00352af0("../../gold/output.h",0x6f,"get_output_view")" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") ))) ;) })) (expression_statement "pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);" (assignment_expression "pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3])" identifier = (cast_expression "(undefined1 (*) [16])(lVar1 + param_2[3])" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar1 + param_2[3])" ( (binary_expression "lVar1 + param_2[3]" identifier + (subscript_expression "param_2[3]" identifier [ number_literal ])) )))) ;) (expression_statement "*pauVar11 = (undefined1  [16])0x0;" (assignment_expression "*pauVar11 = (undefined1  [16])0x0" (pointer_expression "*pauVar11" * identifier) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "pauVar10 = pauVar11 + 3;" (assignment_expression "pauVar10 = pauVar11 + 3" identifier = (binary_expression "pauVar11 + 3" identifier + number_literal)) ;) (expression_statement "pauVar11[1] = (undefined1  [16])0x0;" (assignment_expression "pauVar11[1] = (undefined1  [16])0x0" (subscript_expression "pauVar11[1]" identifier [ number_literal ]) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "pauVar11[2] = (undefined1  [16])0x0;" (assignment_expression "pauVar11[2] = (undefined1  [16])0x0" (subscript_expression "pauVar11[2]" identifier [ number_literal ]) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);" (assignment_expression "uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48)" identifier = (binary_expression "*(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48)" (pointer_expression "*(int *)(param_1 + 0x4c)" * (cast_expression "(int *)(param_1 + 0x4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) )))) + (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = (ulong)uVar3;" (assignment_expression "uVar6 = (ulong)uVar3" identifier = (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }" { (expression_statement "uVar9 = (ulong)(uVar3 - 1);" (assignment_expression "uVar9 = (ulong)(uVar3 - 1)" identifier = (call_expression "(ulong)(uVar3 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 - 1)" ( (binary_expression "uVar3 - 1" identifier - number_literal) )))) ;) (expression_statement "uVar4 = 0x30000003;" (assignment_expression "uVar4 = 0x30000003" identifier = number_literal) ;) (expression_statement "uVar3 = 0xf3ffbf30;" (assignment_expression "uVar3 = 0xf3ffbf30" identifier = number_literal) ;) (expression_statement "pauVar7 = pauVar10;" (assignment_expression "pauVar7 = pauVar10" identifier = identifier) ;) (while_statement "while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }" { (expression_statement "*(uint *)*pauVar7 = uVar4;" (assignment_expression "*(uint *)*pauVar7 = uVar4" (pointer_expression "*(uint *)*pauVar7" * (cast_expression "(uint *)*pauVar7" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*pauVar7" * identifier))) = identifier) ;) (expression_statement "pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);" (assignment_expression "pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc)" identifier = (cast_expression "(undefined1 (*) [16])(*pauVar7 + 0xc)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(*pauVar7 + 0xc)" ( (binary_expression "*pauVar7 + 0xc" (pointer_expression "*pauVar7" * identifier) + number_literal) )))) ;) (expression_statement "*(uint *)(*pauVar7 + 4) = uVar3;" (assignment_expression "*(uint *)(*pauVar7 + 4) = uVar3" (pointer_expression "*(uint *)(*pauVar7 + 4)" * (cast_expression "(uint *)(*pauVar7 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*pauVar7 + 4)" ( (binary_expression "*pauVar7 + 4" (pointer_expression "*pauVar7" * identifier) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(*pauVar7 + 8) = 1;" (assignment_expression "*(undefined4 *)(*pauVar7 + 8) = 1" (pointer_expression "*(undefined4 *)(*pauVar7 + 8)" * (cast_expression "(undefined4 *)(*pauVar7 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*pauVar7 + 8)" ( (binary_expression "*pauVar7 + 8" (pointer_expression "*pauVar7" * identifier) + number_literal) )))) = number_literal) ;) (if_statement "if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;" if (parenthesized_expression "(pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc))" ( (binary_expression "pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)" identifier == (cast_expression "(undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(pauVar11[3] + uVar9 * 0xc + 0xc)" ( (binary_expression "pauVar11[3] + uVar9 * 0xc + 0xc" (binary_expression "pauVar11[3] + uVar9 * 0xc" (subscript_expression "pauVar11[3]" identifier [ number_literal ]) + (binary_expression "uVar9 * 0xc" identifier * number_literal)) + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;" (assignment_expression "uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8" identifier = (binary_expression "(0x3000030 - (int)pauVar10) + (int)pauVar8" (parenthesized_expression "(0x3000030 - (int)pauVar10)" ( (binary_expression "0x3000030 - (int)pauVar10" number_literal - (cast_expression "(int)pauVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pauVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" identifier = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;" (assignment_expression "uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff" identifier = (binary_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff" (binary_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2" (call_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((int)pauVar10 + -0x34) - (int)pauVar8)" ( (binary_expression "((int)pauVar10 + -0x34) - (int)pauVar8" (parenthesized_expression "((int)pauVar10 + -0x34)" ( (binary_expression "(int)pauVar10 + -0x34" (cast_expression "(int)pauVar10" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) - (cast_expression "(int)pauVar8" ( (type_descriptor "int" primitive_type) ) identifier)) ))) >> number_literal) & number_literal)) ;) (expression_statement "uVar5 = uVar3 + 0x30800000;" (assignment_expression "uVar5 = uVar3 + 0x30800000" identifier = (binary_expression "uVar3 + 0x30800000" identifier + number_literal)) ;) (expression_statement "uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18" identifier = (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" ( (binary_expression "uVar5 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" ( (binary_expression "uVar5 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal))) ;) (expression_statement "pauVar7 = pauVar8;" (assignment_expression "pauVar7 = pauVar8" identifier = identifier) ;) })) (expression_statement "uVar6 = uVar9 * 3 + 3;" (assignment_expression "uVar6 = uVar9 * 3 + 3" identifier = (binary_expression "uVar9 * 3 + 3" (binary_expression "uVar9 * 3" identifier * number_literal) + number_literal)) ;) (expression_statement "pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);" (assignment_expression "pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc)" identifier = (cast_expression "(undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(*pauVar10 + uVar9 * 0xc + 0xc)" ( (binary_expression "*pauVar10 + uVar9 * 0xc + 0xc" (binary_expression "*pauVar10 + uVar9 * 0xc" (pointer_expression "*pauVar10" * identifier) + (binary_expression "uVar9 * 0xc" identifier * number_literal)) + number_literal) )))) ;) })) (expression_statement "*(undefined4 *)*pauVar10 = 1;" (assignment_expression "*(undefined4 *)*pauVar10 = 1" (pointer_expression "*(undefined4 *)*pauVar10" * (cast_expression "(undefined4 *)*pauVar10" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*pauVar10" * identifier))) = number_literal) ;) (if_statement "if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }" if (parenthesized_expression "((long)pauVar10 + (4 - (long)pauVar11) == lVar2)" ( (binary_expression "(long)pauVar10 + (4 - (long)pauVar11) == lVar2" (binary_expression "(long)pauVar10 + (4 - (long)pauVar11)" (cast_expression "(long)pauVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)pauVar11)" ( (binary_expression "4 - (long)pauVar11" number_literal - (cast_expression "(long)pauVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) == identifier) )) (compound_statement "{\n    return uVar6;\n  }" { (return_statement "return uVar6;" return identifier ;) })) comment (expression_statement "FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");" (call_expression "FUN_00352af0("../../gold/sparc.cc",0x708,"do_write")" identifier (argument_list "("../../gold/sparc.cc",0x708,"do_write")" ( (string_literal ""../../gold/sparc.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") ))) ;) })))
(translation_unit "/* DWARF original prototype: uint64_t do_plt_address_for_local(Target_sparc<64,_true> * this, Relobj\n   * relobj, uint symndx) */\n\nuint64_t __thiscall\nanon_unknown.dwarf_4cd88d::Target_sparc<64,_true>::do_plt_address_for_local\n          (Target_sparc<64,_true> *this,Relobj *relobj,uint symndx)\n\n{\n  uint64_t uVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  section_offset_type offset;\n  \n  uVar1 = (this->sparc_info).abi_pagesize;\n  if (uVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    plt_section(this);\n  }\n  if ((*(byte *)(uVar1 + 0x20) & 1) != 0) {\n    lVar2 = *(long *)(uVar1 + 8);\n    uVar3 = *(int *)(uVar1 + 0x48) + 4;\n    if (uVar3 < 0x8000) {\n      uVar3 = uVar3 * 0x20;\n    }\n    else {\n      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;\n      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n    }\n    uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx);\n    return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n}\n\n" comment (declaration "uint64_t __thiscall\nanon_unknown.dwarf_4cd88d::Target_sparc<64,_true>::do_plt_address_for_local\n          (Target_sparc<64,_true> *this,Relobj *relobj,uint symndx)\n\n{\n  uint64_t uVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) identifier (ERROR ".dwarf_4cd88d::Target_sparc<64" . identifier : : identifier < number_literal) , (ERROR "_true>::do_plt_address_for_local\n          (Target_sparc<64,_true> *this,Relobj *relobj,uint symndx)\n\n{\n  uint64_t" identifier > : : (function_declarator "do_plt_address_for_local\n          (Target_sparc<64,_true> *this,Relobj *relobj,uint symndx)" identifier (parameter_list "(Target_sparc<64,_true> *this,Relobj *relobj,uint symndx)" ( (parameter_declaration "Target_sparc" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_true> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Relobj *relobj" type_identifier (pointer_declarator "*relobj" * identifier)) , (parameter_declaration "uint symndx" type_identifier identifier) ))) { primitive_type) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "section_offset_type offset;" type_identifier identifier ;) (expression_statement "uVar1 = (this->sparc_info).abi_pagesize;" (assignment_expression "uVar1 = (this->sparc_info).abi_pagesize" identifier = (field_expression "(this->sparc_info).abi_pagesize" (parenthesized_expression "(this->sparc_info)" ( (field_expression "this->sparc_info" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (uVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    plt_section(this);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    plt_section(this);\n  }" { comment (expression_statement "plt_section(this);" (call_expression "plt_section(this)" identifier (argument_list "(this)" ( identifier ))) ;) })) (if_statement "if ((*(byte *)(uVar1 + 0x20) & 1) != 0) {\n    lVar2 = *(long *)(uVar1 + 8);\n    uVar3 = *(int *)(uVar1 + 0x48) + 4;\n    if (uVar3 < 0x8000) {\n      uVar3 = uVar3 * 0x20;\n    }\n    else {\n      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;\n      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n    }\n    uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx);\n    return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n  }" if (parenthesized_expression "((*(byte *)(uVar1 + 0x20) & 1) != 0)" ( (binary_expression "(*(byte *)(uVar1 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(uVar1 + 0x20) & 1)" ( (binary_expression "*(byte *)(uVar1 + 0x20) & 1" (pointer_expression "*(byte *)(uVar1 + 0x20)" * (cast_expression "(byte *)(uVar1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + 0x20)" ( (binary_expression "uVar1 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    lVar2 = *(long *)(uVar1 + 8);\n    uVar3 = *(int *)(uVar1 + 0x48) + 4;\n    if (uVar3 < 0x8000) {\n      uVar3 = uVar3 * 0x20;\n    }\n    else {\n      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;\n      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n    }\n    uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx);\n    return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n  }" { (expression_statement "lVar2 = *(long *)(uVar1 + 8);" (assignment_expression "lVar2 = *(long *)(uVar1 + 8)" identifier = (pointer_expression "*(long *)(uVar1 + 8)" * (cast_expression "(long *)(uVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + 8)" ( (binary_expression "uVar1 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(int *)(uVar1 + 0x48) + 4;" (assignment_expression "uVar3 = *(int *)(uVar1 + 0x48) + 4" identifier = (binary_expression "*(int *)(uVar1 + 0x48) + 4" (pointer_expression "*(int *)(uVar1 + 0x48)" * (cast_expression "(int *)(uVar1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + 0x48)" ( (binary_expression "uVar1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if (uVar3 < 0x8000) {\n      uVar3 = uVar3 * 0x20;\n    }\n    else {\n      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;\n      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n    }" if (parenthesized_expression "(uVar3 < 0x8000)" ( (binary_expression "uVar3 < 0x8000" identifier < number_literal) )) (compound_statement "{\n      uVar3 = uVar3 * 0x20;\n    }" { (expression_statement "uVar3 = uVar3 * 0x20;" (assignment_expression "uVar3 = uVar3 * 0x20" identifier = (binary_expression "uVar3 * 0x20" identifier * number_literal)) ;) }) (else_clause "else {\n      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;\n      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n    }" else (compound_statement "{\n      uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;\n      uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n    }" { (expression_statement "uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc;" (assignment_expression "uVar3 = *(int *)(uVar1 + 0x48) - 0x7ffc" identifier = (binary_expression "*(int *)(uVar1 + 0x48) - 0x7ffc" (pointer_expression "*(int *)(uVar1 + 0x48)" * (cast_expression "(int *)(uVar1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + 0x48)" ( (binary_expression "uVar1 + 0x48" identifier + number_literal) )))) - number_literal)) ;) (expression_statement "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;" (assignment_expression "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" identifier = (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000" (binary_expression "(uVar3 / 0xa0) * 0x500" (parenthesized_expression "(uVar3 / 0xa0)" ( (binary_expression "uVar3 / 0xa0" identifier / number_literal) )) * number_literal) + number_literal) + (binary_expression "uVar3 * 0x18" identifier * number_literal))) ;) }))) (expression_statement "uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx);" (assignment_expression "uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx)" identifier = (call_expression "(*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(ulong)symndx)" (parenthesized_expression "(*(relobj->super_Object)._vptr_Object[0x2a])" ( (pointer_expression "*(relobj->super_Object)._vptr_Object[0x2a]" * (subscript_expression "(relobj->super_Object)._vptr_Object[0x2a]" (field_expression "(relobj->super_Object)._vptr_Object" (parenthesized_expression "(relobj->super_Object)" ( (field_expression "relobj->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(relobj,(ulong)symndx)" ( identifier , (cast_expression "(ulong)symndx" ( (type_descriptor "ulong" type_identifier) ) identifier) )))) ;) (return_statement "return (ulong)uVar4 + (ulong)uVar3 + lVar2;" return (binary_expression "(ulong)uVar4 + (ulong)uVar3 + lVar2" (binary_expression "(ulong)uVar4 + (ulong)uVar3" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) + (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) + identifier) ;) })) comment (labeled_statement "gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/output.h",0xc5,"address");" (call_expression "do_gold_unreachable("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;)) (ERROR "}" }))
(translation_unit "ulong FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    \n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}\n\n" (function_definition "ulong FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    \n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}" type_identifier (function_declarator "FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)" identifier (parameter_list "(long param_1,long *param_2,undefined4 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    \n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (expression_statement "undefined1 (*pauVar7) [16];" (subscript_expression "undefined1 (*pauVar7) [16]" (call_expression "undefined1 (*pauVar7)" identifier (argument_list "(*pauVar7)" ( (pointer_expression "*pauVar7" * identifier) ))) [ number_literal ]) ;) (expression_statement "undefined1 (*pauVar8) [16];" (subscript_expression "undefined1 (*pauVar8) [16]" (call_expression "undefined1 (*pauVar8)" identifier (argument_list "(*pauVar8)" ( (pointer_expression "*pauVar8" * identifier) ))) [ number_literal ]) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "undefined1 (*pauVar10) [16];" (subscript_expression "undefined1 (*pauVar10) [16]" (call_expression "undefined1 (*pauVar10)" identifier (argument_list "(*pauVar10)" ( (pointer_expression "*pauVar10" * identifier) ))) [ number_literal ]) ;) (expression_statement "undefined1 (*pauVar11) [16];" (subscript_expression "undefined1 (*pauVar11) [16]" (call_expression "undefined1 (*pauVar11)" identifier (argument_list "(*pauVar11)" ( (pointer_expression "*pauVar11" * identifier) ))) [ number_literal ]) ;) (expression_statement "lVar1 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }" { (if_statement "if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }" if (parenthesized_expression "((*(byte *)(lVar1 + 0x20) & 1) != 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x20) & 1)" ( (binary_expression "*(byte *)(lVar1 + 0x20) & 1" (pointer_expression "*(byte *)(lVar1 + 0x20)" * (cast_expression "(byte *)(lVar1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x20)" ( (binary_expression "lVar1 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }" { (expression_statement "lVar2 = *(long *)(lVar1 + 8);" (assignment_expression "lVar2 = *(long *)(lVar1 + 8)" identifier = (pointer_expression "*(long *)(lVar1 + 8)" * (cast_expression "(long *)(lVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(int *)(lVar1 + 0x48) + 4;" (assignment_expression "uVar3 = *(int *)(lVar1 + 0x48) + 4" identifier = (binary_expression "*(int *)(lVar1 + 0x48) + 4" (pointer_expression "*(int *)(lVar1 + 0x48)" * (cast_expression "(int *)(lVar1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x48)" ( (binary_expression "lVar1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" if (parenthesized_expression "(uVar3 < 0x8000)" ( (binary_expression "uVar3 < 0x8000" identifier < number_literal) )) (compound_statement "{\n        uVar3 = uVar3 * 0x20;\n      }" { (expression_statement "uVar3 = uVar3 * 0x20;" (assignment_expression "uVar3 = uVar3 * 0x20" identifier = (binary_expression "uVar3 * 0x20" identifier * number_literal)) ;) }) (else_clause "else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" else (compound_statement "{\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" { (expression_statement "uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;" (assignment_expression "uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc" identifier = (binary_expression "*(int *)(lVar1 + 0x48) - 0x7ffc" (pointer_expression "*(int *)(lVar1 + 0x48)" * (cast_expression "(int *)(lVar1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x48)" ( (binary_expression "lVar1 + 0x48" identifier + number_literal) )))) - number_literal)) ;) (expression_statement "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;" (assignment_expression "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" identifier = (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000" (binary_expression "(uVar3 / 0xa0) * 0x500" (parenthesized_expression "(uVar3 / 0xa0)" ( (binary_expression "uVar3 / 0xa0" identifier / number_literal) )) * number_literal) + number_literal) + (binary_expression "uVar3 * 0x18" identifier * number_literal))) ;) }))) (expression_statement "uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);" (assignment_expression "uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3)" identifier = (call_expression "(**(code **)(*param_2 + 0x150))(param_2,param_3)" (parenthesized_expression "(**(code **)(*param_2 + 0x150))" ( (pointer_expression "**(code **)(*param_2 + 0x150)" * (pointer_expression "*(code **)(*param_2 + 0x150)" * (cast_expression "(code **)(*param_2 + 0x150)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x150)" ( (binary_expression "*param_2 + 0x150" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (return_statement "return (ulong)uVar4 + (ulong)uVar3 + lVar2;" return (binary_expression "(ulong)uVar4 + (ulong)uVar3 + lVar2" (binary_expression "(ulong)uVar4 + (ulong)uVar3" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) + (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) + identifier) ;) })) (expression_statement "FUN_00352af0("../../gold/output.h",0xc5,"address");" (call_expression "FUN_00352af0("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;) })) (expression_statement "FUN_001c5910();" (call_expression "FUN_001c5910()" identifier (argument_list "()" ( ))) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }" { (expression_statement "FUN_00352af0("../../gold/output.h",0xe3,"offset");" (call_expression "FUN_00352af0("../../gold/output.h",0xe3,"offset")" identifier (argument_list "("../../gold/output.h",0xe3,"offset")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""offset"" " string_content ") ))) ;) })) (expression_statement "lVar1 = *(long *)(param_1 + 0x18);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x18)" identifier = (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }" { (expression_statement "FUN_00352af0("../../gold/output.h",0xcf,"data_size");" (call_expression "FUN_00352af0("../../gold/output.h",0xcf,"data_size")" identifier (argument_list "("../../gold/output.h",0xcf,"data_size")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""data_size"" " string_content ") ))) ;) })) (expression_statement "lVar2 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }" if (parenthesized_expression "((lVar1 < 0) || (param_2[2] < lVar2 + lVar1))" ( (binary_expression "(lVar1 < 0) || (param_2[2] < lVar2 + lVar1)" (parenthesized_expression "(lVar1 < 0)" ( (binary_expression "lVar1 < 0" identifier < number_literal) )) || (parenthesized_expression "(param_2[2] < lVar2 + lVar1)" ( (binary_expression "param_2[2] < lVar2 + lVar1" (subscript_expression "param_2[2]" identifier [ number_literal ]) < (binary_expression "lVar2 + lVar1" identifier + identifier)) ))) )) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }" { (expression_statement "FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");" (call_expression "FUN_00352af0("../../gold/output.h",0x6f,"get_output_view")" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") ))) ;) })) (expression_statement "pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);" (assignment_expression "pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3])" identifier = (cast_expression "(undefined1 (*) [16])(lVar1 + param_2[3])" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar1 + param_2[3])" ( (binary_expression "lVar1 + param_2[3]" identifier + (subscript_expression "param_2[3]" identifier [ number_literal ])) )))) ;) (expression_statement "*pauVar11 = (undefined1  [16])0x0;" (assignment_expression "*pauVar11 = (undefined1  [16])0x0" (pointer_expression "*pauVar11" * identifier) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "pauVar10 = pauVar11 + 3;" (assignment_expression "pauVar10 = pauVar11 + 3" identifier = (binary_expression "pauVar11 + 3" identifier + number_literal)) ;) (expression_statement "pauVar11[1] = (undefined1  [16])0x0;" (assignment_expression "pauVar11[1] = (undefined1  [16])0x0" (subscript_expression "pauVar11[1]" identifier [ number_literal ]) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "pauVar11[2] = (undefined1  [16])0x0;" (assignment_expression "pauVar11[2] = (undefined1  [16])0x0" (subscript_expression "pauVar11[2]" identifier [ number_literal ]) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);" (assignment_expression "uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48)" identifier = (binary_expression "*(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48)" (pointer_expression "*(int *)(param_1 + 0x4c)" * (cast_expression "(int *)(param_1 + 0x4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) )))) + (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = (ulong)uVar3;" (assignment_expression "uVar6 = (ulong)uVar3" identifier = (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }" { (expression_statement "uVar9 = (ulong)(uVar3 - 1);" (assignment_expression "uVar9 = (ulong)(uVar3 - 1)" identifier = (call_expression "(ulong)(uVar3 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 - 1)" ( (binary_expression "uVar3 - 1" identifier - number_literal) )))) ;) (expression_statement "uVar4 = 0x30000003;" (assignment_expression "uVar4 = 0x30000003" identifier = number_literal) ;) (expression_statement "uVar3 = 0xf3ffbf30;" (assignment_expression "uVar3 = 0xf3ffbf30" identifier = number_literal) ;) (expression_statement "pauVar7 = pauVar10;" (assignment_expression "pauVar7 = pauVar10" identifier = identifier) ;) (while_statement "while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }" { (expression_statement "*(uint *)*pauVar7 = uVar4;" (assignment_expression "*(uint *)*pauVar7 = uVar4" (pointer_expression "*(uint *)*pauVar7" * (cast_expression "(uint *)*pauVar7" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*pauVar7" * identifier))) = identifier) ;) (expression_statement "pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);" (assignment_expression "pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc)" identifier = (cast_expression "(undefined1 (*) [16])(*pauVar7 + 0xc)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(*pauVar7 + 0xc)" ( (binary_expression "*pauVar7 + 0xc" (pointer_expression "*pauVar7" * identifier) + number_literal) )))) ;) (expression_statement "*(uint *)(*pauVar7 + 4) = uVar3;" (assignment_expression "*(uint *)(*pauVar7 + 4) = uVar3" (pointer_expression "*(uint *)(*pauVar7 + 4)" * (cast_expression "(uint *)(*pauVar7 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*pauVar7 + 4)" ( (binary_expression "*pauVar7 + 4" (pointer_expression "*pauVar7" * identifier) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(*pauVar7 + 8) = 1;" (assignment_expression "*(undefined4 *)(*pauVar7 + 8) = 1" (pointer_expression "*(undefined4 *)(*pauVar7 + 8)" * (cast_expression "(undefined4 *)(*pauVar7 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*pauVar7 + 8)" ( (binary_expression "*pauVar7 + 8" (pointer_expression "*pauVar7" * identifier) + number_literal) )))) = number_literal) ;) (if_statement "if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;" if (parenthesized_expression "(pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc))" ( (binary_expression "pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)" identifier == (cast_expression "(undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(pauVar11[3] + uVar9 * 0xc + 0xc)" ( (binary_expression "pauVar11[3] + uVar9 * 0xc + 0xc" (binary_expression "pauVar11[3] + uVar9 * 0xc" (subscript_expression "pauVar11[3]" identifier [ number_literal ]) + (binary_expression "uVar9 * 0xc" identifier * number_literal)) + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;" (assignment_expression "uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8" identifier = (binary_expression "(0x3000030 - (int)pauVar10) + (int)pauVar8" (parenthesized_expression "(0x3000030 - (int)pauVar10)" ( (binary_expression "0x3000030 - (int)pauVar10" number_literal - (cast_expression "(int)pauVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pauVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" identifier = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;" (assignment_expression "uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff" identifier = (binary_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff" (binary_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2" (call_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((int)pauVar10 + -0x34) - (int)pauVar8)" ( (binary_expression "((int)pauVar10 + -0x34) - (int)pauVar8" (parenthesized_expression "((int)pauVar10 + -0x34)" ( (binary_expression "(int)pauVar10 + -0x34" (cast_expression "(int)pauVar10" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) - (cast_expression "(int)pauVar8" ( (type_descriptor "int" primitive_type) ) identifier)) ))) >> number_literal) & number_literal)) ;) (expression_statement "uVar5 = uVar3 + 0x30800000;" (assignment_expression "uVar5 = uVar3 + 0x30800000" identifier = (binary_expression "uVar3 + 0x30800000" identifier + number_literal)) ;) (expression_statement "uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18" identifier = (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" ( (binary_expression "uVar5 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" ( (binary_expression "uVar5 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal))) ;) (expression_statement "pauVar7 = pauVar8;" (assignment_expression "pauVar7 = pauVar8" identifier = identifier) ;) })) (expression_statement "uVar6 = uVar9 * 3 + 3;" (assignment_expression "uVar6 = uVar9 * 3 + 3" identifier = (binary_expression "uVar9 * 3 + 3" (binary_expression "uVar9 * 3" identifier * number_literal) + number_literal)) ;) (expression_statement "pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);" (assignment_expression "pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc)" identifier = (cast_expression "(undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(*pauVar10 + uVar9 * 0xc + 0xc)" ( (binary_expression "*pauVar10 + uVar9 * 0xc + 0xc" (binary_expression "*pauVar10 + uVar9 * 0xc" (pointer_expression "*pauVar10" * identifier) + (binary_expression "uVar9 * 0xc" identifier * number_literal)) + number_literal) )))) ;) })) (expression_statement "*(undefined4 *)*pauVar10 = 1;" (assignment_expression "*(undefined4 *)*pauVar10 = 1" (pointer_expression "*(undefined4 *)*pauVar10" * (cast_expression "(undefined4 *)*pauVar10" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*pauVar10" * identifier))) = number_literal) ;) (if_statement "if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }" if (parenthesized_expression "((long)pauVar10 + (4 - (long)pauVar11) == lVar2)" ( (binary_expression "(long)pauVar10 + (4 - (long)pauVar11) == lVar2" (binary_expression "(long)pauVar10 + (4 - (long)pauVar11)" (cast_expression "(long)pauVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)pauVar11)" ( (binary_expression "4 - (long)pauVar11" number_literal - (cast_expression "(long)pauVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) == identifier) )) (compound_statement "{\n    return uVar6;\n  }" { (return_statement "return uVar6;" return identifier ;) })) (expression_statement "FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");" (call_expression "FUN_00352af0("../../gold/sparc.cc",0x708,"do_write")" identifier (argument_list "("../../gold/sparc.cc",0x708,"do_write")" ( (string_literal ""../../gold/sparc.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) 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 TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (subscript_expression (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))) [ LIT ]) ;) (expression_statement (subscript_expression (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))) [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (subscript_expression (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))) [ LIT ]) ;) (expression_statement (subscript_expression (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))) [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT / LIT) )) * LIT) + LIT) + (binary_expression IDENT * LIT))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT )))) ;) (return_statement return (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) < (binary_expression IDENT + IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator [ LIT ])) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator [ LIT ])) ) LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator [ LIT ])) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) >> LIT) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) + LIT) )))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))
(function_definition "ulong FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)\n\n{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    \n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}" (type_identifier "ulong") (function_declarator "FUN_001c6a40(long param_1,long *param_2,undefined4 param_3)" (identifier "FUN_001c6a40") (parameter_list "(long param_1,long *param_2,undefined4 param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")"))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  ulong uVar6;\n  undefined1 (*pauVar7) [16];\n  undefined1 (*pauVar8) [16];\n  ulong uVar9;\n  undefined1 (*pauVar10) [16];\n  undefined1 (*pauVar11) [16];\n  \n  lVar1 = *(long *)(param_1 + 0x28);\n  if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }\n  FUN_001c5910();\n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }\n  lVar2 = *(long *)(param_1 + 0x10);\n  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }\n  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);\n  *pauVar11 = (undefined1  [16])0x0;\n  pauVar10 = pauVar11 + 3;\n  pauVar11[1] = (undefined1  [16])0x0;\n  pauVar11[2] = (undefined1  [16])0x0;\n  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);\n  uVar6 = (ulong)uVar3;\n  if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }\n  *(undefined4 *)*pauVar10 = 1;\n  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }\n                    \n  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (expression_statement "undefined1 (*pauVar7) [16];" (subscript_expression "undefined1 (*pauVar7) [16]" (call_expression "undefined1 (*pauVar7)" (identifier "undefined1") (argument_list "(*pauVar7)" (( "(") (pointer_expression "*pauVar7" (* "*") (identifier "pauVar7")) () ")"))) ([ "[") (number_literal "16") (] "]")) (; ";")) (expression_statement "undefined1 (*pauVar8) [16];" (subscript_expression "undefined1 (*pauVar8) [16]" (call_expression "undefined1 (*pauVar8)" (identifier "undefined1") (argument_list "(*pauVar8)" (( "(") (pointer_expression "*pauVar8" (* "*") (identifier "pauVar8")) () ")"))) ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (expression_statement "undefined1 (*pauVar10) [16];" (subscript_expression "undefined1 (*pauVar10) [16]" (call_expression "undefined1 (*pauVar10)" (identifier "undefined1") (argument_list "(*pauVar10)" (( "(") (pointer_expression "*pauVar10" (* "*") (identifier "pauVar10")) () ")"))) ([ "[") (number_literal "16") (] "]")) (; ";")) (expression_statement "undefined1 (*pauVar11) [16];" (subscript_expression "undefined1 (*pauVar11) [16]" (call_expression "undefined1 (*pauVar11)" (identifier "undefined1") (argument_list "(*pauVar11)" (( "(") (pointer_expression "*pauVar11" (* "*") (identifier "pauVar11")) () ")"))) ([ "[") (number_literal "16") (] "]")) (; ";")) (expression_statement "lVar1 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x28)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (lVar1 != 0) {\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }" (if "if") (parenthesized_expression "(lVar1 != 0)" (( "(") (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }\n                    \n    FUN_00352af0("../../gold/output.h",0xc5,"address");\n  }" ({ "{") (if_statement "if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }" (if "if") (parenthesized_expression "((*(byte *)(lVar1 + 0x20) & 1) != 0)" (( "(") (binary_expression "(*(byte *)(lVar1 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x20) & 1)" (( "(") (binary_expression "*(byte *)(lVar1 + 0x20) & 1" (pointer_expression "*(byte *)(lVar1 + 0x20)" (* "*") (cast_expression "(byte *)(lVar1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x20)" (( "(") (binary_expression "lVar1 + 0x20" (identifier "lVar1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      lVar2 = *(long *)(lVar1 + 8);\n      uVar3 = *(int *)(lVar1 + 0x48) + 4;\n      if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }\n      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);\n      return (ulong)uVar4 + (ulong)uVar3 + lVar2;\n    }" ({ "{") (expression_statement "lVar2 = *(long *)(lVar1 + 8);" (assignment_expression "lVar2 = *(long *)(lVar1 + 8)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(lVar1 + 8)" (* "*") (cast_expression "(long *)(lVar1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 8)" (( "(") (binary_expression "lVar1 + 8" (identifier "lVar1") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar3 = *(int *)(lVar1 + 0x48) + 4;" (assignment_expression "uVar3 = *(int *)(lVar1 + 0x48) + 4" (identifier "uVar3") (= "=") (binary_expression "*(int *)(lVar1 + 0x48) + 4" (pointer_expression "*(int *)(lVar1 + 0x48)" (* "*") (cast_expression "(int *)(lVar1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x48)" (( "(") (binary_expression "lVar1 + 0x48" (identifier "lVar1") (+ "+") (number_literal "0x48")) () ")")))) (+ "+") (number_literal "4"))) (; ";")) (if_statement "if (uVar3 < 0x8000) {\n        uVar3 = uVar3 * 0x20;\n      }\n      else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" (if "if") (parenthesized_expression "(uVar3 < 0x8000)" (( "(") (binary_expression "uVar3 < 0x8000" (identifier "uVar3") (< "<") (number_literal "0x8000")) () ")")) (compound_statement "{\n        uVar3 = uVar3 * 0x20;\n      }" ({ "{") (expression_statement "uVar3 = uVar3 * 0x20;" (assignment_expression "uVar3 = uVar3 * 0x20" (identifier "uVar3") (= "=") (binary_expression "uVar3 * 0x20" (identifier "uVar3") (* "*") (number_literal "0x20"))) (; ";")) (} "}")) (else_clause "else {\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" (else "else") (compound_statement "{\n        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;\n        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;\n      }" ({ "{") (expression_statement "uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;" (assignment_expression "uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc" (identifier "uVar3") (= "=") (binary_expression "*(int *)(lVar1 + 0x48) - 0x7ffc" (pointer_expression "*(int *)(lVar1 + 0x48)" (* "*") (cast_expression "(int *)(lVar1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x48)" (( "(") (binary_expression "lVar1 + 0x48" (identifier "lVar1") (+ "+") (number_literal "0x48")) () ")")))) (- "-") (number_literal "0x7ffc"))) (; ";")) (expression_statement "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;" (assignment_expression "uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" (identifier "uVar3") (= "=") (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18" (binary_expression "(uVar3 / 0xa0) * 0x500 + 0x100000" (binary_expression "(uVar3 / 0xa0) * 0x500" (parenthesized_expression "(uVar3 / 0xa0)" (( "(") (binary_expression "uVar3 / 0xa0" (identifier "uVar3") (/ "/") (number_literal "0xa0")) () ")")) (* "*") (number_literal "0x500")) (+ "+") (number_literal "0x100000")) (+ "+") (binary_expression "uVar3 * 0x18" (identifier "uVar3") (* "*") (number_literal "0x18")))) (; ";")) (} "}")))) (expression_statement "uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);" (assignment_expression "uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_2 + 0x150))(param_2,param_3)" (parenthesized_expression "(**(code **)(*param_2 + 0x150))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x150)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x150)" (* "*") (cast_expression "(code **)(*param_2 + 0x150)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x150)" (( "(") (binary_expression "*param_2 + 0x150" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x150")) () ")"))))) () ")")) (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (return_statement "return (ulong)uVar4 + (ulong)uVar3 + lVar2;" (return "return") (binary_expression "(ulong)uVar4 + (ulong)uVar3 + lVar2" (binary_expression "(ulong)uVar4 + (ulong)uVar3" (cast_expression "(ulong)uVar4" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar4")) (+ "+") (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3"))) (+ "+") (identifier "lVar2")) (; ";")) (} "}"))) (expression_statement "FUN_00352af0("../../gold/output.h",0xc5,"address");" (call_expression "FUN_00352af0("../../gold/output.h",0xc5,"address")" (identifier "FUN_00352af0") (argument_list "("../../gold/output.h",0xc5,"address")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xc5") (, ",") (string_literal ""address"" (" """) (string_content "address") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001c5910();" (call_expression "FUN_001c5910()" (identifier "FUN_001c5910") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x20) & 4) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" (( "(") (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" (* "*") (cast_expression "(byte *)(param_1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.h",0xe3,"offset");\n  }" ({ "{") (expression_statement "FUN_00352af0("../../gold/output.h",0xe3,"offset");" (call_expression "FUN_00352af0("../../gold/output.h",0xe3,"offset")" (identifier "FUN_00352af0") (argument_list "("../../gold/output.h",0xe3,"offset")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xe3") (, ",") (string_literal ""offset"" (" """) (string_content "offset") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar1 = *(long *)(param_1 + 0x18);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x18)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(param_1 + 0x18)" (* "*") (cast_expression "(long *)(param_1 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" (( "(") (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" (* "*") (cast_expression "(byte *)(param_1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.h",0xcf,"data_size");\n  }" ({ "{") (expression_statement "FUN_00352af0("../../gold/output.h",0xcf,"data_size");" (call_expression "FUN_00352af0("../../gold/output.h",0xcf,"data_size")" (identifier "FUN_00352af0") (argument_list "("../../gold/output.h",0xcf,"data_size")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xcf") (, ",") (string_literal ""data_size"" (" """) (string_content "data_size") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar2 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x10)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(param_1 + 0x10)" (* "*") (cast_expression "(long *)(param_1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }" (if "if") (parenthesized_expression "((lVar1 < 0) || (param_2[2] < lVar2 + lVar1))" (( "(") (binary_expression "(lVar1 < 0) || (param_2[2] < lVar2 + lVar1)" (parenthesized_expression "(lVar1 < 0)" (( "(") (binary_expression "lVar1 < 0" (identifier "lVar1") (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_2[2] < lVar2 + lVar1)" (( "(") (binary_expression "param_2[2] < lVar2 + lVar1" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (< "<") (binary_expression "lVar2 + lVar1" (identifier "lVar2") (+ "+") (identifier "lVar1"))) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");\n  }" ({ "{") (expression_statement "FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");" (call_expression "FUN_00352af0("../../gold/output.h",0x6f,"get_output_view")" (identifier "FUN_00352af0") (argument_list "("../../gold/output.h",0x6f,"get_output_view")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0x6f") (, ",") (string_literal ""get_output_view"" (" """) (string_content "get_output_view") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);" (assignment_expression "pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3])" (identifier "pauVar11") (= "=") (cast_expression "(undefined1 (*) [16])(lVar1 + param_2[3])" (( "(") (type_descriptor "undefined1 (*) [16]" (type_identifier "undefined1") (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "16") (] "]"))) () ")") (parenthesized_expression "(lVar1 + param_2[3])" (( "(") (binary_expression "lVar1 + param_2[3]" (identifier "lVar1") (+ "+") (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]"))) () ")")))) (; ";")) (expression_statement "*pauVar11 = (undefined1  [16])0x0;" (assignment_expression "*pauVar11 = (undefined1  [16])0x0" (pointer_expression "*pauVar11" (* "*") (identifier "pauVar11")) (= "=") (cast_expression "(undefined1  [16])0x0" (( "(") (type_descriptor "undefined1  [16]" (type_identifier "undefined1") (abstract_array_declarator "[16]" ([ "[") (number_literal "16") (] "]"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "pauVar10 = pauVar11 + 3;" (assignment_expression "pauVar10 = pauVar11 + 3" (identifier "pauVar10") (= "=") (binary_expression "pauVar11 + 3" (identifier "pauVar11") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "pauVar11[1] = (undefined1  [16])0x0;" (assignment_expression "pauVar11[1] = (undefined1  [16])0x0" (subscript_expression "pauVar11[1]" (identifier "pauVar11") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(undefined1  [16])0x0" (( "(") (type_descriptor "undefined1  [16]" (type_identifier "undefined1") (abstract_array_declarator "[16]" ([ "[") (number_literal "16") (] "]"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "pauVar11[2] = (undefined1  [16])0x0;" (assignment_expression "pauVar11[2] = (undefined1  [16])0x0" (subscript_expression "pauVar11[2]" (identifier "pauVar11") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(undefined1  [16])0x0" (( "(") (type_descriptor "undefined1  [16]" (type_identifier "undefined1") (abstract_array_declarator "[16]" ([ "[") (number_literal "16") (] "]"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);" (assignment_expression "uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48)" (identifier "uVar3") (= "=") (binary_expression "*(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48)" (pointer_expression "*(int *)(param_1 + 0x4c)" (* "*") (cast_expression "(int *)(param_1 + 0x4c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4c)" (( "(") (binary_expression "param_1 + 0x4c" (identifier "param_1") (+ "+") (number_literal "0x4c")) () ")")))) (+ "+") (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))))) (; ";")) (expression_statement "uVar6 = (ulong)uVar3;" (assignment_expression "uVar6 = (ulong)uVar3" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3"))) (; ";")) (if_statement "if (uVar3 != 0) {\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }" (if "if") (parenthesized_expression "(uVar3 != 0)" (( "(") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar9 = (ulong)(uVar3 - 1);\n    uVar4 = 0x30000003;\n    uVar3 = 0xf3ffbf30;\n    pauVar7 = pauVar10;\n    while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }\n    uVar6 = uVar9 * 3 + 3;\n    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);\n  }" ({ "{") (expression_statement "uVar9 = (ulong)(uVar3 - 1);" (assignment_expression "uVar9 = (ulong)(uVar3 - 1)" (identifier "uVar9") (= "=") (call_expression "(ulong)(uVar3 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar3 - 1)" (( "(") (binary_expression "uVar3 - 1" (identifier "uVar3") (- "-") (number_literal "1")) () ")")))) (; ";")) (expression_statement "uVar4 = 0x30000003;" (assignment_expression "uVar4 = 0x30000003" (identifier "uVar4") (= "=") (number_literal "0x30000003")) (; ";")) (expression_statement "uVar3 = 0xf3ffbf30;" (assignment_expression "uVar3 = 0xf3ffbf30" (identifier "uVar3") (= "=") (number_literal "0xf3ffbf30")) (; ";")) (expression_statement "pauVar7 = pauVar10;" (assignment_expression "pauVar7 = pauVar10" (identifier "pauVar7") (= "=") (identifier "pauVar10")) (; ";")) (while_statement "while( true ) {\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      *(uint *)*pauVar7 = uVar4;\n      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);\n      *(uint *)(*pauVar7 + 4) = uVar3;\n      *(undefined4 *)(*pauVar7 + 8) = 1;\n      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;\n      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;\n      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;\n      uVar5 = uVar3 + 0x30800000;\n      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;\n      pauVar7 = pauVar8;\n    }" ({ "{") (expression_statement "*(uint *)*pauVar7 = uVar4;" (assignment_expression "*(uint *)*pauVar7 = uVar4" (pointer_expression "*(uint *)*pauVar7" (* "*") (cast_expression "(uint *)*pauVar7" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*pauVar7" (* "*") (identifier "pauVar7")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);" (assignment_expression "pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc)" (identifier "pauVar8") (= "=") (cast_expression "(undefined1 (*) [16])(*pauVar7 + 0xc)" (( "(") (type_descriptor "undefined1 (*) [16]" (type_identifier "undefined1") (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "16") (] "]"))) () ")") (parenthesized_expression "(*pauVar7 + 0xc)" (( "(") (binary_expression "*pauVar7 + 0xc" (pointer_expression "*pauVar7" (* "*") (identifier "pauVar7")) (+ "+") (number_literal "0xc")) () ")")))) (; ";")) (expression_statement "*(uint *)(*pauVar7 + 4) = uVar3;" (assignment_expression "*(uint *)(*pauVar7 + 4) = uVar3" (pointer_expression "*(uint *)(*pauVar7 + 4)" (* "*") (cast_expression "(uint *)(*pauVar7 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*pauVar7 + 4)" (( "(") (binary_expression "*pauVar7 + 4" (pointer_expression "*pauVar7" (* "*") (identifier "pauVar7")) (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(undefined4 *)(*pauVar7 + 8) = 1;" (assignment_expression "*(undefined4 *)(*pauVar7 + 8) = 1" (pointer_expression "*(undefined4 *)(*pauVar7 + 8)" (* "*") (cast_expression "(undefined4 *)(*pauVar7 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*pauVar7 + 8)" (( "(") (binary_expression "*pauVar7 + 8" (pointer_expression "*pauVar7" (* "*") (identifier "pauVar7")) (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;" (if "if") (parenthesized_expression "(pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc))" (( "(") (binary_expression "pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)" (identifier "pauVar8") (== "==") (cast_expression "(undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)" (( "(") (type_descriptor "undefined1 (*) [16]" (type_identifier "undefined1") (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "16") (] "]"))) () ")") (parenthesized_expression "(pauVar11[3] + uVar9 * 0xc + 0xc)" (( "(") (binary_expression "pauVar11[3] + uVar9 * 0xc + 0xc" (binary_expression "pauVar11[3] + uVar9 * 0xc" (subscript_expression "pauVar11[3]" (identifier "pauVar11") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "uVar9 * 0xc" (identifier "uVar9") (* "*") (number_literal "0xc"))) (+ "+") (number_literal "0xc")) () ")")))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;" (assignment_expression "uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8" (identifier "uVar3") (= "=") (binary_expression "(0x3000030 - (int)pauVar10) + (int)pauVar8" (parenthesized_expression "(0x3000030 - (int)pauVar10)" (( "(") (binary_expression "0x3000030 - (int)pauVar10" (number_literal "0x3000030") (- "-") (cast_expression "(int)pauVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pauVar10"))) () ")")) (+ "+") (cast_expression "(int)pauVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pauVar8")))) (; ";")) (expression_statement "uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (identifier "uVar4") (= "=") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 * 0x1000000" (identifier "uVar3") (* "*") (number_literal "0x1000000")))) (; ";")) (expression_statement "uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;" (assignment_expression "uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff" (identifier "uVar3") (= "=") (binary_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff" (binary_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2" (call_expression "(uint)(((int)pauVar10 + -0x34) - (int)pauVar8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(((int)pauVar10 + -0x34) - (int)pauVar8)" (( "(") (binary_expression "((int)pauVar10 + -0x34) - (int)pauVar8" (parenthesized_expression "((int)pauVar10 + -0x34)" (( "(") (binary_expression "(int)pauVar10 + -0x34" (cast_expression "(int)pauVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pauVar10")) (+ "+") (number_literal "-0x34")) () ")")) (- "-") (cast_expression "(int)pauVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pauVar8"))) () ")"))) (>> ">>") (number_literal "2")) (& "&") (number_literal "0x3fffff"))) (; ";")) (expression_statement "uVar5 = uVar3 + 0x30800000;" (assignment_expression "uVar5 = uVar3 + 0x30800000" (identifier "uVar5") (= "=") (binary_expression "uVar3 + 0x30800000" (identifier "uVar3") (+ "+") (number_literal "0x30800000"))) (; ";")) (expression_statement "uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18" (identifier "uVar3") (= "=") (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" (identifier "uVar5") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" (( "(") (binary_expression "uVar5 & 0xff0000" (identifier "uVar5") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" (( "(") (binary_expression "uVar5 & 0xff00" (identifier "uVar5") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 << 0x18" (identifier "uVar3") (<< "<<") (number_literal "0x18")))) (; ";")) (expression_statement "pauVar7 = pauVar8;" (assignment_expression "pauVar7 = pauVar8" (identifier "pauVar7") (= "=") (identifier "pauVar8")) (; ";")) (} "}"))) (expression_statement "uVar6 = uVar9 * 3 + 3;" (assignment_expression "uVar6 = uVar9 * 3 + 3" (identifier "uVar6") (= "=") (binary_expression "uVar9 * 3 + 3" (binary_expression "uVar9 * 3" (identifier "uVar9") (* "*") (number_literal "3")) (+ "+") (number_literal "3"))) (; ";")) (expression_statement "pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);" (assignment_expression "pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc)" (identifier "pauVar10") (= "=") (cast_expression "(undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc)" (( "(") (type_descriptor "undefined1 (*) [16]" (type_identifier "undefined1") (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "16") (] "]"))) () ")") (parenthesized_expression "(*pauVar10 + uVar9 * 0xc + 0xc)" (( "(") (binary_expression "*pauVar10 + uVar9 * 0xc + 0xc" (binary_expression "*pauVar10 + uVar9 * 0xc" (pointer_expression "*pauVar10" (* "*") (identifier "pauVar10")) (+ "+") (binary_expression "uVar9 * 0xc" (identifier "uVar9") (* "*") (number_literal "0xc"))) (+ "+") (number_literal "0xc")) () ")")))) (; ";")) (} "}"))) (expression_statement "*(undefined4 *)*pauVar10 = 1;" (assignment_expression "*(undefined4 *)*pauVar10 = 1" (pointer_expression "*(undefined4 *)*pauVar10" (* "*") (cast_expression "(undefined4 *)*pauVar10" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*pauVar10" (* "*") (identifier "pauVar10")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {\n    return uVar6;\n  }" (if "if") (parenthesized_expression "((long)pauVar10 + (4 - (long)pauVar11) == lVar2)" (( "(") (binary_expression "(long)pauVar10 + (4 - (long)pauVar11) == lVar2" (binary_expression "(long)pauVar10 + (4 - (long)pauVar11)" (cast_expression "(long)pauVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pauVar10")) (+ "+") (parenthesized_expression "(4 - (long)pauVar11)" (( "(") (binary_expression "4 - (long)pauVar11" (number_literal "4") (- "-") (cast_expression "(long)pauVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pauVar11"))) () ")"))) (== "==") (identifier "lVar2")) () ")")) (compound_statement "{\n    return uVar6;\n  }" ({ "{") (return_statement "return uVar6;" (return "return") (identifier "uVar6") (; ";")) (} "}"))) (expression_statement "FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");" (call_expression "FUN_00352af0("../../gold/sparc.cc",0x708,"do_write")" (identifier "FUN_00352af0") (argument_list "("../../gold/sparc.cc",0x708,"do_write")" (( "(") (string_literal ""../../gold/sparc.cc"" (" """) (string_content "../../gold/sparc.cc") (" """)) (, ",") (number_literal "0x708") (, ",") (string_literal ""do_write"" (" """) (string_content "do_write") (" """)) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: uint64_t do_plt_address_for_local(Target_sparc<64,_true> * this, Relobj
   * relobj, uint symndx) */

uint64_t __thiscall
anon_unknown.dwarf_4cd88d::Target_sparc<64,_true>::do_plt_address_for_local
          (Target_sparc<64,_true> *this,Relobj *relobj,type_1 symndx)

{
  uint64_t var_1;
  long var_4;
  type_1 var_3;
  type_1 uVar4;
  type_2 offset;
  
  var_1 = (this->sparc_info).abi_pagesize;
  if (var_1 == 0) {
                    /* WARNING: Subroutine does not return */
    var_2(this);
  }
  if ((*(type_3 *)(var_1 + 0x20) & 1) != 0) {
    var_4 = *(long *)(var_1 + 8);
    var_3 = *(int *)(var_1 + 0x48) + 4;
    if (var_3 < 0x8000) {
      var_3 = var_3 * 0x20;
    }
    else {
      var_3 = *(int *)(var_1 + 0x48) - 0x7ffc;
      var_3 = (var_3 / 0xa0) * 0x500 + 0x100000 + var_3 * 0x18;
    }
    uVar4 = (*(relobj->super_Object)._vptr_Object[0x2a])(relobj,(type_4)symndx);
    return (type_4)uVar4 + (type_4)var_3 + var_4;
  }
                    /* WARNING: Subroutine does not return */
  gold::var_5("../../gold/output.h",0xc5,"address");
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) 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: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (subscript_expression argument: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))) index: (number_literal))) (expression_statement (subscript_expression argument: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))) index: (number_literal))) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (subscript_expression argument: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))) index: (number_literal))) (expression_statement (subscript_expression argument: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))) index: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (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: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (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: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier))))) (return_statement (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator size: (number_literal))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator size: (number_literal))) value: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator size: (number_literal))) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (identifier))) (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) right: (identifier))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))))

ulong MASKED(long param_1,long *param_2,undefined4 param_3)

{
  long lVar1;
  long lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  ulong uVar6;
  undefined1 (*pauVar7) [16];
  undefined1 (*pauVar8) [16];
  ulong uVar9;
  undefined1 (*pauVar10) [16];
  undefined1 (*pauVar11) [16];
  
  lVar1 = *(long *)(param_1 + 0x28);
  if (lVar1 != 0) {
    if ((*(byte *)(lVar1 + 0x20) & 1) != 0) {
      lVar2 = *(long *)(lVar1 + 8);
      uVar3 = *(int *)(lVar1 + 0x48) + 4;
      if (uVar3 < 0x8000) {
        uVar3 = uVar3 * 0x20;
      }
      else {
        uVar3 = *(int *)(lVar1 + 0x48) - 0x7ffc;
        uVar3 = (uVar3 / 0xa0) * 0x500 + 0x100000 + uVar3 * 0x18;
      }
      uVar4 = (**(code **)(*param_2 + 0x150))(param_2,param_3);
      return (ulong)uVar4 + (ulong)uVar3 + lVar2;
    }
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0xc5,"address");
  }
  FUN_001c5910();
  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0xe3,"offset");
  }
  lVar1 = *(long *)(param_1 + 0x18);
  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0xcf,"data_size");
  }
  lVar2 = *(long *)(param_1 + 0x10);
  if ((lVar1 < 0) || (param_2[2] < lVar2 + lVar1)) {
                    /* WARNING: Subroutine does not return */
    FUN_00352af0("../../gold/output.h",0x6f,"get_output_view");
  }
  pauVar11 = (undefined1 (*) [16])(lVar1 + param_2[3]);
  *pauVar11 = (undefined1  [16])0x0;
  pauVar10 = pauVar11 + 3;
  pauVar11[1] = (undefined1  [16])0x0;
  pauVar11[2] = (undefined1  [16])0x0;
  uVar3 = *(int *)(param_1 + 0x4c) + *(int *)(param_1 + 0x48);
  uVar6 = (ulong)uVar3;
  if (uVar3 != 0) {
    uVar9 = (ulong)(uVar3 - 1);
    uVar4 = 0x30000003;
    uVar3 = 0xf3ffbf30;
    pauVar7 = pauVar10;
    while( true ) {
      *(uint *)*pauVar7 = uVar4;
      pauVar8 = (undefined1 (*) [16])(*pauVar7 + 0xc);
      *(uint *)(*pauVar7 + 4) = uVar3;
      *(undefined4 *)(*pauVar7 + 8) = 1;
      if (pauVar8 == (undefined1 (*) [16])(pauVar11[3] + uVar9 * 0xc + 0xc)) break;
      uVar3 = (0x3000030 - (int)pauVar10) + (int)pauVar8;
      uVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
      uVar3 = (uint)(((int)pauVar10 + -0x34) - (int)pauVar8) >> 2 & 0x3fffff;
      uVar5 = uVar3 + 0x30800000;
      uVar3 = uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar3 << 0x18;
      pauVar7 = pauVar8;
    }
    uVar6 = uVar9 * 3 + 3;
    pauVar10 = (undefined1 (*) [16])(*pauVar10 + uVar9 * 0xc + 0xc);
  }
  *(undefined4 *)*pauVar10 = 1;
  if ((long)pauVar10 + (4 - (long)pauVar11) == lVar2) {
    return uVar6;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00352af0("../../gold/sparc.cc",0x708,"do_write");
}

