
ulong slot_index(ulong slot_addr,fragS *slot_frag,ulong first_addr,fragS *first_frag,
                int before_relax)

{
  uint uVar1;
  ulong uVar2;
  offsetT oVar3;
  long lVar4;
  char *pcVar5;
  frag *pfVar6;
  
  lVar4 = 0;
  if (slot_frag != first_frag) {
    pcVar5 = first_frag->fr_literal;
    do {
      if (before_relax == 0) {
        pfVar6 = first_frag->fr_next;
        oVar3 = first_frag->fr_fix;
        if (pfVar6 == (frag *)0x0) {
          pfVar6 = (frag *)0x0;
        }
        else if (pfVar6->fr_address != 0) {
          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;
        }
        goto LAB_00136e78;
      }
      switch(first_frag->fr_type) {
      case rs_fill:
switchD_00136ede_caseD_1:
        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;
      default:
        oVar3 = first_frag->fr_fix;
        pfVar6 = first_frag->fr_next;
        break;
      case rs_align:
      case rs_align_code:
      case rs_align_test:
        oVar3 = first_frag->fr_fix;
        pfVar6 = first_frag->fr_next;
        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;
        break;
      case rs_org:
        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;
        pcVar5 = "Only constant offsets are supported";
        goto LAB_00136f85;
      case rs_space:
        pcVar5 = "Only constant space allocation is supported";
        goto LAB_00136f85;
      }
LAB_00136e78:
      uVar2 = first_addr >> 4;
      uVar1 = (uint)first_addr;
      first_addr = (ulong)pfVar6->fr_literal;
      lVar4 = (oVar3 >> 4) * 3 +
              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3
              + lVar4;
      if (pfVar6 == (frag *)0x0) {
        pcVar5 = "Section switching in code is not supported.";
LAB_00136f85:
        pcVar5 = (char *)dcgettext(0,pcVar5,5);
                    /* WARNING: Subroutine does not return */
        as_fatal(pcVar5);
      }
      first_frag = pfVar6;
      pcVar5 = (char *)first_addr;
    } while (slot_frag != pfVar6);
  }
  return (((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)) +
         ((slot_addr >> 4) - (first_addr >> 4)) * 3;
}



long FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)

{
  undefined8 uVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  long lVar5;
  char *pcVar6;
  long *plVar7;
  long *plVar8;
  
  lVar5 = 0;
  if (param_2 != param_4) {
    plVar8 = param_4 + 0xd;
    do {
      if (param_5 == 0) {
        plVar7 = (long *)param_4[7];
        lVar4 = param_4[2];
        if (plVar7 == (long *)0x0) {
          plVar7 = (long *)0x0;
        }
        else if (*plVar7 != 0) {
          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;
        }
        goto LAB_00136e78;
      }
      switch(*(undefined4 *)((long)param_4 + 0x5c)) {
      case 1:
switchD_00136ede_caseD_1:
        lVar5 = lVar5 + (param_4[4] >> 4) * 3;
      default:
        lVar4 = param_4[2];
        plVar7 = (long *)param_4[7];
        break;
      case 2:
      case 3:
      case 4:
        lVar4 = param_4[2];
        plVar7 = (long *)param_4[7];
        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;
        break;
      case 5:
        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;
        pcVar6 = "Only constant offsets are supported";
        goto LAB_00136f85;
      case 8:
        pcVar6 = "Only constant space allocation is supported";
        goto LAB_00136f85;
      }
LAB_00136e78:
      uVar3 = (ulong)param_3 >> 4;
      uVar2 = (uint)param_3;
      param_3 = plVar7 + 0xd;
      lVar5 = (lVar4 >> 4) * 3 +
              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3
              + lVar5;
      if (plVar7 == (long *)0x0) {
        pcVar6 = "Section switching in code is not supported.";
LAB_00136f85:
        uVar1 = dcgettext(0,pcVar6,5);
                    /* WARNING: Subroutine does not return */
        FUN_0011c340(uVar1);
      }
      param_4 = plVar7;
      plVar8 = param_3;
    } while (param_2 != plVar7);
  }
  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +
         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;
}


PUSH R12
PUSH RBP
XOR EBP,EBP
PUSH RBX
CMP RSI,RCX
JZ 0x00136f50
MOV R9,RCX
LEA R12,[RCX + 0x68]
LEA R10,[0x14ef60]
MOV R11D,0x1
JMP 0x00136ec3
MOV RCX,qword ptr [R9 + 0x38]
MOV RBX,qword ptr [R9 + 0x10]
TEST RCX,RCX
JZ 0x00136f40
MOV RAX,qword ptr [RCX]
TEST RAX,RAX
JZ 0x00136f38
SUB RAX,qword ptr [R9]
MOV R9,RCX
SUB RAX,RBX
SHR RAX,0x4
LEA RAX,[RAX + RAX*0x2]
ADD RBP,RAX
NOP dword ptr [RAX]
MOV RAX,R12
MOV RCX,RDX
SHR RDX,0x4
SHR R12,0x4
AND ECX,0x3
AND EAX,0x3
SAR RBX,0x4
SUB RAX,RCX
MOV RCX,RDX
SUB RCX,R12
LEA R12,[R9 + 0x68]
LEA RDX,[RCX + RCX*0x2]
SUB RAX,RDX
MOV RDX,R12
ADD RAX,RBP
LEA RBP,[RBX + RBX*0x2]
ADD RBP,RAX
TEST R9,R9
JZ 0x00136f96
CMP RSI,R9
JZ 0x00136f50
TEST R8D,R8D
JZ 0x00136e40
CMP dword ptr [R9 + 0x5c],0x8
JA 0x00136efa
MOV EAX,dword ptr [R9 + 0x5c]
MOVSXD RAX,dword ptr [R10 + RAX*0x4]
ADD RAX,R10
JMP RAX
CMP qword ptr [R9 + 0x28],0x0
JNZ 0x00136fa4
MOV RAX,qword ptr [R9 + 0x20]
SAR RAX,0x4
LEA RAX,[RAX + RAX*0x2]
ADD RBP,RAX
MOV RBX,qword ptr [R9 + 0x10]
MOV R9,qword ptr [R9 + 0x38]
JMP 0x00136e78
MOV RCX,qword ptr [R9 + 0x20]
MOV EAX,R11D
MOV RBX,qword ptr [R9 + 0x10]
MOV R9,qword ptr [R9 + 0x38]
SHL EAX,CL
SAR EAX,0x4
LEA EAX,[RAX + RAX*0x2]
CDQE
ADD RBP,RAX
JMP 0x00136e78
MOV R9,RCX
JMP 0x00136e78
XOR R9D,R9D
JMP 0x00136e78
MOV RAX,RDI
MOV RCX,RDX
SHR RDI,0x4
POP RBX
SHR RDX,0x4
AND EAX,0x3
AND ECX,0x3
ADD RAX,RBP
SUB RDI,RDX
POP RBP
POP R12
SUB RAX,RCX
LEA RDX,[RDI + RDI*0x2]
ADD RAX,RDX
RET
MOV EDX,0x5
LEA RSI,[0x14fc98]
XOR EDI,EDI
CALL 0x001091d0
MOV RDI,RAX
XOR EAX,EAX
CALL 0x0011c340
MOV EDX,0x5
LEA RSI,[0x14fcf0]
JMP 0x00136f85
MOV EDX,0x5
LEA RSI,[0x14fcc8]
JMP 0x00136f85
(translation_unit "long FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}\n\n" (function_definition "long FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)" identifier (parameter_list "(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)" ( (parameter_declaration "ulong param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long *plVar8;" (sized_type_specifier "long" long) (pointer_declarator "*plVar8" * identifier) ;) (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" identifier = number_literal) ;) (if_statement "if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }" if (parenthesized_expression "(param_2 != param_4)" ( (binary_expression "param_2 != param_4" identifier != identifier) )) (compound_statement "{\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }" { (expression_statement "plVar8 = param_4 + 0xd;" (assignment_expression "plVar8 = param_4 + 0xd" identifier = (binary_expression "param_4 + 0xd" identifier + number_literal)) ;) (do_statement "do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);" do (compound_statement "{\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    }" { (if_statement "if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" { (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" identifier = (cast_expression "(long *)param_4[7]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[7]" identifier [ number_literal ]))) ;) (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (if_statement "if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          plVar7 = (long *)0x0;\n        }" { (expression_statement "plVar7 = (long *)0x0;" (assignment_expression "plVar7 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" else (if_statement "if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" if (parenthesized_expression "(*plVar7 != 0)" ( (binary_expression "*plVar7 != 0" (pointer_expression "*plVar7" * identifier) != number_literal) )) (compound_statement "{\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" { (expression_statement "lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" identifier = (binary_expression "lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" identifier + (binary_expression "((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" (parenthesized_expression "((ulong)((*plVar7 - *param_4) - lVar4) >> 4)" ( (binary_expression "(ulong)((*plVar7 - *param_4) - lVar4) >> 4" (call_expression "(ulong)((*plVar7 - *param_4) - lVar4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((*plVar7 - *param_4) - lVar4)" ( (binary_expression "(*plVar7 - *param_4) - lVar4" (parenthesized_expression "(*plVar7 - *param_4)" ( (binary_expression "*plVar7 - *param_4" (pointer_expression "*plVar7" * identifier) - (pointer_expression "*param_4" * identifier)) )) - identifier) ))) >> number_literal) )) * number_literal))) ;) })))) (goto_statement "goto LAB_00136e78;" goto statement_identifier ;) })) (switch_statement "switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" switch (parenthesized_expression "(*(undefined4 *)((long)param_4 + 0x5c))" ( (pointer_expression "*(undefined4 *)((long)param_4 + 0x5c)" * (cast_expression "(undefined4 *)((long)param_4 + 0x5c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_4 + 0x5c)" ( (binary_expression "(long)param_4 + 0x5c" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) )) (compound_statement "{\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" { (case_statement "case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;" case number_literal : (labeled_statement "switchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;" statement_identifier : (expression_statement "lVar5 = lVar5 + (param_4[4] >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + (param_4[4] >> 4) * 3" identifier = (binary_expression "lVar5 + (param_4[4] >> 4) * 3" identifier + (binary_expression "(param_4[4] >> 4) * 3" (parenthesized_expression "(param_4[4] >> 4)" ( (binary_expression "param_4[4] >> 4" (subscript_expression "param_4[4]" identifier [ number_literal ]) >> number_literal) )) * number_literal))) ;))) (case_statement "default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;" default : (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" identifier = (cast_expression "(long *)param_4[7]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[7]" identifier [ number_literal ]))) ;) (break_statement "break;" break ;)) (case_statement "case 2:" case number_literal :) (case_statement "case 3:" case number_literal :) (case_statement "case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;" case number_literal : (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" identifier = (cast_expression "(long *)param_4[7]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[7]" identifier [ number_literal ]))) ;) (expression_statement "lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" identifier = (binary_expression "lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" identifier + (binary_expression "((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" (parenthesized_expression "((1 << ((byte)param_4[4] & 0x1f)) >> 4)" ( (binary_expression "(1 << ((byte)param_4[4] & 0x1f)) >> 4" (parenthesized_expression "(1 << ((byte)param_4[4] & 0x1f))" ( (binary_expression "1 << ((byte)param_4[4] & 0x1f)" number_literal << (parenthesized_expression "((byte)param_4[4] & 0x1f)" ( (binary_expression "(byte)param_4[4] & 0x1f" (cast_expression "(byte)param_4[4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_4[4]" identifier [ number_literal ])) & number_literal) ))) )) >> number_literal) )) * number_literal))) ;) (break_statement "break;" break ;)) (case_statement "case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;" case number_literal : (if_statement "if (param_4[5] == 0) goto switchD_00136ede_caseD_1;" if (parenthesized_expression "(param_4[5] == 0)" ( (binary_expression "param_4[5] == 0" (subscript_expression "param_4[5]" identifier [ number_literal ]) == number_literal) )) (goto_statement "goto switchD_00136ede_caseD_1;" goto statement_identifier ;)) (expression_statement "pcVar6 = "Only constant offsets are supported";" (assignment_expression "pcVar6 = "Only constant offsets are supported"" identifier = (string_literal ""Only constant offsets are supported"" " string_content ")) ;) (goto_statement "goto LAB_00136f85;" goto statement_identifier ;)) (case_statement "case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;" case number_literal : (expression_statement "pcVar6 = "Only constant space allocation is supported";" (assignment_expression "pcVar6 = "Only constant space allocation is supported"" identifier = (string_literal ""Only constant space allocation is supported"" " string_content ")) ;) (goto_statement "goto LAB_00136f85;" goto statement_identifier ;)) })) (labeled_statement "LAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;" statement_identifier : (expression_statement "uVar3 = (ulong)param_3 >> 4;" (assignment_expression "uVar3 = (ulong)param_3 >> 4" identifier = (binary_expression "(ulong)param_3 >> 4" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal)) ;)) (expression_statement "uVar2 = (uint)param_3;" (assignment_expression "uVar2 = (uint)param_3" identifier = (cast_expression "(uint)param_3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_3 = plVar7 + 0xd;" (assignment_expression "param_3 = plVar7 + 0xd" identifier = (binary_expression "plVar7 + 0xd" identifier + number_literal)) ;) (expression_statement "lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;" (assignment_expression "lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5" identifier = (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5" (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3" (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3))" (binary_expression "(lVar4 >> 4) * 3" (parenthesized_expression "(lVar4 >> 4)" ( (binary_expression "lVar4 >> 4" identifier >> number_literal) )) * number_literal) + (parenthesized_expression "((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3))" ( (binary_expression "(ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)" (call_expression "(ulong)((uint)plVar8 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)plVar8 & 3)" ( (binary_expression "(uint)plVar8 & 3" (cast_expression "(uint)plVar8" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) - (call_expression "(ulong)(uVar2 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 & 3)" ( (binary_expression "uVar2 & 3" identifier & number_literal) )))) ))) + (binary_expression "(uVar3 - ((ulong)plVar8 >> 4)) * -3" (parenthesized_expression "(uVar3 - ((ulong)plVar8 >> 4))" ( (binary_expression "uVar3 - ((ulong)plVar8 >> 4)" identifier - (parenthesized_expression "((ulong)plVar8 >> 4)" ( (binary_expression "(ulong)plVar8 >> 4" (cast_expression "(ulong)plVar8" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) )) * number_literal)) + identifier)) ;) (if_statement "if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    /* WARNING: Subroutine does not return */\n        FUN_0011c340(uVar1);\n      }" { (expression_statement "pcVar6 = "Section switching in code is not supported.";" (assignment_expression "pcVar6 = "Section switching in code is not supported."" identifier = (string_literal ""Section switching in code is not supported."" " string_content ")) ;) (labeled_statement "LAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);" statement_identifier : (expression_statement "uVar1 = dcgettext(0,pcVar6,5);" (assignment_expression "uVar1 = dcgettext(0,pcVar6,5)" identifier = (call_expression "dcgettext(0,pcVar6,5)" identifier (argument_list "(0,pcVar6,5)" ( number_literal , identifier , number_literal )))) ;)) comment (expression_statement "FUN_0011c340(uVar1);" (call_expression "FUN_0011c340(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) })) (expression_statement "param_4 = plVar7;" (assignment_expression "param_4 = plVar7" identifier = identifier) ;) (expression_statement "plVar8 = param_3;" (assignment_expression "plVar8 = param_3" identifier = identifier) ;) }) while (parenthesized_expression "(param_2 != plVar7)" ( (binary_expression "param_2 != plVar7" identifier != identifier) )) ;) })) (return_statement "return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;" return (binary_expression "(((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3" (parenthesized_expression "(((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3))" ( (binary_expression "((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)" (parenthesized_expression "((ulong)((uint)param_1 & 3) + lVar5)" ( (binary_expression "(ulong)((uint)param_1 & 3) + lVar5" (call_expression "(ulong)((uint)param_1 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)param_1 & 3)" ( (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) + identifier) )) - (call_expression "(ulong)((uint)param_3 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)param_3 & 3)" ( (binary_expression "(uint)param_3 & 3" (cast_expression "(uint)param_3" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) )) + (binary_expression "((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3" (parenthesized_expression "((param_1 >> 4) - ((ulong)param_3 >> 4))" ( (binary_expression "(param_1 >> 4) - ((ulong)param_3 >> 4)" (parenthesized_expression "(param_1 >> 4)" ( (binary_expression "param_1 >> 4" identifier >> number_literal) )) - (parenthesized_expression "((ulong)param_3 >> 4)" ( (binary_expression "(ulong)param_3 >> 4" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) )) * number_literal)) ;) })))
(translation_unit "ulong slot_index(ulong slot_addr,fragS *slot_frag,ulong first_addr,fragS *first_frag,\n                int before_relax)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  offsetT oVar3;\n  long lVar4;\n  char *pcVar5;\n  frag *pfVar6;\n  \n  lVar4 = 0;\n  if (slot_frag != first_frag) {\n    pcVar5 = first_frag->fr_literal;\n    do {\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    } while (slot_frag != pfVar6);\n  }\n  return (((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)) +\n         ((slot_addr >> 4) - (first_addr >> 4)) * 3;\n}\n\n" (function_definition "ulong slot_index(ulong slot_addr,fragS *slot_frag,ulong first_addr,fragS *first_frag,\n                int before_relax)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  offsetT oVar3;\n  long lVar4;\n  char *pcVar5;\n  frag *pfVar6;\n  \n  lVar4 = 0;\n  if (slot_frag != first_frag) {\n    pcVar5 = first_frag->fr_literal;\n    do {\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    } while (slot_frag != pfVar6);\n  }\n  return (((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)) +\n         ((slot_addr >> 4) - (first_addr >> 4)) * 3;\n}" type_identifier (function_declarator "slot_index(ulong slot_addr,fragS *slot_frag,ulong first_addr,fragS *first_frag,\n                int before_relax)" identifier (parameter_list "(ulong slot_addr,fragS *slot_frag,ulong first_addr,fragS *first_frag,\n                int before_relax)" ( (parameter_declaration "ulong slot_addr" type_identifier identifier) , (parameter_declaration "fragS *slot_frag" type_identifier (pointer_declarator "*slot_frag" * identifier)) , (parameter_declaration "ulong first_addr" type_identifier identifier) , (parameter_declaration "fragS *first_frag" type_identifier (pointer_declarator "*first_frag" * identifier)) , (parameter_declaration "int before_relax" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  offsetT oVar3;\n  long lVar4;\n  char *pcVar5;\n  frag *pfVar6;\n  \n  lVar4 = 0;\n  if (slot_frag != first_frag) {\n    pcVar5 = first_frag->fr_literal;\n    do {\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    } while (slot_frag != pfVar6);\n  }\n  return (((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)) +\n         ((slot_addr >> 4) - (first_addr >> 4)) * 3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "offsetT oVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "frag *pfVar6;" type_identifier (pointer_declarator "*pfVar6" * identifier) ;) (expression_statement "lVar4 = 0;" (assignment_expression "lVar4 = 0" identifier = number_literal) ;) (if_statement "if (slot_frag != first_frag) {\n    pcVar5 = first_frag->fr_literal;\n    do {\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    } while (slot_frag != pfVar6);\n  }" if (parenthesized_expression "(slot_frag != first_frag)" ( (binary_expression "slot_frag != first_frag" identifier != identifier) )) (compound_statement "{\n    pcVar5 = first_frag->fr_literal;\n    do {\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    } while (slot_frag != pfVar6);\n  }" { (expression_statement "pcVar5 = first_frag->fr_literal;" (assignment_expression "pcVar5 = first_frag->fr_literal" identifier = (field_expression "first_frag->fr_literal" identifier -> field_identifier)) ;) (do_statement "do {\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    } while (slot_frag != pfVar6);" do (compound_statement "{\n      if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar2 = first_addr >> 4;\n      uVar1 = (uint)first_addr;\n      first_addr = (ulong)pfVar6->fr_literal;\n      lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;\n      if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }\n      first_frag = pfVar6;\n      pcVar5 = (char *)first_addr;\n    }" { (if_statement "if (before_relax == 0) {\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" if (parenthesized_expression "(before_relax == 0)" ( (binary_expression "before_relax == 0" identifier == number_literal) )) (compound_statement "{\n        pfVar6 = first_frag->fr_next;\n        oVar3 = first_frag->fr_fix;\n        if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" { (expression_statement "pfVar6 = first_frag->fr_next;" (assignment_expression "pfVar6 = first_frag->fr_next" identifier = (field_expression "first_frag->fr_next" identifier -> field_identifier)) ;) (expression_statement "oVar3 = first_frag->fr_fix;" (assignment_expression "oVar3 = first_frag->fr_fix" identifier = (field_expression "first_frag->fr_fix" identifier -> field_identifier)) ;) (if_statement "if (pfVar6 == (frag *)0x0) {\n          pfVar6 = (frag *)0x0;\n        }\n        else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }" if (parenthesized_expression "(pfVar6 == (frag *)0x0)" ( (binary_expression "pfVar6 == (frag *)0x0" identifier == (cast_expression "(frag *)0x0" ( (type_descriptor "frag *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pfVar6 = (frag *)0x0;\n        }" { (expression_statement "pfVar6 = (frag *)0x0;" (assignment_expression "pfVar6 = (frag *)0x0" identifier = (cast_expression "(frag *)0x0" ( (type_descriptor "frag *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }" else (if_statement "if (pfVar6->fr_address != 0) {\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }" if (parenthesized_expression "(pfVar6->fr_address != 0)" ( (binary_expression "pfVar6->fr_address != 0" (field_expression "pfVar6->fr_address" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n          lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;\n        }" { (expression_statement "lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3;" (assignment_expression "lVar4 = lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3" identifier = (binary_expression "lVar4 + ((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3" identifier + (binary_expression "((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4) * 3" (parenthesized_expression "((pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4)" ( (binary_expression "(pfVar6->fr_address - first_frag->fr_address) - oVar3 >> 4" (binary_expression "(pfVar6->fr_address - first_frag->fr_address) - oVar3" (parenthesized_expression "(pfVar6->fr_address - first_frag->fr_address)" ( (binary_expression "pfVar6->fr_address - first_frag->fr_address" (field_expression "pfVar6->fr_address" identifier -> field_identifier) - (field_expression "first_frag->fr_address" identifier -> field_identifier)) )) - identifier) >> number_literal) )) * number_literal))) ;) })))) (goto_statement "goto LAB_00136e78;" goto statement_identifier ;) })) (switch_statement "switch(first_frag->fr_type) {\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" switch (parenthesized_expression "(first_frag->fr_type)" ( (field_expression "first_frag->fr_type" identifier -> field_identifier) )) (compound_statement "{\n      case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;\n      default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;\n      case rs_align:\n      case rs_align_code:\n      case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;\n      case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" { (case_statement "case rs_fill:\nswitchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;" case identifier : (labeled_statement "switchD_00136ede_caseD_1:\n        lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;" statement_identifier : (expression_statement "lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3;" (assignment_expression "lVar4 = lVar4 + (first_frag->fr_offset >> 4) * 3" identifier = (binary_expression "lVar4 + (first_frag->fr_offset >> 4) * 3" identifier + (binary_expression "(first_frag->fr_offset >> 4) * 3" (parenthesized_expression "(first_frag->fr_offset >> 4)" ( (binary_expression "first_frag->fr_offset >> 4" (field_expression "first_frag->fr_offset" identifier -> field_identifier) >> number_literal) )) * number_literal))) ;))) (case_statement "default:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        break;" default : (expression_statement "oVar3 = first_frag->fr_fix;" (assignment_expression "oVar3 = first_frag->fr_fix" identifier = (field_expression "first_frag->fr_fix" identifier -> field_identifier)) ;) (expression_statement "pfVar6 = first_frag->fr_next;" (assignment_expression "pfVar6 = first_frag->fr_next" identifier = (field_expression "first_frag->fr_next" identifier -> field_identifier)) ;) (break_statement "break;" break ;)) (case_statement "case rs_align:" case identifier :) (case_statement "case rs_align_code:" case identifier :) (case_statement "case rs_align_test:\n        oVar3 = first_frag->fr_fix;\n        pfVar6 = first_frag->fr_next;\n        lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;\n        break;" case identifier : (expression_statement "oVar3 = first_frag->fr_fix;" (assignment_expression "oVar3 = first_frag->fr_fix" identifier = (field_expression "first_frag->fr_fix" identifier -> field_identifier)) ;) (expression_statement "pfVar6 = first_frag->fr_next;" (assignment_expression "pfVar6 = first_frag->fr_next" identifier = (field_expression "first_frag->fr_next" identifier -> field_identifier)) ;) (expression_statement "lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3;" (assignment_expression "lVar4 = lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3" identifier = (binary_expression "lVar4 + ((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3" identifier + (binary_expression "((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4) * 3" (parenthesized_expression "((1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4)" ( (binary_expression "(1 << ((byte)first_frag->fr_offset & 0x1f)) >> 4" (parenthesized_expression "(1 << ((byte)first_frag->fr_offset & 0x1f))" ( (binary_expression "1 << ((byte)first_frag->fr_offset & 0x1f)" number_literal << (parenthesized_expression "((byte)first_frag->fr_offset & 0x1f)" ( (binary_expression "(byte)first_frag->fr_offset & 0x1f" (cast_expression "(byte)first_frag->fr_offset" ( (type_descriptor "byte" type_identifier) ) (field_expression "first_frag->fr_offset" identifier -> field_identifier)) & number_literal) ))) )) >> number_literal) )) * number_literal))) ;) (break_statement "break;" break ;)) (case_statement "case rs_org:\n        if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;\n        pcVar5 = "Only constant offsets are supported";\n        goto LAB_00136f85;" case identifier : (if_statement "if (first_frag->fr_symbol == (symbolS *)0x0) goto switchD_00136ede_caseD_1;" if (parenthesized_expression "(first_frag->fr_symbol == (symbolS *)0x0)" ( (binary_expression "first_frag->fr_symbol == (symbolS *)0x0" (field_expression "first_frag->fr_symbol" identifier -> field_identifier) == (cast_expression "(symbolS *)0x0" ( (type_descriptor "symbolS *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto switchD_00136ede_caseD_1;" goto statement_identifier ;)) (expression_statement "pcVar5 = "Only constant offsets are supported";" (assignment_expression "pcVar5 = "Only constant offsets are supported"" identifier = (string_literal ""Only constant offsets are supported"" " string_content ")) ;) (goto_statement "goto LAB_00136f85;" goto statement_identifier ;)) (case_statement "case rs_space:\n        pcVar5 = "Only constant space allocation is supported";\n        goto LAB_00136f85;" case identifier : (expression_statement "pcVar5 = "Only constant space allocation is supported";" (assignment_expression "pcVar5 = "Only constant space allocation is supported"" identifier = (string_literal ""Only constant space allocation is supported"" " string_content ")) ;) (goto_statement "goto LAB_00136f85;" goto statement_identifier ;)) })) (labeled_statement "LAB_00136e78:\n      uVar2 = first_addr >> 4;" statement_identifier : (expression_statement "uVar2 = first_addr >> 4;" (assignment_expression "uVar2 = first_addr >> 4" identifier = (binary_expression "first_addr >> 4" identifier >> number_literal)) ;)) (expression_statement "uVar1 = (uint)first_addr;" (assignment_expression "uVar1 = (uint)first_addr" identifier = (cast_expression "(uint)first_addr" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "first_addr = (ulong)pfVar6->fr_literal;" (assignment_expression "first_addr = (ulong)pfVar6->fr_literal" identifier = (cast_expression "(ulong)pfVar6->fr_literal" ( (type_descriptor "ulong" type_identifier) ) (field_expression "pfVar6->fr_literal" identifier -> field_identifier))) ;) (expression_statement "lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4;" (assignment_expression "lVar4 = (oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4" identifier = (binary_expression "(oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3\n              + lVar4" (binary_expression "(oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)) + (uVar2 - ((ulong)pcVar5 >> 4)) * -3" (binary_expression "(oVar3 >> 4) * 3 +\n              ((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3))" (binary_expression "(oVar3 >> 4) * 3" (parenthesized_expression "(oVar3 >> 4)" ( (binary_expression "oVar3 >> 4" identifier >> number_literal) )) * number_literal) + (parenthesized_expression "((ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3))" ( (binary_expression "(ulong)((uint)pcVar5 & 3) - (ulong)(uVar1 & 3)" (call_expression "(ulong)((uint)pcVar5 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)pcVar5 & 3)" ( (binary_expression "(uint)pcVar5 & 3" (cast_expression "(uint)pcVar5" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) - (call_expression "(ulong)(uVar1 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 & 3)" ( (binary_expression "uVar1 & 3" identifier & number_literal) )))) ))) + (binary_expression "(uVar2 - ((ulong)pcVar5 >> 4)) * -3" (parenthesized_expression "(uVar2 - ((ulong)pcVar5 >> 4))" ( (binary_expression "uVar2 - ((ulong)pcVar5 >> 4)" identifier - (parenthesized_expression "((ulong)pcVar5 >> 4)" ( (binary_expression "(ulong)pcVar5 >> 4" (cast_expression "(ulong)pcVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) )) * number_literal)) + identifier)) ;) (if_statement "if (pfVar6 == (frag *)0x0) {\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }" if (parenthesized_expression "(pfVar6 == (frag *)0x0)" ( (binary_expression "pfVar6 == (frag *)0x0" identifier == (cast_expression "(frag *)0x0" ( (type_descriptor "frag *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar5 = "Section switching in code is not supported.";\nLAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);\n                    /* WARNING: Subroutine does not return */\n        as_fatal(pcVar5);\n      }" { (expression_statement "pcVar5 = "Section switching in code is not supported.";" (assignment_expression "pcVar5 = "Section switching in code is not supported."" identifier = (string_literal ""Section switching in code is not supported."" " string_content ")) ;) (labeled_statement "LAB_00136f85:\n        pcVar5 = (char *)dcgettext(0,pcVar5,5);" statement_identifier : (expression_statement "pcVar5 = (char *)dcgettext(0,pcVar5,5);" (assignment_expression "pcVar5 = (char *)dcgettext(0,pcVar5,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar5,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar5,5)" identifier (argument_list "(0,pcVar5,5)" ( number_literal , identifier , number_literal ))))) ;)) comment (expression_statement "as_fatal(pcVar5);" (call_expression "as_fatal(pcVar5)" identifier (argument_list "(pcVar5)" ( identifier ))) ;) })) (expression_statement "first_frag = pfVar6;" (assignment_expression "first_frag = pfVar6" identifier = identifier) ;) (expression_statement "pcVar5 = (char *)first_addr;" (assignment_expression "pcVar5 = (char *)first_addr" identifier = (cast_expression "(char *)first_addr" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) }) while (parenthesized_expression "(slot_frag != pfVar6)" ( (binary_expression "slot_frag != pfVar6" identifier != identifier) )) ;) })) (return_statement "return (((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)) +\n         ((slot_addr >> 4) - (first_addr >> 4)) * 3;" return (binary_expression "(((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)) +\n         ((slot_addr >> 4) - (first_addr >> 4)) * 3" (parenthesized_expression "(((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3))" ( (binary_expression "((ulong)((uint)slot_addr & 3) + lVar4) - (ulong)((uint)first_addr & 3)" (parenthesized_expression "((ulong)((uint)slot_addr & 3) + lVar4)" ( (binary_expression "(ulong)((uint)slot_addr & 3) + lVar4" (call_expression "(ulong)((uint)slot_addr & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)slot_addr & 3)" ( (binary_expression "(uint)slot_addr & 3" (cast_expression "(uint)slot_addr" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) + identifier) )) - (call_expression "(ulong)((uint)first_addr & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)first_addr & 3)" ( (binary_expression "(uint)first_addr & 3" (cast_expression "(uint)first_addr" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) )) + (binary_expression "((slot_addr >> 4) - (first_addr >> 4)) * 3" (parenthesized_expression "((slot_addr >> 4) - (first_addr >> 4))" ( (binary_expression "(slot_addr >> 4) - (first_addr >> 4)" (parenthesized_expression "(slot_addr >> 4)" ( (binary_expression "slot_addr >> 4" identifier >> number_literal) )) - (parenthesized_expression "(first_addr >> 4)" ( (binary_expression "first_addr >> 4" identifier >> number_literal) ))) )) * number_literal)) ;) })))
(translation_unit "long FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}\n\n" (function_definition "long FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)" identifier (parameter_list "(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)" ( (parameter_declaration "ulong param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long *plVar8;" (sized_type_specifier "long" long) (pointer_declarator "*plVar8" * identifier) ;) (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" identifier = number_literal) ;) (if_statement "if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }" if (parenthesized_expression "(param_2 != param_4)" ( (binary_expression "param_2 != param_4" identifier != identifier) )) (compound_statement "{\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }" { (expression_statement "plVar8 = param_4 + 0xd;" (assignment_expression "plVar8 = param_4 + 0xd" identifier = (binary_expression "param_4 + 0xd" identifier + number_literal)) ;) (do_statement "do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);" do (compound_statement "{\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    }" { (if_statement "if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" { (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" identifier = (cast_expression "(long *)param_4[7]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[7]" identifier [ number_literal ]))) ;) (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (if_statement "if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          plVar7 = (long *)0x0;\n        }" { (expression_statement "plVar7 = (long *)0x0;" (assignment_expression "plVar7 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" else (if_statement "if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" if (parenthesized_expression "(*plVar7 != 0)" ( (binary_expression "*plVar7 != 0" (pointer_expression "*plVar7" * identifier) != number_literal) )) (compound_statement "{\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" { (expression_statement "lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" identifier = (binary_expression "lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" identifier + (binary_expression "((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" (parenthesized_expression "((ulong)((*plVar7 - *param_4) - lVar4) >> 4)" ( (binary_expression "(ulong)((*plVar7 - *param_4) - lVar4) >> 4" (call_expression "(ulong)((*plVar7 - *param_4) - lVar4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((*plVar7 - *param_4) - lVar4)" ( (binary_expression "(*plVar7 - *param_4) - lVar4" (parenthesized_expression "(*plVar7 - *param_4)" ( (binary_expression "*plVar7 - *param_4" (pointer_expression "*plVar7" * identifier) - (pointer_expression "*param_4" * identifier)) )) - identifier) ))) >> number_literal) )) * number_literal))) ;) })))) (goto_statement "goto LAB_00136e78;" goto statement_identifier ;) })) (switch_statement "switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" switch (parenthesized_expression "(*(undefined4 *)((long)param_4 + 0x5c))" ( (pointer_expression "*(undefined4 *)((long)param_4 + 0x5c)" * (cast_expression "(undefined4 *)((long)param_4 + 0x5c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_4 + 0x5c)" ( (binary_expression "(long)param_4 + 0x5c" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) )) (compound_statement "{\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" { (case_statement "case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;" case number_literal : (labeled_statement "switchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;" statement_identifier : (expression_statement "lVar5 = lVar5 + (param_4[4] >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + (param_4[4] >> 4) * 3" identifier = (binary_expression "lVar5 + (param_4[4] >> 4) * 3" identifier + (binary_expression "(param_4[4] >> 4) * 3" (parenthesized_expression "(param_4[4] >> 4)" ( (binary_expression "param_4[4] >> 4" (subscript_expression "param_4[4]" identifier [ number_literal ]) >> number_literal) )) * number_literal))) ;))) (case_statement "default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;" default : (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" identifier = (cast_expression "(long *)param_4[7]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[7]" identifier [ number_literal ]))) ;) (break_statement "break;" break ;)) (case_statement "case 2:" case number_literal :) (case_statement "case 3:" case number_literal :) (case_statement "case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;" case number_literal : (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" identifier = (cast_expression "(long *)param_4[7]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[7]" identifier [ number_literal ]))) ;) (expression_statement "lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" identifier = (binary_expression "lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" identifier + (binary_expression "((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" (parenthesized_expression "((1 << ((byte)param_4[4] & 0x1f)) >> 4)" ( (binary_expression "(1 << ((byte)param_4[4] & 0x1f)) >> 4" (parenthesized_expression "(1 << ((byte)param_4[4] & 0x1f))" ( (binary_expression "1 << ((byte)param_4[4] & 0x1f)" number_literal << (parenthesized_expression "((byte)param_4[4] & 0x1f)" ( (binary_expression "(byte)param_4[4] & 0x1f" (cast_expression "(byte)param_4[4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_4[4]" identifier [ number_literal ])) & number_literal) ))) )) >> number_literal) )) * number_literal))) ;) (break_statement "break;" break ;)) (case_statement "case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;" case number_literal : (if_statement "if (param_4[5] == 0) goto switchD_00136ede_caseD_1;" if (parenthesized_expression "(param_4[5] == 0)" ( (binary_expression "param_4[5] == 0" (subscript_expression "param_4[5]" identifier [ number_literal ]) == number_literal) )) (goto_statement "goto switchD_00136ede_caseD_1;" goto statement_identifier ;)) (expression_statement "pcVar6 = "Only constant offsets are supported";" (assignment_expression "pcVar6 = "Only constant offsets are supported"" identifier = (string_literal ""Only constant offsets are supported"" " string_content ")) ;) (goto_statement "goto LAB_00136f85;" goto statement_identifier ;)) (case_statement "case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;" case number_literal : (expression_statement "pcVar6 = "Only constant space allocation is supported";" (assignment_expression "pcVar6 = "Only constant space allocation is supported"" identifier = (string_literal ""Only constant space allocation is supported"" " string_content ")) ;) (goto_statement "goto LAB_00136f85;" goto statement_identifier ;)) })) (labeled_statement "LAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;" statement_identifier : (expression_statement "uVar3 = (ulong)param_3 >> 4;" (assignment_expression "uVar3 = (ulong)param_3 >> 4" identifier = (binary_expression "(ulong)param_3 >> 4" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal)) ;)) (expression_statement "uVar2 = (uint)param_3;" (assignment_expression "uVar2 = (uint)param_3" identifier = (cast_expression "(uint)param_3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_3 = plVar7 + 0xd;" (assignment_expression "param_3 = plVar7 + 0xd" identifier = (binary_expression "plVar7 + 0xd" identifier + number_literal)) ;) (expression_statement "lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;" (assignment_expression "lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5" identifier = (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5" (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3" (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3))" (binary_expression "(lVar4 >> 4) * 3" (parenthesized_expression "(lVar4 >> 4)" ( (binary_expression "lVar4 >> 4" identifier >> number_literal) )) * number_literal) + (parenthesized_expression "((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3))" ( (binary_expression "(ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)" (call_expression "(ulong)((uint)plVar8 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)plVar8 & 3)" ( (binary_expression "(uint)plVar8 & 3" (cast_expression "(uint)plVar8" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) - (call_expression "(ulong)(uVar2 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 & 3)" ( (binary_expression "uVar2 & 3" identifier & number_literal) )))) ))) + (binary_expression "(uVar3 - ((ulong)plVar8 >> 4)) * -3" (parenthesized_expression "(uVar3 - ((ulong)plVar8 >> 4))" ( (binary_expression "uVar3 - ((ulong)plVar8 >> 4)" identifier - (parenthesized_expression "((ulong)plVar8 >> 4)" ( (binary_expression "(ulong)plVar8 >> 4" (cast_expression "(ulong)plVar8" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) )) * number_literal)) + identifier)) ;) (if_statement "if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }" { (expression_statement "pcVar6 = "Section switching in code is not supported.";" (assignment_expression "pcVar6 = "Section switching in code is not supported."" identifier = (string_literal ""Section switching in code is not supported."" " string_content ")) ;) (labeled_statement "LAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);" statement_identifier : (expression_statement "uVar1 = dcgettext(0,pcVar6,5);" (assignment_expression "uVar1 = dcgettext(0,pcVar6,5)" identifier = (call_expression "dcgettext(0,pcVar6,5)" identifier (argument_list "(0,pcVar6,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "FUN_0011c340(uVar1);" (call_expression "FUN_0011c340(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) })) (expression_statement "param_4 = plVar7;" (assignment_expression "param_4 = plVar7" identifier = identifier) ;) (expression_statement "plVar8 = param_3;" (assignment_expression "plVar8 = param_3" identifier = identifier) ;) }) while (parenthesized_expression "(param_2 != plVar7)" ( (binary_expression "param_2 != plVar7" identifier != identifier) )) ;) })) (return_statement "return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;" return (binary_expression "(((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3" (parenthesized_expression "(((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3))" ( (binary_expression "((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)" (parenthesized_expression "((ulong)((uint)param_1 & 3) + lVar5)" ( (binary_expression "(ulong)((uint)param_1 & 3) + lVar5" (call_expression "(ulong)((uint)param_1 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)param_1 & 3)" ( (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) + identifier) )) - (call_expression "(ulong)((uint)param_3 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)param_3 & 3)" ( (binary_expression "(uint)param_3 & 3" (cast_expression "(uint)param_3" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) )) + (binary_expression "((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3" (parenthesized_expression "((param_1 >> 4) - ((ulong)param_3 >> 4))" ( (binary_expression "(param_1 >> 4) - ((ulong)param_3 >> 4)" (parenthesized_expression "(param_1 >> 4)" ( (binary_expression "param_1 >> 4" identifier >> number_literal) )) - (parenthesized_expression "((ulong)param_3 >> 4)" ( (binary_expression "(ulong)param_3 >> 4" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) )) * number_literal)) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) - (pointer_expression * IDENT)) )) - IDENT) ))) >> LIT) )) * LIT))) ;) })))) (goto_statement goto statement_identifier ;) })) (switch_statement switch (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) )) (compound_statement { (case_statement case LIT : (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) >> LIT) )) * LIT))) ;))) (case_statement default : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (break_statement break ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) & LIT) ))) )) >> LIT) )) * LIT))) ;) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (goto_statement goto statement_identifier ;)) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) * LIT) + (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) )))) ))) + (binary_expression (parenthesized_expression ( (binary_expression IDENT - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) )) * LIT)) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT )))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (return_statement return (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) + IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) )) + (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) )) * LIT)) ;) })))
(function_definition "long FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)\n\n{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00136e10(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)" (identifier "FUN_00136e10") (parameter_list "(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)" (( "(") (parameter_declaration "ulong param_1" (type_identifier "ulong") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long *param_3" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  uint uVar2;\n  ulong uVar3;\n  long lVar4;\n  long lVar5;\n  char *pcVar6;\n  long *plVar7;\n  long *plVar8;\n  \n  lVar5 = 0;\n  if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }\n  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "long *plVar8;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar8" (* "*") (identifier "plVar8")) (; ";")) (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" (identifier "lVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_2 != param_4) {\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }" (if "if") (parenthesized_expression "(param_2 != param_4)" (( "(") (binary_expression "param_2 != param_4" (identifier "param_2") (!= "!=") (identifier "param_4")) () ")")) (compound_statement "{\n    plVar8 = param_4 + 0xd;\n    do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);\n  }" ({ "{") (expression_statement "plVar8 = param_4 + 0xd;" (assignment_expression "plVar8 = param_4 + 0xd" (identifier "plVar8") (= "=") (binary_expression "param_4 + 0xd" (identifier "param_4") (+ "+") (number_literal "0xd"))) (; ";")) (do_statement "do {\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    } while (param_2 != plVar7);" (do "do") (compound_statement "{\n      if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }\n      switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }\nLAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;\n      uVar2 = (uint)param_3;\n      param_3 = plVar7 + 0xd;\n      lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;\n      if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }\n      param_4 = plVar7;\n      plVar8 = param_3;\n    }" ({ "{") (if_statement "if (param_5 == 0) {\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        plVar7 = (long *)param_4[7];\n        lVar4 = param_4[2];\n        if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }\n        goto LAB_00136e78;\n      }" ({ "{") (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" (identifier "plVar7") (= "=") (cast_expression "(long *)param_4[7]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_4[7]" (identifier "param_4") ([ "[") (number_literal "7") (] "]")))) (; ";")) (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" (identifier "lVar4") (= "=") (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (plVar7 == (long *)0x0) {\n          plVar7 = (long *)0x0;\n        }\n        else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" (if "if") (parenthesized_expression "(plVar7 == (long *)0x0)" (( "(") (binary_expression "plVar7 == (long *)0x0" (identifier "plVar7") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          plVar7 = (long *)0x0;\n        }" ({ "{") (expression_statement "plVar7 = (long *)0x0;" (assignment_expression "plVar7 = (long *)0x0" (identifier "plVar7") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" (else "else") (if_statement "if (*plVar7 != 0) {\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" (if "if") (parenthesized_expression "(*plVar7 != 0)" (( "(") (binary_expression "*plVar7 != 0" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;\n        }" ({ "{") (expression_statement "lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" (identifier "lVar5") (= "=") (binary_expression "lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" (identifier "lVar5") (+ "+") (binary_expression "((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3" (parenthesized_expression "((ulong)((*plVar7 - *param_4) - lVar4) >> 4)" (( "(") (binary_expression "(ulong)((*plVar7 - *param_4) - lVar4) >> 4" (call_expression "(ulong)((*plVar7 - *param_4) - lVar4)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((*plVar7 - *param_4) - lVar4)" (( "(") (binary_expression "(*plVar7 - *param_4) - lVar4" (parenthesized_expression "(*plVar7 - *param_4)" (( "(") (binary_expression "*plVar7 - *param_4" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (- "-") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) () ")")) (- "-") (identifier "lVar4")) () ")"))) (>> ">>") (number_literal "4")) () ")")) (* "*") (number_literal "3")))) (; ";")) (} "}"))))) (goto_statement "goto LAB_00136e78;" (goto "goto") (statement_identifier "LAB_00136e78") (; ";")) (} "}"))) (switch_statement "switch(*(undefined4 *)((long)param_4 + 0x5c)) {\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" (switch "switch") (parenthesized_expression "(*(undefined4 *)((long)param_4 + 0x5c))" (( "(") (pointer_expression "*(undefined4 *)((long)param_4 + 0x5c)" (* "*") (cast_expression "(undefined4 *)((long)param_4 + 0x5c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_4 + 0x5c)" (( "(") (binary_expression "(long)param_4 + 0x5c" (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")) (+ "+") (number_literal "0x5c")) () ")")))) () ")")) (compound_statement "{\n      case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;\n      default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;\n      case 2:\n      case 3:\n      case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;\n      case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;\n      case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;\n      }" ({ "{") (case_statement "case 1:\nswitchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;" (case "case") (number_literal "1") (: ":") (labeled_statement "switchD_00136ede_caseD_1:\n        lVar5 = lVar5 + (param_4[4] >> 4) * 3;" (statement_identifier "switchD_00136ede_caseD_1") (: ":") (expression_statement "lVar5 = lVar5 + (param_4[4] >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + (param_4[4] >> 4) * 3" (identifier "lVar5") (= "=") (binary_expression "lVar5 + (param_4[4] >> 4) * 3" (identifier "lVar5") (+ "+") (binary_expression "(param_4[4] >> 4) * 3" (parenthesized_expression "(param_4[4] >> 4)" (( "(") (binary_expression "param_4[4] >> 4" (subscript_expression "param_4[4]" (identifier "param_4") ([ "[") (number_literal "4") (] "]")) (>> ">>") (number_literal "4")) () ")")) (* "*") (number_literal "3")))) (; ";")))) (case_statement "default:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        break;" (default "default") (: ":") (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" (identifier "lVar4") (= "=") (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" (identifier "plVar7") (= "=") (cast_expression "(long *)param_4[7]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_4[7]" (identifier "param_4") ([ "[") (number_literal "7") (] "]")))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 2:" (case "case") (number_literal "2") (: ":")) (case_statement "case 3:" (case "case") (number_literal "3") (: ":")) (case_statement "case 4:\n        lVar4 = param_4[2];\n        plVar7 = (long *)param_4[7];\n        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;\n        break;" (case "case") (number_literal "4") (: ":") (expression_statement "lVar4 = param_4[2];" (assignment_expression "lVar4 = param_4[2]" (identifier "lVar4") (= "=") (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "plVar7 = (long *)param_4[7];" (assignment_expression "plVar7 = (long *)param_4[7]" (identifier "plVar7") (= "=") (cast_expression "(long *)param_4[7]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_4[7]" (identifier "param_4") ([ "[") (number_literal "7") (] "]")))) (; ";")) (expression_statement "lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;" (assignment_expression "lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" (identifier "lVar5") (= "=") (binary_expression "lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" (identifier "lVar5") (+ "+") (binary_expression "((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3" (parenthesized_expression "((1 << ((byte)param_4[4] & 0x1f)) >> 4)" (( "(") (binary_expression "(1 << ((byte)param_4[4] & 0x1f)) >> 4" (parenthesized_expression "(1 << ((byte)param_4[4] & 0x1f))" (( "(") (binary_expression "1 << ((byte)param_4[4] & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "((byte)param_4[4] & 0x1f)" (( "(") (binary_expression "(byte)param_4[4] & 0x1f" (cast_expression "(byte)param_4[4]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_4[4]" (identifier "param_4") ([ "[") (number_literal "4") (] "]"))) (& "&") (number_literal "0x1f")) () ")"))) () ")")) (>> ">>") (number_literal "4")) () ")")) (* "*") (number_literal "3")))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 5:\n        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;\n        pcVar6 = "Only constant offsets are supported";\n        goto LAB_00136f85;" (case "case") (number_literal "5") (: ":") (if_statement "if (param_4[5] == 0) goto switchD_00136ede_caseD_1;" (if "if") (parenthesized_expression "(param_4[5] == 0)" (( "(") (binary_expression "param_4[5] == 0" (subscript_expression "param_4[5]" (identifier "param_4") ([ "[") (number_literal "5") (] "]")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto switchD_00136ede_caseD_1;" (goto "goto") (statement_identifier "switchD_00136ede_caseD_1") (; ";"))) (expression_statement "pcVar6 = "Only constant offsets are supported";" (assignment_expression "pcVar6 = "Only constant offsets are supported"" (identifier "pcVar6") (= "=") (string_literal ""Only constant offsets are supported"" (" """) (string_content "Only constant offsets are supported") (" """))) (; ";")) (goto_statement "goto LAB_00136f85;" (goto "goto") (statement_identifier "LAB_00136f85") (; ";"))) (case_statement "case 8:\n        pcVar6 = "Only constant space allocation is supported";\n        goto LAB_00136f85;" (case "case") (number_literal "8") (: ":") (expression_statement "pcVar6 = "Only constant space allocation is supported";" (assignment_expression "pcVar6 = "Only constant space allocation is supported"" (identifier "pcVar6") (= "=") (string_literal ""Only constant space allocation is supported"" (" """) (string_content "Only constant space allocation is supported") (" """))) (; ";")) (goto_statement "goto LAB_00136f85;" (goto "goto") (statement_identifier "LAB_00136f85") (; ";"))) (} "}"))) (labeled_statement "LAB_00136e78:\n      uVar3 = (ulong)param_3 >> 4;" (statement_identifier "LAB_00136e78") (: ":") (expression_statement "uVar3 = (ulong)param_3 >> 4;" (assignment_expression "uVar3 = (ulong)param_3 >> 4" (identifier "uVar3") (= "=") (binary_expression "(ulong)param_3 >> 4" (cast_expression "(ulong)param_3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_3")) (>> ">>") (number_literal "4"))) (; ";"))) (expression_statement "uVar2 = (uint)param_3;" (assignment_expression "uVar2 = (uint)param_3" (identifier "uVar2") (= "=") (cast_expression "(uint)param_3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_3"))) (; ";")) (expression_statement "param_3 = plVar7 + 0xd;" (assignment_expression "param_3 = plVar7 + 0xd" (identifier "param_3") (= "=") (binary_expression "plVar7 + 0xd" (identifier "plVar7") (+ "+") (number_literal "0xd"))) (; ";")) (expression_statement "lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5;" (assignment_expression "lVar5 = (lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5" (identifier "lVar5") (= "=") (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3\n              + lVar5" (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3" (binary_expression "(lVar4 >> 4) * 3 +\n              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3))" (binary_expression "(lVar4 >> 4) * 3" (parenthesized_expression "(lVar4 >> 4)" (( "(") (binary_expression "lVar4 >> 4" (identifier "lVar4") (>> ">>") (number_literal "4")) () ")")) (* "*") (number_literal "3")) (+ "+") (parenthesized_expression "((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3))" (( "(") (binary_expression "(ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)" (call_expression "(ulong)((uint)plVar8 & 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)plVar8 & 3)" (( "(") (binary_expression "(uint)plVar8 & 3" (cast_expression "(uint)plVar8" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "plVar8")) (& "&") (number_literal "3")) () ")"))) (- "-") (call_expression "(ulong)(uVar2 & 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar2 & 3)" (( "(") (binary_expression "uVar2 & 3" (identifier "uVar2") (& "&") (number_literal "3")) () ")")))) () ")"))) (+ "+") (binary_expression "(uVar3 - ((ulong)plVar8 >> 4)) * -3" (parenthesized_expression "(uVar3 - ((ulong)plVar8 >> 4))" (( "(") (binary_expression "uVar3 - ((ulong)plVar8 >> 4)" (identifier "uVar3") (- "-") (parenthesized_expression "((ulong)plVar8 >> 4)" (( "(") (binary_expression "(ulong)plVar8 >> 4" (cast_expression "(ulong)plVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "plVar8")) (>> ">>") (number_literal "4")) () ")"))) () ")")) (* "*") (number_literal "-3"))) (+ "+") (identifier "lVar5"))) (; ";")) (if_statement "if (plVar7 == (long *)0x0) {\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }" (if "if") (parenthesized_expression "(plVar7 == (long *)0x0)" (( "(") (binary_expression "plVar7 == (long *)0x0" (identifier "plVar7") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pcVar6 = "Section switching in code is not supported.";\nLAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);\n                    \n        FUN_0011c340(uVar1);\n      }" ({ "{") (expression_statement "pcVar6 = "Section switching in code is not supported.";" (assignment_expression "pcVar6 = "Section switching in code is not supported."" (identifier "pcVar6") (= "=") (string_literal ""Section switching in code is not supported."" (" """) (string_content "Section switching in code is not supported.") (" """))) (; ";")) (labeled_statement "LAB_00136f85:\n        uVar1 = dcgettext(0,pcVar6,5);" (statement_identifier "LAB_00136f85") (: ":") (expression_statement "uVar1 = dcgettext(0,pcVar6,5);" (assignment_expression "uVar1 = dcgettext(0,pcVar6,5)" (identifier "uVar1") (= "=") (call_expression "dcgettext(0,pcVar6,5)" (identifier "dcgettext") (argument_list "(0,pcVar6,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar6") (, ",") (number_literal "5") () ")")))) (; ";"))) (expression_statement "FUN_0011c340(uVar1);" (call_expression "FUN_0011c340(uVar1)" (identifier "FUN_0011c340") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (} "}"))) (expression_statement "param_4 = plVar7;" (assignment_expression "param_4 = plVar7" (identifier "param_4") (= "=") (identifier "plVar7")) (; ";")) (expression_statement "plVar8 = param_3;" (assignment_expression "plVar8 = param_3" (identifier "plVar8") (= "=") (identifier "param_3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != plVar7)" (( "(") (binary_expression "param_2 != plVar7" (identifier "param_2") (!= "!=") (identifier "plVar7")) () ")")) (; ";")) (} "}"))) (return_statement "return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;" (return "return") (binary_expression "(((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +\n         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3" (parenthesized_expression "(((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3))" (( "(") (binary_expression "((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)" (parenthesized_expression "((ulong)((uint)param_1 & 3) + lVar5)" (( "(") (binary_expression "(ulong)((uint)param_1 & 3) + lVar5" (call_expression "(ulong)((uint)param_1 & 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)param_1 & 3)" (( "(") (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_1")) (& "&") (number_literal "3")) () ")"))) (+ "+") (identifier "lVar5")) () ")")) (- "-") (call_expression "(ulong)((uint)param_3 & 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)param_3 & 3)" (( "(") (binary_expression "(uint)param_3 & 3" (cast_expression "(uint)param_3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_3")) (& "&") (number_literal "3")) () ")")))) () ")")) (+ "+") (binary_expression "((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3" (parenthesized_expression "((param_1 >> 4) - ((ulong)param_3 >> 4))" (( "(") (binary_expression "(param_1 >> 4) - ((ulong)param_3 >> 4)" (parenthesized_expression "(param_1 >> 4)" (( "(") (binary_expression "param_1 >> 4" (identifier "param_1") (>> ">>") (number_literal "4")) () ")")) (- "-") (parenthesized_expression "((ulong)param_3 >> 4)" (( "(") (binary_expression "(ulong)param_3 >> 4" (cast_expression "(ulong)param_3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_3")) (>> ">>") (number_literal "4")) () ")"))) () ")")) (* "*") (number_literal "3"))) (; ";")) (} "}")))

type_1 function_1(type_1 var_12,type_2 *var_1,type_1 var_7,type_2 *var_2,
                int var_3)

{
  type_3 var_8;
  type_1 var_9;
  type_4 var_6;
  long var_5;
  char *pcVar5;
  type_5 *var_4;
  
  var_5 = 0;
  if (var_1 != var_2) {
    pcVar5 = var_2->fr_literal;
    do {
      if (var_3 == 0) {
        var_4 = var_2->fr_next;
        var_6 = var_2->fr_fix;
        if (var_4 == (type_5 *)0x0) {
          var_4 = (type_5 *)0x0;
        }
        else if (var_4->fr_address != 0) {
          var_5 = var_5 + ((var_4->fr_address - var_2->fr_address) - var_6 >> 4) * 3;
        }
        goto LAB_00136e78;
      }
      switch(var_2->fr_type) {
      case rs_fill:
switchD_00136ede_caseD_1:
        var_5 = var_5 + (var_2->fr_offset >> 4) * 3;
      default:
        var_6 = var_2->fr_fix;
        var_4 = var_2->fr_next;
        break;
      case rs_align:
      case rs_align_code:
      case rs_align_test:
        var_6 = var_2->fr_fix;
        var_4 = var_2->fr_next;
        var_5 = var_5 + ((1 << ((type_6)var_2->fr_offset & 0x1f)) >> 4) * 3;
        break;
      case rs_org:
        if (var_2->fr_symbol == (type_7 *)0x0) goto switchD_00136ede_caseD_1;
        pcVar5 = "Only constant offsets are supported";
        goto LAB_00136f85;
      case rs_space:
        pcVar5 = "Only constant space allocation is supported";
        goto LAB_00136f85;
      }
LAB_00136e78:
      var_9 = var_7 >> 4;
      var_8 = (type_3)var_7;
      var_7 = (type_1)var_4->fr_literal;
      var_5 = (var_6 >> 4) * 3 +
              ((type_1)((type_3)pcVar5 & 3) - (type_1)(var_8 & 3)) + (var_9 - ((type_1)pcVar5 >> 4)) * -3
              + var_5;
      if (var_4 == (type_5 *)0x0) {
        pcVar5 = "Section switching in code is not supported.";
LAB_00136f85:
        pcVar5 = (char *)var_10(0,pcVar5,5);
                    /* WARNING: Subroutine does not return */
        var_11(pcVar5);
      }
      var_2 = var_4;
      pcVar5 = (char *)var_7;
    } while (var_1 != var_4);
  }
  return (((type_1)((type_3)var_12 & 3) + var_5) - (type_1)((type_3)var_7 & 3)) +
         ((var_12 >> 4) - (var_7 >> 4)) * 3;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) right: (identifier)))) right: (number_literal))) right: (number_literal))))))))) (goto_statement label: (statement_identifier)))) (switch_statement condition: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) body: (compound_statement (case_statement value: (number_literal) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))))))) (case_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (break_statement)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))))) right: (number_literal))) right: (number_literal))))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (goto_statement label: (statement_identifier))) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (goto_statement label: (statement_identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (return_statement (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (identifier))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))) right: (number_literal)))))))

long MASKED(ulong param_1,long *param_2,long *param_3,long *param_4,int param_5)

{
  undefined8 uVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  long lVar5;
  char *pcVar6;
  long *plVar7;
  long *plVar8;
  
  lVar5 = 0;
  if (param_2 != param_4) {
    plVar8 = param_4 + 0xd;
    do {
      if (param_5 == 0) {
        plVar7 = (long *)param_4[7];
        lVar4 = param_4[2];
        if (plVar7 == (long *)0x0) {
          plVar7 = (long *)0x0;
        }
        else if (*plVar7 != 0) {
          lVar5 = lVar5 + ((ulong)((*plVar7 - *param_4) - lVar4) >> 4) * 3;
        }
        goto LAB_00136e78;
      }
      switch(*(undefined4 *)((long)param_4 + 0x5c)) {
      case 1:
switchD_00136ede_caseD_1:
        lVar5 = lVar5 + (param_4[4] >> 4) * 3;
      default:
        lVar4 = param_4[2];
        plVar7 = (long *)param_4[7];
        break;
      case 2:
      case 3:
      case 4:
        lVar4 = param_4[2];
        plVar7 = (long *)param_4[7];
        lVar5 = lVar5 + ((1 << ((byte)param_4[4] & 0x1f)) >> 4) * 3;
        break;
      case 5:
        if (param_4[5] == 0) goto switchD_00136ede_caseD_1;
        pcVar6 = "Only constant offsets are supported";
        goto LAB_00136f85;
      case 8:
        pcVar6 = "Only constant space allocation is supported";
        goto LAB_00136f85;
      }
LAB_00136e78:
      uVar3 = (ulong)param_3 >> 4;
      uVar2 = (uint)param_3;
      param_3 = plVar7 + 0xd;
      lVar5 = (lVar4 >> 4) * 3 +
              ((ulong)((uint)plVar8 & 3) - (ulong)(uVar2 & 3)) + (uVar3 - ((ulong)plVar8 >> 4)) * -3
              + lVar5;
      if (plVar7 == (long *)0x0) {
        pcVar6 = "Section switching in code is not supported.";
LAB_00136f85:
        uVar1 = dcgettext(0,pcVar6,5);
                    /* WARNING: Subroutine does not return */
        FUN_0011c340(uVar1);
      }
      param_4 = plVar7;
      plVar8 = param_3;
    } while (param_2 != plVar7);
  }
  return (((ulong)((uint)param_1 & 3) + lVar5) - (ulong)((uint)param_3 & 3)) +
         ((param_1 >> 4) - ((ulong)param_3 >> 4)) * 3;
}

