void FUN_00402620(int param_1,uint param_2,int param_3)

{
  int iVar1;
  uint *puVar2;
  uint *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  
  uVar4 = param_2;
  if ((int)param_2 < 0) {
    uVar4 = param_2 + 0x1f;
  }
  uVar5 = param_2 & 0x8000001f;
  puVar2 = (uint *)(param_1 + ((int)uVar4 >> 5) * 4);
  if ((int)uVar5 < 0) {
    uVar5 = (uVar5 - 1 | 0xffffffe0) + 1;
  }
  uVar6 = (param_3 + uVar5) - 0x20;
  uVar4 = -1 << (uVar5 & 0x1f);
  iVar1 = param_3;
  if (-1 < (int)uVar6) {
    uVar5 = *puVar2;
    puVar3 = puVar2 + (uVar6 >> 5) + 1;
    while( true ) {
      *puVar2 = ~uVar4 & uVar5;
      puVar2 = puVar2 + 1;
      uVar4 = 0xffffffff;
      if (puVar2 == puVar3) break;
      uVar5 = *puVar2;
    }
    uVar4 = 0xffffffff;
    iVar1 = uVar6 + (uVar6 >> 5) * -0x20;
  }
  if (iVar1 != 0) {
    if ((param_3 + param_2 & 0x1f) == 0) {
      *puVar2 = *puVar2 & ~uVar4;
      return;
    }
    *puVar2 = *puVar2 & ~((1 << (param_3 + param_2 & 0x1f)) - 1U & uVar4);
  }
  return;
}