void FUN_00401d70(char *param_1,int param_2,short *param_3)

{
  float *pfVar1;
  float *pfVar2;
  int iVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  byte in_fcsr;
  float local_130 [64];
  
  pfVar1 = local_130;
  do {
    *pfVar1 = (float)(int)*param_1;
    pfVar1 = pfVar1 + 1;
    param_1 = param_1 + 1;
  } while (pfVar1 != (float *)&stack0xffffffd0);
  pfVar2 = local_130;
  do {
    fVar9 = *pfVar2 - pfVar2[7];
    fVar11 = pfVar2[1] - pfVar2[6];
    fVar4 = pfVar2[2] - pfVar2[5];
    fVar13 = pfVar2[2] + pfVar2[5];
    fVar10 = pfVar2[3] + pfVar2[4];
    fVar6 = fVar11 + fVar9;
    fVar7 = *pfVar2 + pfVar2[7];
    fVar5 = (pfVar2[3] - pfVar2[4]) + fVar4;
    fVar8 = pfVar2[1] + pfVar2[6];
    fVar12 = fVar7 - fVar10;
    fVar4 = (fVar4 + fVar11) * 0.70710677;
    fVar11 = (fVar5 - fVar6) * 0.38268343;
    fVar7 = fVar7 + fVar10;
    fVar10 = fVar8 + fVar13;
    fVar8 = ((fVar8 - fVar13) + fVar12) * 0.70710677;
    fVar13 = fVar9 - fVar4;
    fVar5 = fVar5 * 0.5411961 + fVar11;
    fVar9 = fVar9 + fVar4;
    fVar11 = fVar6 * 1.306563 + fVar11;
    *pfVar2 = fVar7 + fVar10;
    pfVar2[4] = fVar7 - fVar10;
    pfVar2[2] = fVar12 + fVar8;
    pfVar2[6] = fVar12 - fVar8;
    pfVar2[5] = fVar13 + fVar5;
    pfVar2[3] = fVar13 - fVar5;
    pfVar2[1] = fVar9 + fVar11;
    pfVar2[7] = fVar9 - fVar11;
    pfVar2 = pfVar2 + 8;
  } while (pfVar2 != pfVar1);
  pfVar1 = local_130;
  do {
    fVar9 = *pfVar1 - pfVar1[0x38];
    fVar11 = pfVar1[8] - pfVar1[0x30];
    fVar4 = pfVar1[0x10] - pfVar1[0x28];
    fVar13 = pfVar1[0x10] + pfVar1[0x28];
    fVar10 = pfVar1[0x18] + pfVar1[0x20];
    fVar6 = fVar11 + fVar9;
    fVar7 = *pfVar1 + pfVar1[0x38];
    fVar5 = (pfVar1[0x18] - pfVar1[0x20]) + fVar4;
    fVar8 = pfVar1[8] + pfVar1[0x30];
    fVar12 = fVar7 - fVar10;
    fVar4 = (fVar4 + fVar11) * 0.70710677;
    fVar11 = (fVar5 - fVar6) * 0.38268343;
    fVar7 = fVar7 + fVar10;
    fVar10 = fVar8 + fVar13;
    fVar8 = ((fVar8 - fVar13) + fVar12) * 0.70710677;
    fVar13 = fVar9 - fVar4;
    fVar5 = fVar5 * 0.5411961 + fVar11;
    fVar9 = fVar9 + fVar4;
    fVar11 = fVar6 * 1.306563 + fVar11;
    *pfVar1 = fVar7 + fVar10;
    pfVar1[0x20] = fVar7 - fVar10;
    pfVar1[0x10] = fVar12 + fVar8;
    pfVar1[0x30] = fVar12 - fVar8;
    pfVar1[0x28] = fVar13 + fVar5;
    pfVar1[0x18] = fVar13 - fVar5;
    pfVar1[8] = fVar9 + fVar11;
    pfVar1[0x38] = fVar9 - fVar11;
    pfVar1 = pfVar1 + 1;
  } while (pfVar1 != local_130 + 8);
  iVar3 = 0;
  do {
    pfVar1 = (float *)((int)local_130 + iVar3);
    pfVar2 = (float *)(param_2 + iVar3);
    iVar3 = iVar3 + 4;
    fVar4 = *pfVar1 * *pfVar2 + 16384.5;
    if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
      fVar4 = ROUND(fVar4);
    }
    else {
      fVar4 = FLOOR(fVar4);
    }
    *param_3 = (short)(int)fVar4 + -0x4000;
    param_3 = param_3 + 1;
  } while (iVar3 != 0x100);
  return;
}