P3.1: extract FFT code from rt snap (extract_fft.py); decode cplx_mul 0x8440 = in-place elementwise double mult, twiddle loader 0x39b00 stride copy, dispatcher 0x535a70->0x140a10/70->jumptable[0x1826159a0]=4; implement cplx_mul_scalar_inplace
This commit is contained in:
@@ -3,6 +3,13 @@
|
||||
|
||||
namespace fft_stage {
|
||||
|
||||
// 0x180008440: dst[i] *= src[i] (double, in-place elementwise; kernel 0x18003fa20)
|
||||
void cplx_mul_scalar_inplace(double* dst, const double* src, uint32_t n) {
|
||||
for (uint32_t i = 0; i < n; i++) {
|
||||
dst[i] *= src[i];
|
||||
}
|
||||
}
|
||||
|
||||
// cplx_mul — complex elementwise multiply: out = in1 * in2 (conjugated 2nd)
|
||||
void cplx_mul(double* out, const double* in1, const double* in2, uint32_t n) {
|
||||
for (uint32_t i = 0; i < n * 2; i += 2) {
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
|
||||
namespace fft_stage {
|
||||
|
||||
// 0x180008440 (kernel 0x18003fa20): IN-PLACE elementwise double multiply
|
||||
// dst[i] *= src[i]. NOT a complex multiply — the complex op is done via separate
|
||||
// re/im passes on the interleaved layout.
|
||||
void cplx_mul_scalar_inplace(double* dst, const double* src, uint32_t n);
|
||||
|
||||
// complex elementwise multiply (interleaved re,im): out = in1 * in2
|
||||
void cplx_mul(double* out, const double* in1, const double* in2, uint32_t n);
|
||||
void stage_complex(double* out, const double* in, const double* tw, uint32_t n);
|
||||
void stage_double(double* out, const double* in, const double* tw, uint32_t n);
|
||||
|
||||
Reference in New Issue
Block a user