/* WARNING: Removing unreachable block (ram,0x0048784c) */
/* WARNING: Removing unreachable block (ram,0x00487800) */
/* WARNING: Removing unreachable block (ram,0x00487894) */
/* WARNING: Heritage AFTER dead removal. Example location: r0x004c2254 : 0x00487680 */
/* WARNING: Restarted to delay deadcode elimination for space: ram */

undefined4
FUN_004875e0(code *param_1,int param_2,undefined4 *param_3,code *param_4,undefined4 param_5,
            undefined4 param_6,undefined4 param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined4 *puVar4;
  undefined4 uVar5;
  uint *puVar6;
  code *pcVar7;
  code *pcVar8;
  undefined1 auStack_98 [52];
  int local_64;
  int local_3c;
  int local_34;
  int local_2c;
  int local_24;
  
  DAT_004c2250 = param_7;
  DAT_004c2254 = param_3 + param_2 + 1;
  DAT_004c2260 = param_6;
  if (DAT_004c2254 == (uint *)*param_3) {
    DAT_004c2254 = param_3 + param_2;
  }
  pcVar7 = param_4;
  FUN_00483cc0(auStack_98,0,0x78);
  puVar6 = DAT_004c2254;
  do {
    uVar1 = *puVar6;
    puVar6 = puVar6 + 1;
  } while (uVar1 != 0);
  while( true ) {
    uVar1 = *puVar6;
    if (uVar1 == 0) break;
    if (uVar1 < 0xf) {
      FUN_00483c90(auStack_98 + uVar1 * 8,puVar6,8);
      puVar6 = puVar6 + 2;
    }
    else {
      puVar6 = puVar6 + 2;
    }
  }
  FUN_0048ae10(auStack_98);
  FUN_00487570();
  if (local_64 == 0) {
    local_64 = 0x1000;
  }
  DAT_004c2258 = local_64;
  if (local_3c == -1) {
    iVar2 = FUN_0047ee70();
    iVar3 = FUN_00487d00();
    if (iVar2 == iVar3) {
      iVar2 = FUN_00487d60();
      iVar3 = FUN_00487ca0();
      if (iVar2 == iVar3) goto LAB_0048776c;
    }
LAB_00487794:
    FUN_004874f4(0,0x20000);
    FUN_004874f4(1,0x20002);
    FUN_004874f4(2,0x20002);
  }
  else {
LAB_0048776c:
    if (local_3c != -1) {
      if ((local_3c == local_34) && (local_2c == local_24)) {
        PTR_s__004b7830 = (undefined *)*param_3;
        goto LAB_004877d4;
      }
      goto LAB_00487794;
    }
  }
  PTR_s__004b7830 = (undefined *)*param_3;
LAB_004877d4:
  DAT_004c225c = param_5;
  if (param_4 != (code *)0x0) {
    (*param_4)();
  }
  puVar4 = (undefined4 *)FUN_0047f6f0();
  *puVar4 = 0;
  uVar5 = (*param_1)(param_2,param_3,DAT_004c2254);
  pcVar8 = FUN_00486450;
  FUN_00486450(uVar5);
  uVar5 = 0xffa;
  syscall(0)   //possible issue identified - semgrep
  if (pcVar7 != (code *)0x0) {
    puVar4 = (undefined4 *)(**(code **)(pcVar8 + 0x302bc))();
    *puVar4 = 0xffa;
    uVar5 = 0xffffffff;
  }
  return uVar5;
}