Skip to content

Instantly share code, notes, and snippets.

@segin
Created November 19, 2018 05:48
Show Gist options
  • Save segin/863a3feb11da88ab97046854d2ae837f to your computer and use it in GitHub Desktop.
Save segin/863a3feb11da88ab97046854d2ae837f to your computer and use it in GitHub Desktop.
WASM test
#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);
}
}
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
(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