Created
November 19, 2018 05:48
-
-
Save segin/863a3feb11da88ab97046854d2ae837f to your computer and use it in GitHub Desktop.
WASM test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <cmath> | |
#include <iostream> | |
using namespace std; | |
class FFT { | |
private: | |
float *real, *imag; | |
int size; | |
static unsigned int bitreverse(unsigned int in, int bits); | |
public: | |
FFT(int size); // size must be a power of 2 (!) | |
~FFT(); | |
void fft(float *output, const float *input); | |
}; | |
FFT::FFT(int size) { | |
real = new float[size]; | |
imag = new float[size]; | |
this->size = size; | |
} | |
FFT::~FFT() { | |
delete[] real; | |
delete[] imag; | |
} | |
void FFT::fft(float *output, const float *input) { | |
int nu = (int) ((float) log(size) / log(2.0)); // Number of bits of item indexes | |
int n2 = size / 2; | |
int nu1 = nu - 1; | |
float tr, ti, arg, c, s; | |
for (int i = 0; i < size; ++i) { | |
real[i] = input[i]; | |
imag[i] = 0; | |
} | |
// Stage 1 - calculation | |
float f = -2 * M_PI / size; | |
for (int l = 1; l <= nu; l++) { | |
int k = 0; | |
while (k < size) { | |
for (int i = 1; i <= n2; i++) { | |
arg = bitreverse(k >> nu1, nu) * f; | |
c = cos(arg); | |
s = sin(arg); | |
tr = real[k + n2] * c + imag[k + n2] * s; | |
ti = imag[k + n2] * c - real[k + n2] * s; | |
real[k + n2] = real[k] - tr; | |
imag[k + n2] = imag[k] - ti; | |
real[k] += tr; | |
imag[k] += ti; | |
k++; | |
} | |
k += n2; | |
} | |
nu1--; | |
n2 /= 2; | |
} | |
// Stage 2 - normalize the output and feed the magnitudes to the output array | |
for (int i = 0; i < size; ++i) | |
output[i] = sqrt(real[i] * real[i] + imag[i] * imag[i]) / size; | |
// Stage 3 - recombination | |
for (int k = 0; k < size; ++k) { | |
int r = bitreverse(k, nu); | |
if (r > k) { | |
tr = output[k]; | |
output[k] = output[r]; | |
output[r] = tr; | |
} | |
} | |
} | |
unsigned int FFT::bitreverse(unsigned int in, int bits) { | |
unsigned int out = 0; | |
while (bits--) { | |
out |= (in & 1) << bits; | |
in >>= 1; | |
} | |
return out; | |
} | |
extern "C" { | |
int main(int argc, char *argv[]) { | |
int real, complex; | |
printf("%d", argc); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
wasm-function[6]: | |
sub rsp, 0x28 ; 0x000000 48 83 ec 28 | |
cmp qword ptr [r14 + 0x28], rsp ; 0x000004 49 39 66 28 | |
jae 0xb5 ; 0x000008 0f 83 a7 00 00 00 | |
0x00000e: | |
mov dword ptr [rsp + 0x1c], edi ; 0x00000e 89 7c 24 1c | |
mov dword ptr [rsp + 0x18], esi ; 0x000012 89 74 24 18 | |
mov edx, dword ptr [rsp + 0x18] ; 0x000016 8b 54 24 18 | |
shl rdx, 2 ; 0x00001a 48 c1 e2 02 | |
mov ecx, edx ; 0x00001e 8b ca | |
shr rdx, 0x20 ; 0x000020 48 c1 ea 20 | |
mov edx, edx ; 0x000024 8b d2 | |
mov edi, 0xffffffff ; 0x000026 bf ff ff ff ff | |
test edx, edx ; 0x00002b 85 d2 | |
cmove edi, ecx ; 0x00002d 0f 44 f9 | |
mov dword ptr [rsp + 0x14], edi ; 0x000030 89 7c 24 14 | |
mov qword ptr [rsp], r14 ; 0x000034 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x50] ; 0x000038 49 8b 46 50 | |
mov r14, qword ptr [r14 + 0x58] ; 0x00003c 4d 8b 76 58 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000040 4d 8b 7e 18 | |
call rax ; 0x000044 ff d0 | |
mov r14, qword ptr [rsp] ; 0x000046 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x00004a 4d 8b 7e 18 | |
mov ecx, dword ptr [rsp + 0x1c] ; 0x00004e 8b 4c 24 1c | |
mov dword ptr [r15 + rcx], eax ; 0x000052 41 89 04 0f | |
mov edi, dword ptr [rsp + 0x14] ; 0x000056 8b 7c 24 14 | |
mov qword ptr [rsp], r14 ; 0x00005a 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x50] ; 0x00005e 49 8b 46 50 | |
mov r14, qword ptr [r14 + 0x58] ; 0x000062 4d 8b 76 58 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000066 4d 8b 7e 18 | |
call rax ; 0x00006a ff d0 | |
mov r14, qword ptr [rsp] ; 0x00006c 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000070 4d 8b 7e 18 | |
mov edx, dword ptr [rsp + 0x18] ; 0x000074 8b 54 24 18 | |
mov ecx, dword ptr [rsp + 0x1c] ; 0x000078 8b 4c 24 1c | |
mov dword ptr [r15 + rcx + 8], edx ; 0x00007c 41 89 54 0f 08 | |
mov ecx, dword ptr [rsp + 0x1c] ; 0x000081 8b 4c 24 1c | |
mov dword ptr [r15 + rcx + 4], eax ; 0x000085 41 89 44 0f 04 | |
mov eax, dword ptr [rsp + 0x1c] ; 0x00008a 8b 44 24 1c | |
nop ; 0x00008e 66 90 | |
add rsp, 0x28 ; 0x000090 48 83 c4 28 | |
ret ; 0x000094 c3 | |
wasm-function[7]: | |
sub rsp, 0x28 ; 0x000000 48 83 ec 28 | |
cmp qword ptr [r14 + 0x28], rsp ; 0x000004 49 39 66 28 | |
jae 0xa4 ; 0x000008 0f 83 96 00 00 00 | |
0x00000e: | |
mov dword ptr [rsp + 0x1c], edi ; 0x00000e 89 7c 24 1c | |
mov eax, dword ptr [rsp + 0x1c] ; 0x000012 8b 44 24 1c | |
mov edi, dword ptr [r15 + rax] ; 0x000016 41 8b 3c 07 | |
test edi, edi ; 0x00001a 85 ff | |
jne 0x2b ; 0x00001c 0f 85 09 00 00 00 | |
0x000022: | |
mov eax, dword ptr [rsp + 0x1c] ; 0x000022 8b 44 24 1c | |
jmp 0x49 ; 0x000026 e9 1e 00 00 00 | |
0x00002b: | |
mov qword ptr [rsp], r14 ; 0x00002b 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x30] ; 0x00002f 49 8b 46 30 | |
mov r14, qword ptr [r14 + 0x38] ; 0x000033 4d 8b 76 38 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000037 4d 8b 7e 18 | |
call rax ; 0x00003b ff d0 | |
mov r14, qword ptr [rsp] ; 0x00003d 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000041 4d 8b 7e 18 | |
mov eax, dword ptr [rsp + 0x1c] ; 0x000045 8b 44 24 1c | |
0x000049: ; 0x000049 from: [0x000026] | |
mov edi, dword ptr [r15 + rax + 4] ; 0x000049 41 8b 7c 07 04 | |
test edi, edi ; 0x00004e 85 ff | |
jne 0x5f ; 0x000050 0f 85 09 00 00 00 | |
0x000056: | |
mov eax, dword ptr [rsp + 0x1c] ; 0x000056 8b 44 24 1c | |
jmp 0x7d ; 0x00005a e9 1e 00 00 00 | |
0x00005f: | |
mov qword ptr [rsp], r14 ; 0x00005f 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x30] ; 0x000063 49 8b 46 30 | |
mov r14, qword ptr [r14 + 0x38] ; 0x000067 4d 8b 76 38 | |
mov r15, qword ptr [r14 + 0x18] ; 0x00006b 4d 8b 7e 18 | |
call rax ; 0x00006f ff d0 | |
mov r14, qword ptr [rsp] ; 0x000071 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000075 4d 8b 7e 18 | |
mov eax, dword ptr [rsp + 0x1c] ; 0x000079 8b 44 24 1c | |
0x00007d: ; 0x00007d from: [0x00005a] | |
nop ; 0x00007d 66 90 | |
add rsp, 0x28 ; 0x00007f 48 83 c4 28 | |
ret ; 0x000083 c3 | |
wasm-function[8]: | |
sub rsp, 0x78 ; 0x000000 48 83 ec 78 | |
cmp qword ptr [r14 + 0x28], rsp ; 0x000004 49 39 66 28 | |
jae 0x41a ; 0x000008 0f 83 0c 04 00 00 | |
0x00000e: | |
mov dword ptr [rsp + 0x6c], edi ; 0x00000e 89 7c 24 6c | |
mov dword ptr [rsp + 0x68], esi ; 0x000012 89 74 24 68 | |
mov dword ptr [rsp + 0x64], edx ; 0x000016 89 54 24 64 | |
mov eax, dword ptr [r15 + rdi + 8] ; 0x00001a 41 8b 44 3f 08 | |
mov dword ptr [rsp + 0x60], eax ; 0x00001f 89 44 24 60 | |
xorpd xmm0, xmm0 ; 0x000023 66 0f 57 c0 | |
cvtsi2sd xmm0, eax ; 0x000027 f2 0f 2a c0 | |
movsd qword ptr [rsp + 0x58], xmm0 ; 0x00002b f2 0f 11 44 24 58 | |
mov qword ptr [rsp], r14 ; 0x000031 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x90] ; 0x000035 49 8b 86 90 00 00 00 | |
mov r14, qword ptr [r14 + 0x98] ; 0x00003c 4d 8b b6 98 00 00 00 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000043 4d 8b 7e 18 | |
call rax ; 0x000047 ff d0 | |
mov r14, qword ptr [rsp] ; 0x000049 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x00004d 4d 8b 7e 18 | |
cvtsd2ss xmm0, xmm0 ; 0x000051 f2 0f 5a c0 | |
cvtss2sd xmm1, xmm0 ; 0x000055 f3 0f 5a c8 | |
movsd xmm2, qword ptr [rip + 0x20ef] ; 0x000059 f2 0f 10 15 ef 20 00 00 | |
divsd xmm1, xmm2 ; 0x000061 f2 0f 5e ca | |
cvttsd2si ecx, xmm1 ; 0x000065 f2 0f 2c c9 | |
cmp ecx, 1 ; 0x000069 83 f9 01 | |
jo 0x423 ; 0x00006c 0f 80 b1 03 00 00 | |
0x000072: | |
mov dword ptr [rsp + 0x54], ecx ; 0x000072 89 4c 24 54 | |
mov edx, dword ptr [rsp + 0x60] ; 0x000076 8b 54 24 60 | |
cmp edx, 1 ; 0x00007a 83 fa 01 | |
setl al ; 0x00007d 0f 9c c0 | |
movzx eax, al ; 0x000080 0f b6 c0 | |
mov dword ptr [rsp + 0x50], eax ; 0x000083 89 44 24 50 | |
test eax, eax ; 0x000087 85 c0 | |
jne 0xc8 ; 0x000089 0f 85 39 00 00 00 | |
0x00008f: | |
mov ebx, dword ptr [rsp + 0x6c] ; 0x00008f 8b 5c 24 6c | |
mov edx, dword ptr [r15 + rbx + 4] ; 0x000093 41 8b 54 1f 04 | |
mov ebx, dword ptr [r15 + rbx] ; 0x000098 41 8b 1c 1f | |
xor ebp, ebp ; 0x00009c 33 ed | |
0x00009e: ; 0x00009e from: [0x0000c6] | |
mov esi, dword ptr [rsp + 0x64] ; 0x00009e 8b 74 24 64 | |
mov edi, dword ptr [r15 + rsi] ; 0x0000a2 41 8b 3c 37 | |
mov dword ptr [r15 + rbx], edi ; 0x0000a6 41 89 3c 1f | |
mov dword ptr [r15 + rdx], 0 ; 0x0000aa 41 c7 04 17 00 00 00 00 | |
add edx, 4 ; 0x0000b2 83 c2 04 | |
add ebx, 4 ; 0x0000b5 83 c3 04 | |
add esi, 4 ; 0x0000b8 83 c6 04 | |
mov dword ptr [rsp + 0x64], esi ; 0x0000bb 89 74 24 64 | |
add ebp, 1 ; 0x0000bf 83 c5 01 | |
cmp ebp, dword ptr [rsp + 0x60] ; 0x0000c2 3b 6c 24 60 | |
jl 0x9e ; 0x0000c6 7c d6 | |
0x0000c8: | |
cmp ecx, 1 ; 0x0000c8 83 f9 01 | |
jl 0x335 ; 0x0000cb 0f 8c 64 02 00 00 | |
0x0000d1: | |
movsd xmm1, qword ptr [rip + 0x207f] ; 0x0000d1 f2 0f 10 0d 7f 20 00 00 | |
divsd xmm1, qword ptr [rsp + 0x58] ; 0x0000d9 f2 0f 5e 4c 24 58 | |
cvtsd2ss xmm0, xmm1 ; 0x0000df f2 0f 5a c1 | |
mov ecx, dword ptr [rsp + 0x54] ; 0x0000e3 8b 4c 24 54 | |
movss dword ptr [rsp + 0x64], xmm0 ; 0x0000e7 f3 0f 11 44 24 64 | |
add ecx, -1 ; 0x0000ed 83 c1 ff | |
mov edx, dword ptr [rsp + 0x6c] ; 0x0000f0 8b 54 24 6c | |
mov dword ptr [rsp + 0x4c], ecx ; 0x0000f4 89 4c 24 4c | |
add edx, 4 ; 0x0000f8 83 c2 04 | |
mov dword ptr [rsp + 0x48], edx ; 0x0000fb 89 54 24 48 | |
mov ecx, 1 ; 0x0000ff b9 01 00 00 00 | |
mov dword ptr [rsp + 0x44], ecx ; 0x000104 89 4c 24 44 | |
mov r11d, dword ptr [rsp + 0x60] ; 0x000108 44 8b 5c 24 60 | |
mov dword ptr [rsp + 0x3c], r11d ; 0x00010d 44 89 5c 24 3c | |
mov r11d, dword ptr [rsp + 0x54] ; 0x000112 44 8b 5c 24 54 | |
mov dword ptr [rsp + 0x40], r11d ; 0x000117 44 89 5c 24 40 | |
0x00011c: ; 0x00011c from: [0x00032c] | |
mov ecx, dword ptr [rsp + 0x40] ; 0x00011c 8b 4c 24 40 | |
add ecx, -1 ; 0x000120 83 c1 ff | |
mov ebp, dword ptr [rsp + 0x3c] ; 0x000123 8b 6c 24 3c | |
mov ebx, ebp ; 0x000127 8b dd | |
mov dword ptr [rsp + 0x40], ecx ; 0x000129 89 4c 24 40 | |
shr ebp, 0x1f ; 0x00012d c1 ed 1f | |
add ebp, ebx ; 0x000130 03 eb | |
sar ebp, 1 ; 0x000132 d1 fd | |
mov dword ptr [rsp + 0x38], ebp ; 0x000134 89 6c 24 38 | |
test eax, eax ; 0x000138 85 c0 | |
jne 0x301 ; 0x00013a 0f 85 c1 01 00 00 | |
0x000140: | |
mov dword ptr [rsp + 0x3c], ebx ; 0x000140 89 5c 24 3c | |
xor eax, eax ; 0x000144 33 c0 | |
mov dword ptr [rsp + 0x34], eax ; 0x000146 89 44 24 34 | |
0x00014a: ; 0x00014a from: [0x0002fc] | |
cmp ebx, 2 ; 0x00014a 83 fb 02 | |
jl 0x2da ; 0x00014d 0f 8c 87 01 00 00 | |
0x000153: | |
mov eax, dword ptr [r15 + rdx] ; 0x000153 41 8b 04 17 | |
mov dword ptr [rsp + 0x30], eax ; 0x000157 89 44 24 30 | |
mov eax, dword ptr [rsp + 0x6c] ; 0x00015b 8b 44 24 6c | |
mov eax, dword ptr [r15 + rax] ; 0x00015f 41 8b 04 07 | |
mov dword ptr [rsp + 0x2c], eax ; 0x000163 89 44 24 2c | |
mov eax, 1 ; 0x000167 b8 01 00 00 00 | |
mov dword ptr [rsp + 0x28], eax ; 0x00016c 89 44 24 28 | |
0x000170: ; 0x000170 from: [0x0002d5] | |
mov eax, dword ptr [rsp + 0x34] ; 0x000170 8b 44 24 34 | |
sar eax, cl ; 0x000174 d3 f8 | |
xor edx, edx ; 0x000176 33 d2 | |
mov ecx, dword ptr [rsp + 0x4c] ; 0x000178 8b 4c 24 4c | |
0x00017c: ; 0x00017c from: [0x00018d] | |
mov ebx, eax ; 0x00017c 8b d8 | |
and ebx, 1 ; 0x00017e 83 e3 01 | |
shl ebx, cl ; 0x000181 d3 e3 | |
or edx, ebx ; 0x000183 0b d3 | |
shr eax, 1 ; 0x000185 d1 e8 | |
add ecx, -1 ; 0x000187 83 c1 ff | |
cmp ecx, 0xff ; 0x00018a 83 f9 ff | |
jne 0x17c ; 0x00018d 75 ed | |
0x00018f: | |
xorpd xmm1, xmm1 ; 0x00018f 66 0f 57 c9 | |
cvtsi2ss xmm1, rdx ; 0x000193 f3 48 0f 2a ca | |
movss xmm0, dword ptr [rsp + 0x64] ; 0x000198 f3 0f 10 44 24 64 | |
mulss xmm0, xmm1 ; 0x00019e f3 0f 59 c1 | |
movss dword ptr [rsp + 0x24], xmm0 ; 0x0001a2 f3 0f 11 44 24 24 | |
mov qword ptr [rsp], r14 ; 0x0001a8 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0xd0] ; 0x0001ac 49 8b 86 d0 00 00 00 | |
mov r14, qword ptr [r14 + 0xd8] ; 0x0001b3 4d 8b b6 d8 00 00 00 | |
mov r15, qword ptr [r14 + 0x18] ; 0x0001ba 4d 8b 7e 18 | |
call rax ; 0x0001be ff d0 | |
mov r14, qword ptr [rsp] ; 0x0001c0 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x0001c4 4d 8b 7e 18 | |
mov eax, dword ptr [rsp + 0x34] ; 0x0001c8 8b 44 24 34 | |
movss dword ptr [rsp + 0x20], xmm0 ; 0x0001cc f3 0f 11 44 24 20 | |
add eax, dword ptr [rsp + 0x38] ; 0x0001d2 03 44 24 38 | |
shl eax, 2 ; 0x0001d6 c1 e0 02 | |
mov dword ptr [rsp + 0x1c], eax ; 0x0001d9 89 44 24 1c | |
mov eax, dword ptr [rsp + 0x30] ; 0x0001dd 8b 44 24 30 | |
add eax, dword ptr [rsp + 0x1c] ; 0x0001e1 03 44 24 1c | |
mov dword ptr [rsp + 0x18], eax ; 0x0001e5 89 44 24 18 | |
movss xmm1, dword ptr [r15 + rax] ; 0x0001e9 f3 41 0f 10 0c 07 | |
movss dword ptr [rsp + 0x14], xmm1 ; 0x0001ef f3 0f 11 4c 24 14 | |
movss xmm0, dword ptr [rsp + 0x24] ; 0x0001f5 f3 0f 10 44 24 24 | |
mov qword ptr [rsp], r14 ; 0x0001fb 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x70] ; 0x0001ff 49 8b 46 70 | |
mov r14, qword ptr [r14 + 0x78] ; 0x000203 4d 8b 76 78 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000207 4d 8b 7e 18 | |
call rax ; 0x00020b ff d0 | |
mov r14, qword ptr [rsp] ; 0x00020d 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000211 4d 8b 7e 18 | |
mov edx, dword ptr [rsp + 0x2c] ; 0x000215 8b 54 24 2c | |
add edx, dword ptr [rsp + 0x1c] ; 0x000219 03 54 24 1c | |
mov ecx, dword ptr [rsp + 0x34] ; 0x00021d 8b 4c 24 34 | |
shl ecx, 2 ; 0x000221 c1 e1 02 | |
mov eax, dword ptr [rsp + 0x2c] ; 0x000224 8b 44 24 2c | |
add eax, ecx ; 0x000228 03 c1 | |
movss xmm2, dword ptr [r15 + rax] ; 0x00022a f3 41 0f 10 14 07 | |
movss xmm4, dword ptr [r15 + rdx] ; 0x000230 f3 41 0f 10 24 17 | |
movaps xmm1, xmm0 ; 0x000236 0f 28 c8 | |
mulss xmm1, xmm4 ; 0x000239 f3 0f 59 cc | |
movss xmm3, dword ptr [rsp + 0x20] ; 0x00023d f3 0f 10 5c 24 20 | |
mulss xmm3, dword ptr [rsp + 0x14] ; 0x000243 f3 0f 59 5c 24 14 | |
movss xmm5, dword ptr [rsp + 0x20] ; 0x000249 f3 0f 10 6c 24 20 | |
mulss xmm5, xmm4 ; 0x00024f f3 0f 59 ec | |
movss dword ptr [rsp + 0x20], xmm5 ; 0x000253 f3 0f 11 6c 24 20 | |
mulss xmm0, dword ptr [rsp + 0x14] ; 0x000259 f3 0f 59 44 24 14 | |
subss xmm0, dword ptr [rsp + 0x20] ; 0x00025f f3 0f 5c 44 24 20 | |
addss xmm1, xmm3 ; 0x000265 f3 0f 58 cb | |
subss xmm2, xmm1 ; 0x000269 f3 0f 5c d1 | |
movss dword ptr [r15 + rdx], xmm2 ; 0x00026d f3 41 0f 11 14 17 | |
mov edx, dword ptr [rsp + 0x30] ; 0x000273 8b 54 24 30 | |
add edx, ecx ; 0x000277 03 d1 | |
movss xmm2, dword ptr [r15 + rdx] ; 0x000279 f3 41 0f 10 14 17 | |
subss xmm2, xmm0 ; 0x00027f f3 0f 5c d0 | |
mov ecx, dword ptr [rsp + 0x18] ; 0x000283 8b 4c 24 18 | |
movss dword ptr [r15 + rcx], xmm2 ; 0x000287 f3 41 0f 11 14 0f | |
movss xmm2, dword ptr [r15 + rax] ; 0x00028d f3 41 0f 10 14 07 | |
addss xmm2, xmm1 ; 0x000293 f3 0f 58 d1 | |
movss dword ptr [r15 + rax], xmm2 ; 0x000297 f3 41 0f 11 14 07 | |
movss xmm1, dword ptr [r15 + rdx] ; 0x00029d f3 41 0f 10 0c 17 | |
addss xmm1, xmm0 ; 0x0002a3 f3 0f 58 c8 | |
movss dword ptr [r15 + rdx], xmm1 ; 0x0002a7 f3 41 0f 11 0c 17 | |
mov eax, dword ptr [rsp + 0x34] ; 0x0002ad 8b 44 24 34 | |
add eax, 1 ; 0x0002b1 83 c0 01 | |
mov dword ptr [rsp + 0x34], eax ; 0x0002b4 89 44 24 34 | |
mov eax, dword ptr [rsp + 0x28] ; 0x0002b8 8b 44 24 28 | |
add eax, 1 ; 0x0002bc 83 c0 01 | |
mov ecx, dword ptr [rsp + 0x28] ; 0x0002bf 8b 4c 24 28 | |
cmp ecx, dword ptr [rsp + 0x38] ; 0x0002c3 3b 4c 24 38 | |
jge 0x2da ; 0x0002c7 0f 8d 0d 00 00 00 | |
0x0002cd: | |
mov ecx, dword ptr [rsp + 0x40] ; 0x0002cd 8b 4c 24 40 | |
mov dword ptr [rsp + 0x28], eax ; 0x0002d1 89 44 24 28 | |
jmp 0x170 ; 0x0002d5 e9 96 fe ff ff | |
0x0002da: | |
mov eax, dword ptr [rsp + 0x34] ; 0x0002da 8b 44 24 34 | |
add eax, dword ptr [rsp + 0x38] ; 0x0002de 03 44 24 38 | |
mov dword ptr [rsp + 0x34], eax ; 0x0002e2 89 44 24 34 | |
cmp eax, dword ptr [rsp + 0x60] ; 0x0002e6 3b 44 24 60 | |
jge 0x301 ; 0x0002ea 0f 8d 11 00 00 00 | |
0x0002f0: | |
mov ecx, dword ptr [rsp + 0x40] ; 0x0002f0 8b 4c 24 40 | |
mov ebx, dword ptr [rsp + 0x3c] ; 0x0002f4 8b 5c 24 3c | |
mov edx, dword ptr [rsp + 0x48] ; 0x0002f8 8b 54 24 48 | |
jmp 0x14a ; 0x0002fc e9 49 fe ff ff | |
0x000301: | |
mov eax, dword ptr [rsp + 0x44] ; 0x000301 8b 44 24 44 | |
add eax, 1 ; 0x000305 83 c0 01 | |
mov ecx, dword ptr [rsp + 0x44] ; 0x000308 8b 4c 24 44 | |
cmp ecx, dword ptr [rsp + 0x54] ; 0x00030c 3b 4c 24 54 | |
je 0x331 ; 0x000310 0f 84 1b 00 00 00 | |
0x000316: | |
mov edx, dword ptr [rsp + 0x48] ; 0x000316 8b 54 24 48 | |
mov dword ptr [rsp + 0x44], eax ; 0x00031a 89 44 24 44 | |
mov eax, dword ptr [rsp + 0x50] ; 0x00031e 8b 44 24 50 | |
mov r11d, dword ptr [rsp + 0x38] ; 0x000322 44 8b 5c 24 38 | |
mov dword ptr [rsp + 0x3c], r11d ; 0x000327 44 89 5c 24 3c | |
jmp 0x11c ; 0x00032c e9 eb fd ff ff | |
0x000331: | |
mov eax, dword ptr [rsp + 0x50] ; 0x000331 8b 44 24 50 | |
0x000335: ; 0x000335 from: [0x0000cb] | |
test eax, eax ; 0x000335 85 c0 | |
jne 0x3f3 ; 0x000337 0f 85 b6 00 00 00 | |
0x00033d: | |
mov eax, dword ptr [rsp + 0x60] ; 0x00033d 8b 44 24 60 | |
xorps xmm0, xmm0 ; 0x000341 0f 57 c0 | |
cvtsi2ss xmm0, eax ; 0x000344 f3 0f 2a c0 | |
mov ecx, dword ptr [rsp + 0x6c] ; 0x000348 8b 4c 24 6c | |
mov eax, dword ptr [r15 + rcx + 4] ; 0x00034c 41 8b 44 0f 04 | |
mov ecx, dword ptr [r15 + rcx] ; 0x000351 41 8b 0c 0f | |
xor edx, edx ; 0x000355 33 d2 | |
mov ebx, dword ptr [rsp + 0x68] ; 0x000357 8b 5c 24 68 | |
0x00035b: ; 0x00035b from: [0x000391] | |
movss xmm1, dword ptr [r15 + rcx] ; 0x00035b f3 41 0f 10 0c 0f | |
mulss xmm1, xmm1 ; 0x000361 f3 0f 59 c9 | |
movss xmm2, dword ptr [r15 + rax] ; 0x000365 f3 41 0f 10 14 07 | |
mulss xmm2, xmm2 ; 0x00036b f3 0f 59 d2 | |
addss xmm1, xmm2 ; 0x00036f f3 0f 58 ca | |
sqrtss xmm1, xmm1 ; 0x000373 f3 0f 51 c9 | |
divss xmm1, xmm0 ; 0x000377 f3 0f 5e c8 | |
movss dword ptr [r15 + rbx], xmm1 ; 0x00037b f3 41 0f 11 0c 1f | |
add ebx, 4 ; 0x000381 83 c3 04 | |
add eax, 4 ; 0x000384 83 c0 04 | |
add ecx, 4 ; 0x000387 83 c1 04 | |
add edx, 1 ; 0x00038a 83 c2 01 | |
cmp edx, dword ptr [rsp + 0x60] ; 0x00038d 3b 54 24 60 | |
jl 0x35b ; 0x000391 7c c8 | |
0x000393: | |
mov eax, dword ptr [rsp + 0x54] ; 0x000393 8b 44 24 54 | |
add eax, -1 ; 0x000397 83 c0 ff | |
xor ebp, ebp ; 0x00039a 33 ed | |
0x00039c: ; 0x00039c from: [0x0003f1] | |
mov ecx, dword ptr [rsp + 0x54] ; 0x00039c 8b 4c 24 54 | |
test ecx, ecx ; 0x0003a0 85 c9 | |
jne 0x3af ; 0x0003a2 0f 85 07 00 00 00 | |
0x0003a8: | |
xor edx, edx ; 0x0003a8 33 d2 | |
jmp 0x3c8 ; 0x0003aa e9 19 00 00 00 | |
0x0003af: | |
xor edx, edx ; 0x0003af 33 d2 | |
mov ebx, ebp ; 0x0003b1 8b dd | |
mov ecx, eax ; 0x0003b3 8b c8 | |
0x0003b5: ; 0x0003b5 from: [0x0003c6] | |
mov esi, ebx ; 0x0003b5 8b f3 | |
and esi, 1 ; 0x0003b7 83 e6 01 | |
shl esi, cl ; 0x0003ba d3 e6 | |
or edx, esi ; 0x0003bc 0b d6 | |
shr ebx, 1 ; 0x0003be d1 eb | |
add ecx, -1 ; 0x0003c0 83 c1 ff | |
cmp ecx, 0xff ; 0x0003c3 83 f9 ff | |
jne 0x3b5 ; 0x0003c6 75 ed | |
0x0003c8: | |
cmp edx, ebp ; 0x0003c8 3b d5 | |
jle 0x3ea ; 0x0003ca 0f 8e 1a 00 00 00 | |
0x0003d0: | |
mov edi, dword ptr [rsp + 0x68] ; 0x0003d0 8b 7c 24 68 | |
lea ecx, dword ptr [rdi + rbp*4] ; 0x0003d4 8d 0c af | |
mov ebx, dword ptr [r15 + rcx] ; 0x0003d7 41 8b 1c 0f | |
lea esi, dword ptr [rdi + rdx*4] ; 0x0003db 8d 34 97 | |
mov edx, dword ptr [r15 + rsi] ; 0x0003de 41 8b 14 37 | |
mov dword ptr [r15 + rcx], edx ; 0x0003e2 41 89 14 0f | |
mov dword ptr [r15 + rsi], ebx ; 0x0003e6 41 89 1c 37 | |
0x0003ea: ; 0x0003ea from: [0x0003ca] | |
add ebp, 1 ; 0x0003ea 83 c5 01 | |
cmp ebp, dword ptr [rsp + 0x60] ; 0x0003ed 3b 6c 24 60 | |
jl 0x39c ; 0x0003f1 7c a9 | |
0x0003f3: | |
nop ; 0x0003f3 66 90 | |
add rsp, 0x78 ; 0x0003f5 48 83 c4 78 | |
ret ; 0x0003f9 c3 | |
wasm-function[9]: | |
sub rsp, 8 ; 0x000000 48 83 ec 08 | |
test esi, esi ; 0x000004 85 f6 | |
je 0x2f ; 0x000006 0f 84 23 00 00 00 | |
0x00000c: | |
add esi, -1 ; 0x00000c 83 c6 ff | |
mov ebx, esi ; 0x00000f 8b de | |
xor eax, eax ; 0x000011 33 c0 | |
0x000013: ; 0x000013 from: [0x000028] | |
mov edx, edi ; 0x000013 8b d7 | |
and edx, 1 ; 0x000015 83 e2 01 | |
mov ecx, ebx ; 0x000018 8b cb | |
shl edx, cl ; 0x00001a d3 e2 | |
or eax, edx ; 0x00001c 0b c2 | |
shr edi, 1 ; 0x00001e d1 ef | |
add ecx, -1 ; 0x000020 83 c1 ff | |
mov ebx, ecx ; 0x000023 8b d9 | |
cmp ecx, 0xff ; 0x000025 83 f9 ff | |
jne 0x13 ; 0x000028 75 e9 | |
0x00002a: | |
jmp 0x31 ; 0x00002a e9 02 00 00 00 | |
0x00002f: | |
xor eax, eax ; 0x00002f 33 c0 | |
0x000031: ; 0x000031 from: [0x00002a] | |
nop ; 0x000031 66 90 | |
add rsp, 8 ; 0x000033 48 83 c4 08 | |
ret ; 0x000037 c3 | |
wasm-function[10]: | |
sub rsp, 0x28 ; 0x000000 48 83 ec 28 | |
cmp qword ptr [r14 + 0x28], rsp ; 0x000004 49 39 66 28 | |
jae 0x7a ; 0x000008 0f 83 6c 00 00 00 | |
0x00000e: | |
mov esi, dword ptr [r15 + 4] ; 0x00000e 41 8b 77 04 | |
sub esi, 0x10 ; 0x000012 83 ee 10 | |
mov dword ptr [rsp + 0x1c], esi ; 0x000015 89 74 24 1c | |
mov dword ptr [r15 + 4], esi ; 0x000019 41 89 77 04 | |
mov dword ptr [r15 + rsi], edi ; 0x00001d 41 89 3c 37 | |
mov edi, 0x10 ; 0x000021 bf 10 00 00 00 | |
mov qword ptr [rsp], r14 ; 0x000026 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0xb0] ; 0x00002a 49 8b 86 b0 00 00 00 | |
mov r14, qword ptr [r14 + 0xb8] ; 0x000031 4d 8b b6 b8 00 00 00 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000038 4d 8b 7e 18 | |
call rax ; 0x00003c ff d0 | |
mov r14, qword ptr [rsp] ; 0x00003e 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000042 4d 8b 7e 18 | |
mov eax, dword ptr [rsp + 0x1c] ; 0x000046 8b 44 24 1c | |
add eax, 0x10 ; 0x00004a 83 c0 10 | |
mov dword ptr [r15 + 4], eax ; 0x00004d 41 89 47 04 | |
xor eax, eax ; 0x000051 33 c0 | |
nop ; 0x000053 66 90 | |
add rsp, 0x28 ; 0x000055 48 83 c4 28 | |
ret ; 0x000059 c3 | |
wasm-function[0]: | |
sub rsp, 0x18 ; 0x000000 48 83 ec 18 | |
mov qword ptr [rsp], r14 ; 0x000004 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x30] ; 0x000008 49 8b 46 30 | |
mov r14, qword ptr [r14 + 0x38] ; 0x00000c 4d 8b 76 38 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000010 4d 8b 7e 18 | |
call rax ; 0x000014 ff d0 | |
mov r14, qword ptr [rsp] ; 0x000016 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x00001a 4d 8b 7e 18 | |
nop ; 0x00001e 66 90 | |
add rsp, 0x18 ; 0x000020 48 83 c4 18 | |
ret ; 0x000024 c3 | |
wasm-function[1]: | |
sub rsp, 0x18 ; 0x000000 48 83 ec 18 | |
mov qword ptr [rsp], r14 ; 0x000004 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x50] ; 0x000008 49 8b 46 50 | |
mov r14, qword ptr [r14 + 0x58] ; 0x00000c 4d 8b 76 58 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000010 4d 8b 7e 18 | |
call rax ; 0x000014 ff d0 | |
mov r14, qword ptr [rsp] ; 0x000016 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x00001a 4d 8b 7e 18 | |
nop ; 0x00001e 66 90 | |
add rsp, 0x18 ; 0x000020 48 83 c4 18 | |
ret ; 0x000024 c3 | |
wasm-function[2]: | |
sub rsp, 0x18 ; 0x000000 48 83 ec 18 | |
mov qword ptr [rsp], r14 ; 0x000004 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x70] ; 0x000008 49 8b 46 70 | |
mov r14, qword ptr [r14 + 0x78] ; 0x00000c 4d 8b 76 78 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000010 4d 8b 7e 18 | |
call rax ; 0x000014 ff d0 | |
mov r14, qword ptr [rsp] ; 0x000016 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x00001a 4d 8b 7e 18 | |
nop ; 0x00001e 66 90 | |
add rsp, 0x18 ; 0x000020 48 83 c4 18 | |
ret ; 0x000024 c3 | |
wasm-function[3]: | |
sub rsp, 0x18 ; 0x000000 48 83 ec 18 | |
mov qword ptr [rsp], r14 ; 0x000004 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0x90] ; 0x000008 49 8b 86 90 00 00 00 | |
mov r14, qword ptr [r14 + 0x98] ; 0x00000f 4d 8b b6 98 00 00 00 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000016 4d 8b 7e 18 | |
call rax ; 0x00001a ff d0 | |
mov r14, qword ptr [rsp] ; 0x00001c 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000020 4d 8b 7e 18 | |
nop ; 0x000024 66 90 | |
add rsp, 0x18 ; 0x000026 48 83 c4 18 | |
ret ; 0x00002a c3 | |
wasm-function[4]: | |
sub rsp, 0x18 ; 0x000000 48 83 ec 18 | |
mov qword ptr [rsp], r14 ; 0x000004 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0xb0] ; 0x000008 49 8b 86 b0 00 00 00 | |
mov r14, qword ptr [r14 + 0xb8] ; 0x00000f 4d 8b b6 b8 00 00 00 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000016 4d 8b 7e 18 | |
call rax ; 0x00001a ff d0 | |
mov r14, qword ptr [rsp] ; 0x00001c 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000020 4d 8b 7e 18 | |
nop ; 0x000024 66 90 | |
add rsp, 0x18 ; 0x000026 48 83 c4 18 | |
ret ; 0x00002a c3 | |
wasm-function[5]: | |
sub rsp, 0x18 ; 0x000000 48 83 ec 18 | |
mov qword ptr [rsp], r14 ; 0x000004 4c 89 34 24 | |
mov rax, qword ptr [r14 + 0xd0] ; 0x000008 49 8b 86 d0 00 00 00 | |
mov r14, qword ptr [r14 + 0xd8] ; 0x00000f 4d 8b b6 d8 00 00 00 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000016 4d 8b 7e 18 | |
call rax ; 0x00001a ff d0 | |
mov r14, qword ptr [rsp] ; 0x00001c 4c 8b 34 24 | |
mov r15, qword ptr [r14 + 0x18] ; 0x000020 4d 8b 7e 18 | |
nop ; 0x000024 66 90 | |
add rsp, 0x18 ; 0x000026 48 83 c4 18 | |
ret ; 0x00002a c3 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(module | |
(type $FUNCSIG$ii (func (param i32) (result i32))) | |
(type $FUNCSIG$vi (func (param i32))) | |
(type $FUNCSIG$dd (func (param f64) (result f64))) | |
(type $FUNCSIG$ff (func (param f32) (result f32))) | |
(type $FUNCSIG$iii (func (param i32 i32) (result i32))) | |
(import "env" "_ZdaPv" (func $_ZdaPv (param i32))) | |
(import "env" "_Znaj" (func $_Znaj (param i32) (result i32))) | |
(import "env" "cosf" (func $cosf (param f32) (result f32))) | |
(import "env" "log" (func $log (param f64) (result f64))) | |
(import "env" "printf" (func $printf (param i32 i32) (result i32))) | |
(import "env" "sinf" (func $sinf (param f32) (result f32))) | |
(table 0 anyfunc) | |
(memory $0 1) | |
(data (i32.const 16) "%d\00") | |
(export "memory" (memory $0)) | |
(export "_ZN3FFTC2Ei" (func $_ZN3FFTC2Ei)) | |
(export "_ZN3FFTD2Ev" (func $_ZN3FFTD2Ev)) | |
(export "_ZN3FFT3fftEPfPKf" (func $_ZN3FFT3fftEPfPKf)) | |
(export "_ZN3FFT10bitreverseEji" (func $_ZN3FFT10bitreverseEji)) | |
(export "main" (func $main)) | |
(func $_ZN3FFTC2Ei (; 6 ;) (param $0 i32) (param $1 i32) (result i32) | |
(local $2 i64) | |
(local $3 i32) | |
(i32.store | |
(get_local $0) | |
(call $_Znaj | |
(tee_local $3 | |
(select | |
(i32.const -1) | |
(i32.wrap/i64 | |
(tee_local $2 | |
(i64.shl | |
(i64.extend_u/i32 | |
(get_local $1) | |
) | |
(i64.const 2) | |
) | |
) | |
) | |
(i32.wrap/i64 | |
(i64.shr_u | |
(get_local $2) | |
(i64.const 32) | |
) | |
) | |
) | |
) | |
) | |
) | |
(set_local $3 | |
(call $_Znaj | |
(get_local $3) | |
) | |
) | |
(i32.store offset=8 | |
(get_local $0) | |
(get_local $1) | |
) | |
(i32.store offset=4 | |
(get_local $0) | |
(get_local $3) | |
) | |
(get_local $0) | |
) | |
(func $_ZN3FFTD2Ev (; 7 ;) (param $0 i32) (result i32) | |
(local $1 i32) | |
(block $label$0 | |
(br_if $label$0 | |
(i32.eqz | |
(tee_local $1 | |
(i32.load | |
(get_local $0) | |
) | |
) | |
) | |
) | |
(call $_ZdaPv | |
(get_local $1) | |
) | |
) | |
(block $label$1 | |
(br_if $label$1 | |
(i32.eqz | |
(tee_local $1 | |
(i32.load offset=4 | |
(get_local $0) | |
) | |
) | |
) | |
) | |
(call $_ZdaPv | |
(get_local $1) | |
) | |
) | |
(get_local $0) | |
) | |
(func $_ZN3FFT3fftEPfPKf (; 8 ;) (param $0 i32) (param $1 i32) (param $2 i32) | |
(local $3 i32) | |
(local $4 f64) | |
(local $5 i32) | |
(local $6 f32) | |
(local $7 i32) | |
(local $8 i32) | |
(local $9 i32) | |
(local $10 i32) | |
(local $11 i32) | |
(local $12 f32) | |
(local $13 f32) | |
(local $14 f32) | |
(local $15 f32) | |
(local $16 f32) | |
(local $17 i32) | |
(local $18 i32) | |
(local $19 i32) | |
(local $20 i32) | |
(local $21 i32) | |
(local $22 i32) | |
(local $23 i32) | |
(local $24 i32) | |
(set_local $5 | |
(i32.trunc_s/f64 | |
(f64.div | |
(f64.promote/f32 | |
(f32.demote/f64 | |
(call $log | |
(tee_local $4 | |
(f64.convert_s/i32 | |
(tee_local $3 | |
(i32.load offset=8 | |
(get_local $0) | |
) | |
) | |
) | |
) | |
) | |
) | |
) | |
(f64.const 0.6931471805599453) | |
) | |
) | |
) | |
(block $label$0 | |
(br_if $label$0 | |
(i32.lt_s | |
(get_local $3) | |
(i32.const 1) | |
) | |
) | |
(set_local $23 | |
(i32.load offset=4 | |
(get_local $0) | |
) | |
) | |
(set_local $24 | |
(i32.load | |
(get_local $0) | |
) | |
) | |
(set_local $22 | |
(i32.const 0) | |
) | |
(loop $label$1 | |
(i32.store | |
(get_local $24) | |
(i32.load | |
(get_local $2) | |
) | |
) | |
(i32.store | |
(get_local $23) | |
(i32.const 0) | |
) | |
(set_local $23 | |
(i32.add | |
(get_local $23) | |
(i32.const 4) | |
) | |
) | |
(set_local $24 | |
(i32.add | |
(get_local $24) | |
(i32.const 4) | |
) | |
) | |
(set_local $2 | |
(i32.add | |
(get_local $2) | |
(i32.const 4) | |
) | |
) | |
(br_if $label$1 | |
(i32.lt_s | |
(tee_local $22 | |
(i32.add | |
(get_local $22) | |
(i32.const 1) | |
) | |
) | |
(get_local $3) | |
) | |
) | |
) | |
) | |
(block $label$2 | |
(br_if $label$2 | |
(i32.lt_s | |
(get_local $5) | |
(i32.const 1) | |
) | |
) | |
(set_local $6 | |
(f32.demote/f64 | |
(f64.div | |
(f64.const -6.283185307179586) | |
(get_local $4) | |
) | |
) | |
) | |
(set_local $7 | |
(i32.add | |
(get_local $5) | |
(i32.const -1) | |
) | |
) | |
(set_local $11 | |
(i32.add | |
(get_local $0) | |
(i32.const 4) | |
) | |
) | |
(set_local $18 | |
(get_local $5) | |
) | |
(set_local $19 | |
(get_local $3) | |
) | |
(set_local $20 | |
(i32.const 1) | |
) | |
(loop $label$3 | |
(set_local $18 | |
(i32.add | |
(get_local $18) | |
(i32.const -1) | |
) | |
) | |
(set_local $8 | |
(i32.div_s | |
(get_local $19) | |
(i32.const 2) | |
) | |
) | |
(block $label$4 | |
(br_if $label$4 | |
(i32.lt_s | |
(get_local $3) | |
(i32.const 1) | |
) | |
) | |
(set_local $22 | |
(i32.const 0) | |
) | |
(loop $label$5 | |
(block $label$6 | |
(br_if $label$6 | |
(i32.lt_s | |
(get_local $19) | |
(i32.const 2) | |
) | |
) | |
(set_local $10 | |
(i32.load | |
(get_local $11) | |
) | |
) | |
(set_local $9 | |
(i32.load | |
(get_local $0) | |
) | |
) | |
(set_local $21 | |
(i32.const 1) | |
) | |
(loop $label$7 | |
(set_local $2 | |
(i32.shr_s | |
(get_local $22) | |
(get_local $18) | |
) | |
) | |
(set_local $24 | |
(i32.const 0) | |
) | |
(set_local $23 | |
(get_local $7) | |
) | |
(loop $label$8 | |
(set_local $24 | |
(i32.or | |
(i32.shl | |
(i32.and | |
(get_local $2) | |
(i32.const 1) | |
) | |
(get_local $23) | |
) | |
(get_local $24) | |
) | |
) | |
(set_local $2 | |
(i32.shr_u | |
(get_local $2) | |
(i32.const 1) | |
) | |
) | |
(br_if $label$8 | |
(i32.ne | |
(tee_local $23 | |
(i32.add | |
(get_local $23) | |
(i32.const -1) | |
) | |
) | |
(i32.const -1) | |
) | |
) | |
) | |
(set_local $12 | |
(call $sinf | |
(tee_local $14 | |
(f32.mul | |
(get_local $6) | |
(f32.convert_u/i32 | |
(get_local $24) | |
) | |
) | |
) | |
) | |
) | |
(set_local $13 | |
(f32.load | |
(tee_local $24 | |
(i32.add | |
(get_local $10) | |
(tee_local $2 | |
(i32.shl | |
(i32.add | |
(get_local $22) | |
(get_local $8) | |
) | |
(i32.const 2) | |
) | |
) | |
) | |
) | |
) | |
) | |
(set_local $14 | |
(call $cosf | |
(get_local $14) | |
) | |
) | |
(f32.store | |
(tee_local $23 | |
(i32.add | |
(get_local $9) | |
(get_local $2) | |
) | |
) | |
(f32.sub | |
(f32.load | |
(tee_local $2 | |
(i32.add | |
(get_local $9) | |
(tee_local $17 | |
(i32.shl | |
(get_local $22) | |
(i32.const 2) | |
) | |
) | |
) | |
) | |
) | |
(tee_local $16 | |
(f32.add | |
(f32.mul | |
(get_local $14) | |
(tee_local $15 | |
(f32.load | |
(get_local $23) | |
) | |
) | |
) | |
(f32.mul | |
(get_local $12) | |
(get_local $13) | |
) | |
) | |
) | |
) | |
) | |
(f32.store | |
(get_local $24) | |
(f32.sub | |
(f32.load | |
(tee_local $23 | |
(i32.add | |
(get_local $10) | |
(get_local $17) | |
) | |
) | |
) | |
(tee_local $12 | |
(f32.sub | |
(f32.mul | |
(get_local $14) | |
(get_local $13) | |
) | |
(f32.mul | |
(get_local $12) | |
(get_local $15) | |
) | |
) | |
) | |
) | |
) | |
(f32.store | |
(get_local $2) | |
(f32.add | |
(get_local $16) | |
(f32.load | |
(get_local $2) | |
) | |
) | |
) | |
(f32.store | |
(get_local $23) | |
(f32.add | |
(get_local $12) | |
(f32.load | |
(get_local $23) | |
) | |
) | |
) | |
(set_local $22 | |
(i32.add | |
(get_local $22) | |
(i32.const 1) | |
) | |
) | |
(set_local $2 | |
(i32.lt_s | |
(get_local $21) | |
(get_local $8) | |
) | |
) | |
(set_local $21 | |
(i32.add | |
(get_local $21) | |
(i32.const 1) | |
) | |
) | |
(br_if $label$7 | |
(get_local $2) | |
) | |
) | |
) | |
(br_if $label$5 | |
(i32.lt_s | |
(tee_local $22 | |
(i32.add | |
(get_local $22) | |
(get_local $8) | |
) | |
) | |
(get_local $3) | |
) | |
) | |
) | |
) | |
(set_local $2 | |
(i32.eq | |
(get_local $20) | |
(get_local $5) | |
) | |
) | |
(set_local $19 | |
(get_local $8) | |
) | |
(set_local $20 | |
(i32.add | |
(get_local $20) | |
(i32.const 1) | |
) | |
) | |
(br_if $label$3 | |
(i32.eqz | |
(get_local $2) | |
) | |
) | |
) | |
) | |
(block $label$9 | |
(br_if $label$9 | |
(i32.lt_s | |
(get_local $3) | |
(i32.const 1) | |
) | |
) | |
(set_local $13 | |
(f32.convert_s/i32 | |
(get_local $3) | |
) | |
) | |
(set_local $2 | |
(i32.load offset=4 | |
(get_local $0) | |
) | |
) | |
(set_local $23 | |
(i32.load | |
(get_local $0) | |
) | |
) | |
(set_local $22 | |
(i32.const 0) | |
) | |
(set_local $24 | |
(get_local $1) | |
) | |
(loop $label$10 | |
(f32.store | |
(get_local $24) | |
(f32.div | |
(f32.sqrt | |
(f32.add | |
(f32.mul | |
(tee_local $12 | |
(f32.load | |
(get_local $23) | |
) | |
) | |
(get_local $12) | |
) | |
(f32.mul | |
(tee_local $12 | |
(f32.load | |
(get_local $2) | |
) | |
) | |
(get_local $12) | |
) | |
) | |
) | |
(get_local $13) | |
) | |
) | |
(set_local $24 | |
(i32.add | |
(get_local $24) | |
(i32.const 4) | |
) | |
) | |
(set_local $2 | |
(i32.add | |
(get_local $2) | |
(i32.const 4) | |
) | |
) | |
(set_local $23 | |
(i32.add | |
(get_local $23) | |
(i32.const 4) | |
) | |
) | |
(br_if $label$10 | |
(i32.lt_s | |
(tee_local $22 | |
(i32.add | |
(get_local $22) | |
(i32.const 1) | |
) | |
) | |
(get_local $3) | |
) | |
) | |
) | |
(br_if $label$9 | |
(i32.lt_s | |
(get_local $3) | |
(i32.const 1) | |
) | |
) | |
(set_local $21 | |
(i32.add | |
(get_local $5) | |
(i32.const -1) | |
) | |
) | |
(set_local $22 | |
(i32.const 0) | |
) | |
(loop $label$11 | |
(set_local $24 | |
(i32.const 0) | |
) | |
(block $label$12 | |
(br_if $label$12 | |
(i32.eqz | |
(get_local $5) | |
) | |
) | |
(set_local $24 | |
(i32.const 0) | |
) | |
(set_local $2 | |
(get_local $21) | |
) | |
(set_local $23 | |
(get_local $22) | |
) | |
(loop $label$13 | |
(set_local $24 | |
(i32.or | |
(i32.shl | |
(i32.and | |
(get_local $23) | |
(i32.const 1) | |
) | |
(get_local $2) | |
) | |
(get_local $24) | |
) | |
) | |
(set_local $23 | |
(i32.shr_u | |
(get_local $23) | |
(i32.const 1) | |
) | |
) | |
(br_if $label$13 | |
(i32.ne | |
(tee_local $2 | |
(i32.add | |
(get_local $2) | |
(i32.const -1) | |
) | |
) | |
(i32.const -1) | |
) | |
) | |
) | |
) | |
(block $label$14 | |
(br_if $label$14 | |
(i32.le_s | |
(get_local $24) | |
(get_local $22) | |
) | |
) | |
(set_local $23 | |
(i32.load | |
(tee_local $2 | |
(i32.add | |
(get_local $1) | |
(i32.shl | |
(get_local $22) | |
(i32.const 2) | |
) | |
) | |
) | |
) | |
) | |
(i32.store | |
(get_local $2) | |
(i32.load | |
(tee_local $24 | |
(i32.add | |
(get_local $1) | |
(i32.shl | |
(get_local $24) | |
(i32.const 2) | |
) | |
) | |
) | |
) | |
) | |
(i32.store | |
(get_local $24) | |
(get_local $23) | |
) | |
) | |
(br_if $label$11 | |
(i32.lt_s | |
(tee_local $22 | |
(i32.add | |
(get_local $22) | |
(i32.const 1) | |
) | |
) | |
(get_local $3) | |
) | |
) | |
) | |
) | |
) | |
(func $_ZN3FFT10bitreverseEji (; 9 ;) (param $0 i32) (param $1 i32) (result i32) | |
(local $2 i32) | |
(block $label$0 | |
(br_if $label$0 | |
(i32.eqz | |
(get_local $1) | |
) | |
) | |
(set_local $1 | |
(i32.add | |
(get_local $1) | |
(i32.const -1) | |
) | |
) | |
(set_local $2 | |
(i32.const 0) | |
) | |
(loop $label$1 | |
(set_local $2 | |
(i32.or | |
(i32.shl | |
(i32.and | |
(get_local $0) | |
(i32.const 1) | |
) | |
(get_local $1) | |
) | |
(get_local $2) | |
) | |
) | |
(set_local $0 | |
(i32.shr_u | |
(get_local $0) | |
(i32.const 1) | |
) | |
) | |
(br_if $label$1 | |
(i32.ne | |
(tee_local $1 | |
(i32.add | |
(get_local $1) | |
(i32.const -1) | |
) | |
) | |
(i32.const -1) | |
) | |
) | |
) | |
(return | |
(get_local $2) | |
) | |
) | |
(i32.const 0) | |
) | |
(func $main (; 10 ;) (param $0 i32) (param $1 i32) (result i32) | |
(local $2 i32) | |
(i32.store offset=4 | |
(i32.const 0) | |
(tee_local $2 | |
(i32.sub | |
(i32.load offset=4 | |
(i32.const 0) | |
) | |
(i32.const 16) | |
) | |
) | |
) | |
(i32.store | |
(get_local $2) | |
(get_local $0) | |
) | |
(drop | |
(call $printf | |
(i32.const 16) | |
(get_local $2) | |
) | |
) | |
(i32.store offset=4 | |
(i32.const 0) | |
(i32.add | |
(get_local $2) | |
(i32.const 16) | |
) | |
) | |
(i32.const 0) | |
) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment