// File: /workspace/github_c_makefile_star2_O1/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
movaps %xmm0, %xmm3
movaps %xmm0, 0x40(%rsp)
movshdup %xmm0, %xmm2            # xmm2 = xmm0[1,1,3,3]
movaps %xmm2, 0x70(%rsp)
movaps 0xca65(%rip), %xmm0     # 0xe020
xorps %xmm2, %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm2, %xmm2
cvtss2sd %xmm3, %xmm2
movss %xmm1, 0xc(%rsp)
movsd %xmm2, 0x68(%rsp)
movaps %xmm2, %xmm1
callq 0x1170
movaps 0x70(%rsp), %xmm1
movaps 0x40(%rsp), %xmm2
mulss %xmm2, %xmm2
mulss %xmm1, %xmm1
addss %xmm2, %xmm1
xorps %xmm2, %xmm2
rsqrtss %xmm1, %xmm2
movaps %xmm1, %xmm3
mulss %xmm2, %xmm3
movss 0xca07(%rip), %xmm4     # 0xe010
mulss %xmm3, %xmm4
mulss %xmm2, %xmm3
addss 0xc9fb(%rip), %xmm3     # 0xe014
andps 0xca10(%rip), %xmm1     # 0xe030
cmpltss 0xc9ef(%rip), %xmm1     # 0xe018
mulss %xmm4, %xmm3
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x3c(%rsp)
andnps %xmm3, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
callq 0x10f0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x38(%rsp)
movss 0x10eec(%rip), %xmm0    # 0x12544
xorps %xmm1, %xmm1
ucomiss %xmm0, %xmm1
movss 0x10eda(%rip), %xmm1    # 0x12540
movss %xmm1, 0x5c(%rsp)
movss 0x10ed4(%rip), %xmm1    # 0x12548
movss %xmm1, 0x64(%rsp)
movss 0x10eca(%rip), %xmm1    # 0x1254c
movss %xmm1, 0x60(%rsp)
xorps %xmm1, %xmm1
je 0x17bc
movss 0x10eb7(%rip), %xmm1    # 0x12550
xorps %xmm2, %xmm2
movss %xmm1, 0x4(%rsp)
ucomiss %xmm2, %xmm1
xorps %xmm1, %xmm1
jbe 0x17bc
xorps %xmm1, %xmm1
cvtss2sd 0x4(%rsp), %xmm1
movsd 0xc991(%rip), %xmm3     # 0xe050
divsd %xmm1, %xmm3
movsd %xmm3, 0x30(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x28(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x3c(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x38(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movss 0x10e5f(%rip), %xmm0    # 0x12558
mulss 0xc(%rsp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd 0x10e4a(%rip), %xmm1    # 0x12554
movsd %xmm1, 0x10(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x50(%rsp)
leaq 0xc0(%rsp), %rbx
leaq 0xb8(%rsp), %r14
xorps %xmm1, %xmm1
movss %xmm1, 0x40(%rsp)
movss %xmm2, 0x8(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
mulsd 0xc910(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
movq %rbx, %rdi
movq %r14, %rsi
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
movss 0x8(%rsp), %xmm2
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x28(%rsp), %xmm0
addsd %xmm0, %xmm1
addss 0xc85b(%rip), %xmm2     # 0xe008
cvtsd2ss %xmm1, %xmm1
ucomiss 0x4(%rsp), %xmm2
jb 0x172d
movss 0x5c(%rsp), %xmm2
ucomiss 0xc853(%rip), %xmm2     # 0xe01c
je 0x18ee
movss 0x10d85(%rip), %xmm0    # 0x1255c
xorps %xmm3, %xmm3
movss %xmm0, 0x4(%rsp)
ucomiss %xmm3, %xmm0
jbe 0x18ee
xorps %xmm0, %xmm0
cvtss2sd 0x4(%rsp), %xmm0
movsd 0xc856(%rip), %xmm4     # 0xe050
divsd %xmm0, %xmm4
movsd %xmm4, 0x30(%rsp)
xorps %xmm4, %xmm4
cvtss2sd 0x10d51(%rip), %xmm4    # 0x12560
cvtss2sd 0x70(%rsp), %xmm5
movss 0x10d47(%rip), %xmm0    # 0x12564
mulsd 0xc83b(%rip), %xmm4     # 0xe060
mulss 0xc(%rsp), %xmm0
cvtss2sd %xmm2, %xmm2
movsd %xmm2, 0x18(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
mulsd %xmm4, %xmm5
movsd %xmm5, 0x20(%rsp)
mulsd 0x68(%rsp), %xmm4
movsd %xmm4, 0x28(%rsp)
leaq 0xb0(%rsp), %rbx
leaq 0xa8(%rsp), %r14
movss %xmm1, 0x40(%rsp)
movss %xmm3, 0x8(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
mulsd 0xc7d8(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
movq %rbx, %rdi
movq %r14, %rsi
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
movss 0x8(%rsp), %xmm3
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x18(%rsp), %xmm0
addsd %xmm0, %xmm1
addss 0xc729(%rip), %xmm3     # 0xe008
cvtsd2ss %xmm1, %xmm1
ucomiss 0x4(%rsp), %xmm3
jb 0x1865
xorps %xmm0, %xmm0
movss 0x60(%rsp), %xmm2
ucomiss %xmm0, %xmm2
je 0x1a32
movss 0x10c60(%rip), %xmm3    # 0x12568
movss %xmm3, 0x4(%rsp)
ucomiss %xmm0, %xmm3
jbe 0x1a32
xorps %xmm0, %xmm0
cvtss2sd 0x4(%rsp), %xmm0
movsd 0xc728(%rip), %xmm3     # 0xe050
divsd %xmm0, %xmm3
movsd %xmm3, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
movsd %xmm0, 0x28(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x3c(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x38(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movss 0x10c0b(%rip), %xmm0    # 0x12570
mulss 0xc(%rsp), %xmm0
xorps %xmm2, %xmm2
cvtss2sd 0x10bf6(%rip), %xmm2    # 0x1256c
movsd %xmm2, 0x10(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x50(%rsp)
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rbx
leaq 0x98(%rsp), %r14
movss %xmm1, 0x40(%rsp)
movss %xmm0, 0x8(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x8(%rsp), %xmm0
mulsd 0xc6a2(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10e0
movsd 0x98(%rsp), %xmm0
movsd 0xa0(%rsp), %xmm1
mulsd 0x20(%rsp), %xmm0
mulsd 0x18(%rsp), %xmm1
subsd %xmm1, %xmm0
andpd 0xc64f(%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 0xc5e5(%rip), %xmm0     # 0xe008
cvtsd2ss %xmm1, %xmm1
ucomiss 0x4(%rsp), %xmm0
jb 0x1999
movss 0x64(%rsp), %xmm2
ucomiss 0xc5dd(%rip), %xmm2     # 0xe01c
movss 0x10b2d(%rip), %xmm3    # 0x12574
je 0x1b71
xorpd %xmm4, %xmm4
ucomiss %xmm4, %xmm3
jbe 0x1b71
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
movsd 0xc5e7(%rip), %xmm5     # 0xe050
divsd %xmm0, %xmm5
movsd %xmm5, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
movsd %xmm0, 0x28(%rsp)
xorps %xmm2, %xmm2
cvtss2sd 0x10aed(%rip), %xmm2    # 0x12578
movss 0xc(%rsp), %xmm0
mulss 0x10ae3(%rip), %xmm0    # 0x1257c
xorps %xmm5, %xmm5
cvtss2sd 0x70(%rsp), %xmm5
movsd %xmm5, 0x18(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
mulsd 0xc5a6(%rip), %xmm2     # 0xe060
movsd %xmm2, 0x20(%rsp)
leaq 0x90(%rsp), %rbx
leaq 0x88(%rsp), %r14
movss %xmm3, 0x4(%rsp)
movss %xmm1, 0x40(%rsp)
movss %xmm4, 0x8(%rsp)
xorps %xmm0, %xmm0
cvtss2sd %xmm4, %xmm0
mulsd 0xc567(%rip), %xmm0     # 0xe058
mulsd 0x30(%rsp), %xmm0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10e0
movsd 0x88(%rsp), %xmm1
movsd 0x90(%rsp), %xmm0
mulsd 0x68(%rsp), %xmm1
mulsd 0x18(%rsp), %xmm0
addsd %xmm1, %xmm0
andpd 0xc514(%rip), %xmm0     # 0xe040
mulsd 0x20(%rsp), %xmm0
addsd 0x10(%rsp), %xmm0
callq 0x1100
movss 0x8(%rsp), %xmm4
movss 0x4(%rsp), %xmm3
xorps %xmm1, %xmm1
cvtss2sd 0x40(%rsp), %xmm1
mulsd 0x28(%rsp), %xmm0
addsd %xmm0, %xmm1
addss 0xc4a4(%rip), %xmm4     # 0xe008
cvtsd2ss %xmm1, %xmm1
ucomiss %xmm3, %xmm4
jb 0x1ad6
addss %xmm3, %xmm1
addss %xmm3, %xmm3
divss %xmm3, %xmm1
movaps %xmm1, %xmm0
leaq 0xc8(%rsp), %rsp
popq %rbx
popq %r14
retq