// File: /workspace/github_c_makefile_star2_O3/halcy[P]quasi_crystals_bot/Quasi.c
// Function: quasi
float quasi(vec2_t pos, const float phase) {
    float theta = atan2(-pos.y,pos.x);
    float r = log(vec2abs(pos));
    float C=0.0f;
    float lin = params[0];
    float pol = params[1];
    float outflow_lin = params[2];
    float outflow_pol = params[3];
    
    float planewaves = params[4];
    float stripes = params[5];
    float phasespeed = params[6];
    //printf("pol pw %f / str %f / ps %f\n", planewaves, stripes, phasespeed);
    if(pol != 0.0) {
        for(float t=0.0f; t<planewaves; t++) {
            C += pol * cos((theta * cos(t * (M_PI / planewaves)) - r * sin(t * (M_PI / planewaves))) * stripes + phase * phasespeed);
        }
    }
    
    planewaves = params[7];
    stripes = params[8];
    phasespeed = params[9];
    //printf("lin pw %f / str %f / ps %f\n", planewaves, stripes, phasespeed);
    if(lin != 0.0) {
        for(float t=0.0f; t<planewaves; t++) {        
            C += lin * cos((pos.x * cos(t * (M_PI / planewaves)) + pos.y * sin(t * (M_PI / planewaves))) * 2.0f * M_PI * stripes + phase * phasespeed);
        }
    }
    
    planewaves = params[10];
    stripes = params[11];
    phasespeed = params[12];
    //printf("of pol pw %f / str %f / ps %f\n", planewaves, stripes, phasespeed);
    if(outflow_pol != 0.0) {
        for(float t=0.0f; t<planewaves; t++) {
            C += outflow_pol * cos(fabs(theta * cos(t * (M_PI / planewaves)) - r * sin(t * (M_PI / planewaves))) * stripes + phase * phasespeed);
        }
    }
    
    planewaves = params[13];
    stripes = params[14];
    phasespeed = params[15];
    //printf("of lin pw %f / str %f / ps %f\n", planewaves, stripes, phasespeed);
    if(outflow_lin != 0.0) {
        for(float t=0.0f; t<planewaves; t++) {        
            C += outflow_lin * cos(fabs(pos.x * cos(t * (M_PI / planewaves)) + pos.y * sin(t * (M_PI / planewaves))) * 2.0f * M_PI * stripes + phase * phasespeed);
        }
    }
    float c=((C+planewaves)/(planewaves*2.0f));
    return c;
}

// Assembly:
pushq %r14
pushq %rbx
leaq -0xc8(%rsp), %rsp
movshdup %xmm0, %xmm2            # xmm2 = xmm0[1,1,3,3]
movaps %xmm0, %xmm3
movaps %xmm0, 0x40(%rsp)
movaps 0xc71a(%rip), %xmm0     # 0xe020
movss %xmm1, 0xc(%rsp)
xorps %xmm2, %xmm0
movaps %xmm2, 0x70(%rsp)
xorps %xmm2, %xmm2
cvtss2sd %xmm3, %xmm2
cvtss2sd %xmm0, %xmm0
movaps %xmm2, %xmm1
movsd %xmm2, 0x68(%rsp)
callq 0x1170
movaps 0x70(%rsp), %xmm1
movaps 0x40(%rsp), %xmm2
movss 0xc6d1(%rip), %xmm4     # 0xe010
cvtsd2ss %xmm0, %xmm0
mulss %xmm2, %xmm2
mulss %xmm1, %xmm1
addss %xmm2, %xmm1
xorps %xmm2, %xmm2
rsqrtss %xmm1, %xmm2
movaps %xmm1, %xmm3
andps 0xc6d0(%rip), %xmm1     # 0xe030
movss %xmm0, 0x3c(%rsp)
cmpltss 0xc6a9(%rip), %xmm1     # 0xe018
mulss %xmm2, %xmm3
mulss %xmm3, %xmm4
mulss %xmm2, %xmm3
addss 0xc691(%rip), %xmm3     # 0xe014
mulss %xmm4, %xmm3
andnps %xmm3, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
callq 0x10f0
cvtsd2ss %xmm0, %xmm0
xorps %xmm1, %xmm1
movss %xmm0, 0x38(%rsp)
movss 0x11b99(%rip), %xmm0    # 0x13544
ucomiss %xmm0, %xmm1
movss 0x11b8a(%rip), %xmm1    # 0x13540
movss %xmm1, 0x5c(%rsp)
movss 0x11b84(%rip), %xmm1    # 0x13548
movss %xmm1, 0x64(%rsp)
movss 0x11b7a(%rip), %xmm1    # 0x1354c
movss %xmm1, 0x60(%rsp)
xorps %xmm1, %xmm1
je 0x1b0c
movss 0x11b67(%rip), %xmm1    # 0x13550
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm1
movss %xmm1, 0x4(%rsp)
xorps %xmm1, %xmm1
jbe 0x1b0c
xorps %xmm1, %xmm1
cvtss2sd 0x4(%rsp), %xmm1
movsd 0xc641(%rip), %xmm3     # 0xe050
cvtss2sd %xmm0, %xmm0
leaq 0xc0(%rsp), %rbx
leaq 0xb8(%rsp), %r14
movsd %xmm0, 0x28(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x3c(%rsp), %xmm0
divsd %xmm1, %xmm3
xorps %xmm1, %xmm1
cvtss2sd 0x11b13(%rip), %xmm1    # 0x13554
movsd %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x38(%rsp), %xmm0
movsd %xmm1, 0x10(%rsp)
xorps %xmm1, %xmm1
movsd %xmm0, 0x18(%rsp)
movss 0x11af1(%rip), %xmm0    # 0x13558
mulss 0xc(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x50(%rsp)
movsd %xmm3, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
movq %rbx, %rdi
movq %r14, %rsi
movss %xmm1, 0x40(%rsp)
movss %xmm2, 0x8(%rsp)
mulsd 0xc5ba(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
callq 0x10e0
movsd 0xb8(%rsp), %xmm0
movsd 0xc0(%rsp), %xmm1
mulsd 0x20(%rsp), %xmm0
mulsd 0x18(%rsp), %xmm1
subsd %xmm1, %xmm0
mulsd 0x10(%rsp), %xmm0
addsd 0x50(%rsp), %xmm0
callq 0x1100
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x28(%rsp), %xmm0
movss 0x8(%rsp), %xmm2
addss 0xc50f(%rip), %xmm2     # 0xe008
ucomiss 0x4(%rsp), %xmm2
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm1
jb 0x1a7d
movss 0x5c(%rsp), %xmm2
ucomiss 0xc503(%rip), %xmm2     # 0xe01c
je 0x1c3b
movss 0x11a35(%rip), %xmm0    # 0x1355c
xorps %xmm3, %xmm3
ucomiss %xmm3, %xmm0
movss %xmm0, 0x4(%rsp)
jbe 0x1c3b
xorps %xmm0, %xmm0
cvtss2sd 0x4(%rsp), %xmm0
movsd 0xc506(%rip), %xmm4     # 0xe050
cvtss2sd 0x11a0e(%rip), %xmm6    # 0x13560
cvtss2sd 0x70(%rsp), %xmm5
cvtss2sd %xmm2, %xmm2
leaq 0xb0(%rsp), %rbx
leaq 0xa8(%rsp), %r14
mulsd 0xc4ec(%rip), %xmm6     # 0xe060
movsd %xmm2, 0x18(%rsp)
divsd %xmm0, %xmm4
movss 0x119de(%rip), %xmm0    # 0x13564
mulss 0xc(%rsp), %xmm0
mulsd %xmm6, %xmm5
mulsd 0x68(%rsp), %xmm6
cvtss2sd %xmm0, %xmm0
movsd %xmm5, 0x20(%rsp)
movsd %xmm6, 0x28(%rsp)
movsd %xmm0, 0x10(%rsp)
movsd %xmm4, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
movq %rbx, %rdi
movq %r14, %rsi
movss %xmm1, 0x40(%rsp)
movss %xmm3, 0x8(%rsp)
mulsd 0xc485(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
callq 0x10e0
movsd 0xa8(%rsp), %xmm1
movsd 0xb0(%rsp), %xmm0
mulsd 0x28(%rsp), %xmm1
mulsd 0x20(%rsp), %xmm0
addsd %xmm1, %xmm0
addsd 0x10(%rsp), %xmm0
callq 0x1100
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x18(%rsp), %xmm0
movss 0x8(%rsp), %xmm3
addss 0xc3e0(%rip), %xmm3     # 0xe008
ucomiss 0x4(%rsp), %xmm3
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm1
jb 0x1bb2
xorps %xmm0, %xmm0
movss 0x60(%rsp), %xmm2
ucomiss %xmm0, %xmm2
je 0x1d7f
movss 0x11913(%rip), %xmm3    # 0x13568
ucomiss %xmm0, %xmm3
movss %xmm3, 0x4(%rsp)
jbe 0x1d7f
xorps %xmm0, %xmm0
cvtss2sd 0x4(%rsp), %xmm0
movsd 0xc3db(%rip), %xmm3     # 0xe050
leaq 0xa0(%rsp), %rbx
leaq 0x98(%rsp), %r14
divsd %xmm0, %xmm3
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
xorps %xmm2, %xmm2
cvtss2sd 0x118d1(%rip), %xmm2    # 0x1356c
movsd %xmm0, 0x28(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x3c(%rsp), %xmm0
movsd %xmm2, 0x10(%rsp)
movsd %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x38(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movss 0x118a3(%rip), %xmm0    # 0x13570
mulss 0xc(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x50(%rsp)
xorps %xmm0, %xmm0
movsd %xmm3, 0x30(%rsp)
movss %xmm0, 0x8(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
movss %xmm1, 0x40(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x8(%rsp), %xmm0
mulsd 0xc34f(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
callq 0x10e0
movsd 0x98(%rsp), %xmm0
movsd 0xa0(%rsp), %xmm1
mulsd 0x20(%rsp), %xmm0
mulsd 0x18(%rsp), %xmm1
subsd %xmm1, %xmm0
andpd 0xc302(%rip), %xmm0     # 0xe040
mulsd 0x10(%rsp), %xmm0
addsd 0x50(%rsp), %xmm0
callq 0x1100
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x28(%rsp), %xmm0
addsd %xmm0, %xmm1
movss 0x8(%rsp), %xmm0
addss 0xc298(%rip), %xmm0     # 0xe008
ucomiss 0x4(%rsp), %xmm0
cvtsd2ss %xmm1, %xmm1
jb 0x1ce6
movss 0x64(%rsp), %xmm2
ucomiss 0xc290(%rip), %xmm2     # 0xe01c
movss 0x117e0(%rip), %xmm3    # 0x13574
je 0x1ebe
xorpd %xmm4, %xmm4
ucomiss %xmm4, %xmm3
jbe 0x1ebe
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
movsd 0xc29a(%rip), %xmm5     # 0xe050
xorps %xmm6, %xmm6
cvtss2sd 0x70(%rsp), %xmm6
leaq 0x90(%rsp), %rbx
leaq 0x88(%rsp), %r14
movss %xmm3, 0x4(%rsp)
divsd %xmm0, %xmm5
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
xorps %xmm2, %xmm2
cvtss2sd 0x1178d(%rip), %xmm2    # 0x13578
movsd %xmm6, 0x18(%rsp)
mulsd 0xc267(%rip), %xmm2     # 0xe060
movsd %xmm0, 0x28(%rsp)
movss 0xc(%rsp), %xmm0
mulss 0x1176f(%rip), %xmm0    # 0x1357c
movsd %xmm2, 0x20(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
movsd %xmm5, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm4, %xmm0
movq %rbx, %rdi
movq %r14, %rsi
movss %xmm1, 0x40(%rsp)
movss %xmm4, 0x8(%rsp)
mulsd 0xc214(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
callq 0x10e0
movsd 0x88(%rsp), %xmm1
movsd 0x90(%rsp), %xmm0
mulsd 0x68(%rsp), %xmm1
mulsd 0x18(%rsp), %xmm0
addsd %xmm1, %xmm0
andpd 0xc1c7(%rip), %xmm0     # 0xe040
mulsd 0x20(%rsp), %xmm0
addsd 0x10(%rsp), %xmm0
callq 0x1100
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x28(%rsp), %xmm0
movss 0x8(%rsp), %xmm4
movss 0x4(%rsp), %xmm3
addss 0xc15b(%rip), %xmm4     # 0xe008
ucomiss %xmm3, %xmm4
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm1
jb 0x1e23
addss %xmm3, %xmm1
addss %xmm3, %xmm3
divss %xmm3, %xmm1
movaps %xmm1, %xmm0
leaq 0xc8(%rsp), %rsp
popq %rbx
popq %r14
retq