notes: twiddle = 1024-entry sin table with stride sampling

This commit is contained in:
2026-08-16 23:38:16 +03:00
parent 0d16c5f4b9
commit 00d8623b92
4 changed files with 361 additions and 48 deletions
+353 -46
View File
@@ -1,61 +1,368 @@
############ FUN_ 18000c080 size=507 ############ ############ FUN_ 180039b00 size=1939 ############
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined8 FUN_18000bfc0(longlong param_1,longlong param_2,longlong param_3,int param_4) longlong FUN_180039b00(uint param_1,ulonglong param_2)
{ {
undefined1 *puVar1; double *pdVar1;
undefined1 *puVar2; ulonglong *puVar2;
ulonglong uVar3; undefined8 *puVar3;
undefined1 auStack_498 [32]; bool bVar4;
undefined1 local_470 [512]; bool bVar5;
undefined1 auStack_270 [576]; bool bVar6;
ulonglong local_30; uint uVar7;
uint uVar8;
ulonglong uVar9;
uint uVar10;
int iVar11;
longlong lVar12;
uint uVar13;
ulonglong uVar14;
ulonglong uVar15;
uint uVar16;
longlong lVar17;
longlong lVar18;
ulonglong uVar19;
longlong lVar20;
int iVar21;
ulonglong uVar22;
undefined1 auVar23 [16];
undefined1 auVar24 [16];
undefined1 auVar25 [16];
undefined1 auVar26 [16];
undefined1 auVar27 [16];
undefined1 auVar28 [16];
undefined1 auVar29 [32];
undefined1 auVar30 [32];
undefined1 auVar31 [32];
undefined1 auVar32 [32];
undefined1 auVar33 [32];
double dVar34;
undefined1 auVar35 [16];
double dVar36;
local_30 = DAT_182615970 ^ (ulonglong)auStack_498; iVar11 = 1 << (param_1 & 0x1f);
if (((param_3 == 0) || (param_1 == 0)) || (param_2 == 0)) { uVar10 = (int)(((uint)(iVar11 >> 1) >> 0x1e) + iVar11) >> 2;
if ((local_30 ^ (ulonglong)auStack_498) == DAT_182615970) { if ((int)param_1 < 0xb) {
return 0xfffffff8; if ((int)uVar10 < 1) {
lVar12 = (longlong)(int)uVar10 * 8;
}
else {
if ((int)uVar10 < 7) {
lVar12 = (longlong)(int)uVar10 * 8;
goto LAB_180039ce5;
}
iVar11 = 1 << (10 - param_1 & 0x1f);
lVar18 = (longlong)iVar11;
lVar17 = (longlong)(int)uVar10;
if (iVar11 * 8 < 1) {
LAB_180039cdd:
lVar12 = lVar17 * 8;
}
else if (param_2 < 0x182616800) {
lVar12 = lVar17 * 8;
if (lVar12 <= (longlong)((longlong)&DAT_182616800 - param_2)) {
LAB_180039bbf:
lVar12 = lVar17 * 8;
if ((int)uVar10 < 0xb) {
uVar14 = 0;
uVar16 = uVar10 & 0xfffffffe;
LAB_180039c37:
lVar17 = uVar14 * lVar18;
do {
puVar2 = &DAT_182616800 + lVar17;
auVar35._8_8_ = 0;
auVar35._0_8_ = *puVar2;
lVar17 = lVar17 + lVar18 * 2;
auVar35 = vmovhpd_avx(auVar35,puVar2[lVar18]);
*(undefined1 (*) [16])(param_2 + uVar14 * 8) = auVar35;
uVar14 = uVar14 + 2;
} while (uVar14 < (ulonglong)(longlong)(int)uVar16);
}
else {
uVar14 = param_2 & 0xf;
if ((param_2 & 7) == 0) {
if ((int)uVar14 != 0) {
uVar14 = 1;
}
}
else {
uVar14 = 0;
}
iVar21 = (int)uVar14;
if (iVar21 + 2 <= (int)uVar10) {
uVar19 = 0;
uVar16 = uVar10 - (uVar10 - iVar21 & 1);
if (iVar21 != 0) {
lVar17 = 0;
do {
puVar3 = &DAT_182616800 + lVar17;
lVar17 = lVar17 + lVar18;
*(undefined8 *)(param_2 + uVar19 * 8) = *puVar3;
uVar19 = uVar19 + 1;
} while (uVar19 < uVar14);
}
goto LAB_180039c37;
}
uVar16 = 0;
}
uVar7 = 0;
lVar17 = 0;
if (uVar16 + 1 <= uVar10) {
lVar20 = (longlong)(int)(iVar11 * uVar16);
do {
uVar7 = uVar7 + 1;
*(undefined8 *)(param_2 + (longlong)(int)uVar16 * 8 + lVar17 * 8) =
(&DAT_182616800)[lVar20];
lVar20 = lVar20 + lVar18;
lVar17 = lVar17 + 1;
} while (uVar7 < uVar10 - uVar16);
}
goto LAB_180039db6;
}
}
else {
if (param_2 < 0x182616801) goto LAB_180039cdd;
lVar12 = lVar17 * 8;
if ((lVar17 + -1) * (longlong)(iVar11 * 8) + 8 <= (longlong)(param_2 - 0x182616800))
goto LAB_180039bbf;
}
LAB_180039ce5:
iVar11 = 1;
if (uVar10 >> 1 != 0) {
iVar11 = 1 << (10 - param_1 & 0x1f);
lVar18 = (longlong)iVar11;
lVar20 = (longlong)(iVar11 * 2);
lVar17 = 0;
uVar16 = 0;
do {
uVar7 = uVar16;
puVar3 = &DAT_182616800 + lVar17;
uVar16 = uVar7 + 1;
lVar17 = lVar17 + lVar20;
*(undefined8 *)(param_2 + (longlong)(int)(uVar7 * 2) * 8) = *puVar3;
puVar3 = &DAT_182616800 + lVar18;
lVar18 = lVar18 + lVar20;
*(undefined8 *)(param_2 + 8 + (longlong)(int)(uVar7 * 2) * 8) = *puVar3;
} while (uVar16 < uVar10 >> 1);
iVar11 = uVar7 + 2 + uVar16;
}
if (iVar11 - 1U < uVar10) {
*(undefined8 *)((param_2 - 8) + (longlong)iVar11 * 8) =
(&DAT_182616800)[(int)((1 << (10 - param_1 & 0x1f)) * (iVar11 - 1U))];
}
}
LAB_180039db6:
*(undefined8 *)(lVar12 + param_2) = 0x3ff0000000000000;
goto LAB_18003a23f;
}
iVar21 = (int)(((uint)(iVar11 >> 2) >> 0x1d) + iVar11) >> 3;
dVar36 = DAT_181c5e3f0 / (double)iVar11;
uVar16 = iVar21 + 1;
if (-1 < iVar21) {
if ((int)uVar16 < 0x10) {
LAB_18003a28c:
uVar8 = 0;
}
else {
uVar14 = param_2 & 0x1f;
if ((param_2 & 7) == 0) {
if ((int)uVar14 != 0) {
uVar14 = (ulonglong)(0x20U - (int)uVar14 >> 3);
}
}
else {
uVar14 = 0;
}
uVar7 = (uint)uVar14;
if ((int)uVar16 < (int)(uVar7 + 0x10)) goto LAB_18003a28c;
uVar13 = 0;
lVar12 = 0;
uVar8 = uVar16 - (uVar16 - uVar7 & 0xf);
if (uVar7 != 0) {
do {
dVar34 = (double)(int)uVar13;
uVar13 = uVar13 + 1;
*(double *)(param_2 + lVar12 * 8) = dVar36 * dVar34;
lVar12 = lVar12 + 1;
} while (uVar13 < uVar7);
}
auVar35 = _DAT_181c5e3d0;
auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar7),ZEXT416(uVar7 + 1));
auVar24 = vpunpcklqdq_avx512vl(ZEXT416(uVar7 + 2),ZEXT416(uVar7 + 3));
auVar23 = vshufps_avx512vl(auVar23,auVar24,0x88);
auVar32._8_8_ = dVar36;
auVar32._0_8_ = dVar36;
auVar32._16_8_ = dVar36;
auVar32._24_8_ = dVar36;
do {
auVar24 = vpaddd_avx512vl(auVar23,auVar35);
auVar25 = vpaddd_avx512vl(auVar24,auVar35);
auVar26 = vpaddd_avx512vl(auVar25,auVar35);
auVar33 = vcvtdq2pd_avx(auVar23);
auVar29 = vcvtdq2pd_avx512vl(auVar24);
auVar30 = vcvtdq2pd_avx512vl(auVar25);
auVar31 = vcvtdq2pd_avx512vl(auVar26);
auVar29 = vmulpd_avx512vl(auVar32,auVar29);
auVar23 = vpaddd_avx512vl(auVar26,auVar35);
auVar30 = vmulpd_avx512vl(auVar32,auVar30);
auVar31 = vmulpd_avx512vl(auVar32,auVar31);
pdVar1 = (double *)(param_2 + uVar14 * 8);
*pdVar1 = dVar36 * auVar33._0_8_;
pdVar1[1] = dVar36 * auVar33._8_8_;
pdVar1[2] = dVar36 * auVar33._16_8_;
pdVar1[3] = dVar36 * auVar33._24_8_;
*(undefined1 (*) [32])(param_2 + 0x20 + uVar14 * 8) = auVar29;
*(undefined1 (*) [32])(param_2 + 0x40 + uVar14 * 8) = auVar30;
*(undefined1 (*) [32])(param_2 + 0x60 + uVar14 * 8) = auVar31;
uVar14 = uVar14 + 0x10;
} while (uVar14 < (ulonglong)(longlong)(int)uVar8);
}
auVar35 = _DAT_181c5e3d0;
if (uVar8 + 1 <= uVar16) {
auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar8),ZEXT416(uVar8 + 1));
uVar14 = 0;
auVar24 = vpunpcklqdq_avx512vl(ZEXT416(uVar8 + 2),ZEXT416(uVar8 + 3));
auVar23 = vshufps_avx512vl(auVar23,auVar24,0x88);
auVar33._8_8_ = dVar36;
auVar33._0_8_ = dVar36;
auVar33._16_8_ = dVar36;
auVar33._24_8_ = dVar36;
auVar25 = vpbroadcastd_avx512vl();
lVar12 = 0;
auVar24 = _DAT_181c5e3e0;
do {
auVar32 = vcvtdq2pd_avx512vl(auVar23);
uVar14 = uVar14 + 4;
auVar23 = vpaddd_avx(auVar23,auVar35);
uVar19 = vpcmpgtd_avx512vl(auVar25,auVar24);
uVar19 = uVar19 & 0xf;
auVar24 = vpaddd_avx(auVar24,auVar35);
auVar32 = vmulpd_avx512vl(auVar33,auVar32);
puVar2 = (ulonglong *)(lVar12 + param_2 + (longlong)(int)uVar8 * 8);
bVar4 = (bool)((byte)uVar19 & 1);
bVar5 = (bool)((byte)(uVar19 >> 1) & 1);
bVar6 = (bool)((byte)(uVar19 >> 2) & 1);
*puVar2 = (ulonglong)bVar4 * auVar32._0_8_ | (ulonglong)!bVar4 * *puVar2;
puVar2[1] = (ulonglong)bVar5 * auVar32._8_8_ | (ulonglong)!bVar5 * puVar2[1];
puVar2[2] = (ulonglong)bVar6 * auVar32._16_8_ | (ulonglong)!bVar6 * puVar2[2];
puVar2[3] = (uVar19 >> 3) * auVar32._24_8_ | (ulonglong)!SUB81(uVar19 >> 3,0) * puVar2[3];
lVar12 = lVar12 + 0x20;
} while (uVar14 < (ulonglong)((longlong)(int)uVar16 - (longlong)(int)uVar8));
} }
} }
else if (param_4 < 1) { auVar35 = _DAT_181c5e3d0;
if ((local_30 ^ (ulonglong)auStack_498) == DAT_182615970) { uVar7 = uVar10 - iVar21;
return 0xfffffffa; if ((int)uVar10 < (int)uVar16) {
} uVar14 = param_2 + 8 + (longlong)iVar21 * 8;
} }
else { else {
uVar3 = -((ulonglong)local_470 & 0x3f) & 0x3f; lVar12 = param_2 + (longlong)iVar21 * 8;
puVar1 = local_470 + uVar3; uVar14 = lVar12 + 8;
puVar2 = auStack_270 + uVar3; if ((int)uVar7 < 0x10) {
for (; 0x40 < param_4; param_4 = param_4 + -0x40) { uVar19 = 0;
thunk_FUN_18014ec20(param_2,puVar1,puVar2,0x40);
FUN_180008440(param_1,puVar1,0x40);
FUN_180008440(param_1,puVar2,0x40);
FUN_1800437c0(puVar2,puVar1,param_3,0x40);
param_1 = param_1 + 0x200;
param_2 = param_2 + 0x200;
param_3 = param_3 + 0x400;
} }
thunk_FUN_18014ec20(param_2,puVar1,puVar2,param_4); else {
FUN_180008440(param_1,puVar1,param_4); uVar8 = (uint)uVar14 & 0x1f;
FUN_180008440(param_1,puVar2,param_4); if ((uVar14 & 7) == 0) {
FUN_1800437c0(puVar2,puVar1,param_3,param_4); if (((uVar14 & 0x1f) != 0) && (uVar8 = 0x20 - uVar8 >> 3, (int)uVar7 < (int)uVar8)) {
if ((local_30 ^ (ulonglong)auStack_498) == DAT_182615970) { uVar8 = uVar7;
return 0; }
}
else {
uVar8 = 0;
}
uVar13 = uVar7 - uVar8 & 0xf;
uVar19 = (longlong)(int)uVar7 - (ulonglong)uVar13;
uVar15 = (ulonglong)(int)uVar8;
if (uVar8 != 0) {
auVar27 = vmovdqu32_avx512vl(_DAT_181c5e3e0);
auVar24 = vpbroadcastd_avx512vl();
auVar25 = vpbroadcastd_avx512vl();
auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar16),ZEXT416(iVar21 + 2));
uVar9 = 0;
auVar29._8_8_ = dVar36;
auVar29._0_8_ = dVar36;
auVar29._16_8_ = dVar36;
auVar29._24_8_ = dVar36;
auVar26 = vpunpcklqdq_avx512vl(ZEXT416(iVar21 + 3),ZEXT416(iVar21 + 4));
auVar23 = vshufps_avx512vl(auVar23,auVar26,0x88);
lVar17 = 0;
do {
auVar26 = vpsubd_avx512vl(auVar24,auVar23);
uVar9 = uVar9 + 4;
auVar32 = vcvtdq2pd_avx512vl(auVar26);
auVar23 = vpaddd_avx(auVar23,auVar35);
uVar22 = vpcmpgtd_avx512vl(auVar25,auVar27);
uVar22 = uVar22 & 0xf;
auVar27 = vpaddd_avx512vl(auVar27,auVar35);
auVar32 = vmulpd_avx512vl(auVar29,auVar32);
puVar2 = (ulonglong *)(lVar17 + 8 + lVar12);
bVar4 = (bool)((byte)uVar22 & 1);
bVar5 = (bool)((byte)(uVar22 >> 1) & 1);
bVar6 = (bool)((byte)(uVar22 >> 2) & 1);
*puVar2 = (ulonglong)bVar4 * auVar32._0_8_ | (ulonglong)!bVar4 * *puVar2;
puVar2[1] = (ulonglong)bVar5 * auVar32._8_8_ | (ulonglong)!bVar5 * puVar2[1];
puVar2[2] = (ulonglong)bVar6 * auVar32._16_8_ | (ulonglong)!bVar6 * puVar2[2];
puVar2[3] = (uVar22 >> 3) * auVar32._24_8_ | (ulonglong)!SUB81(uVar22 >> 3,0) * puVar2[3];
lVar17 = lVar17 + 0x20;
} while (uVar9 < uVar15);
if (uVar7 == uVar8) goto LAB_18003a220;
}
uVar16 = uVar8 + 1 + iVar21;
auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar16),ZEXT416(uVar16 + 1));
auVar24 = vpunpcklqdq_avx512vl(ZEXT416(uVar16 + 2),ZEXT416(uVar16 + 3));
auVar23 = vshufps_avx512vl(auVar23,auVar24,0x88);
if ((longlong)(uVar15 + 0x10) <= (longlong)uVar19) {
auVar24 = vpbroadcastd_avx512vl();
auVar30._8_8_ = dVar36;
auVar30._0_8_ = dVar36;
auVar30._16_8_ = dVar36;
auVar30._24_8_ = dVar36;
do {
auVar25 = vpaddd_avx512vl(auVar23,auVar35);
auVar23 = vpsubd_avx(auVar24,auVar23);
auVar26 = vpaddd_avx512vl(auVar25,auVar35);
auVar25 = vpsubd_avx512vl(auVar24,auVar25);
auVar27 = vpaddd_avx512vl(auVar26,auVar35);
auVar26 = vpsubd_avx512vl(auVar24,auVar26);
auVar28 = vpsubd_avx512vl(auVar24,auVar27);
auVar32 = vcvtdq2pd_avx512vl(auVar23);
auVar33 = vcvtdq2pd_avx512vl(auVar25);
auVar23 = vpaddd_avx512vl(auVar27,auVar35);
auVar29 = vcvtdq2pd_avx512vl(auVar26);
auVar31 = vcvtdq2pd_avx512vl(auVar28);
auVar32 = vmulpd_avx512vl(auVar30,auVar32);
auVar33 = vmulpd_avx512vl(auVar30,auVar33);
auVar29 = vmulpd_avx512vl(auVar30,auVar29);
auVar31 = vmulpd_avx512vl(auVar30,auVar31);
*(undefined1 (*) [32])(lVar12 + 8 + uVar15 * 8) = auVar32;
*(undefined1 (*) [32])(lVar12 + 0x28 + uVar15 * 8) = auVar33;
*(undefined1 (*) [32])(lVar12 + 0x48 + uVar15 * 8) = auVar29;
*(undefined1 (*) [32])(lVar12 + 0x68 + uVar15 * 8) = auVar31;
uVar15 = uVar15 + 0x10;
} while (uVar15 < uVar19);
if (uVar13 == 0) goto LAB_18003a220;
}
} }
lVar12 = lVar12 + uVar19 * 8;
iVar11 = (uVar7 - 1) - (int)uVar19;
do {
uVar16 = (int)uVar19 + 1;
uVar19 = (ulonglong)uVar16;
dVar34 = (double)iVar11;
iVar11 = iVar11 + -1;
*(double *)(lVar12 + 8) = dVar36 * dVar34;
lVar12 = lVar12 + 8;
} while ((int)uVar16 < (int)uVar7);
} }
} LAB_18003a220:
thunk_FUN_1801de760(param_2,param_2);
thunk_FUN_1801e3f20(uVar14,uVar14,uVar7);
LAB_18003a23f:
############ FUN_ 180140ca7 size=9 ############ uVar14 = param_2 + 8 + (longlong)(int)uVar10 * 8;
return uVar14 + (-(uVar14 & 0x3f) & 0x3f);
void thunk_FUN_1801560a0(void)
{
(*(code *)PTR_FUN_1826178a0)();
return;
} }
+1 -1
View File
@@ -1 +1 @@
18000c080,180140ca7 180039b00
+6 -1
View File
@@ -49,4 +49,9 @@ outer while (uVar24 < (iVar25-1+iVar33)/iVar33)
structure; different base-call FUN_18002e360 vs FUN_180023860). structure; different base-call FUN_18002e360 vs FUN_180023860).
- Stage kernels executed at runtime are the dispatched vector kernels (see roadmap), - Stage kernels executed at runtime are the dispatched vector kernels (see roadmap),
driven from this plan's ordering; the transform itself therefore reproduces a driven from this plan's ordering; the transform itself therefore reproduces a
specific FFT: split-radix 2/4/8-style in-place butterflies with fused reorder. specific FFT: split-radix 2/4/8-style in-place butterflies with fused reorder.
## Twiddle source (DAT_182616800 = sin-table)
- 1024 doubles = exact sin(k*2*pi/1024) (double precision), first half-period 0..512 (rest garbage of neighboring data).
- Copied to scratch by FUN_180039b00( log2N, dst ): step lVar18 = 1 << (10 - log2N) for N<=1024.
- So for N = 2^m: twiddle angles sampled from table with stride 2^(10-m). For N>1024 separate (two-pass) branch (unresolved).
- Stage kernels (FUN_18000bfc0/18000c5e0) consume these with 0x40-complex chunks, cplx-mul=180008440, acc=FUN_1800437c0/180044700.
File diff suppressed because one or more lines are too long