// File: /workspace/github_c_makefile_star2_O2/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 -0xb8(%rsp), %rsp
movshdup %xmm0, %xmm2            # xmm2 = xmm0[1,1,3,3]
movaps %xmm0, %xmm3
movaps %xmm0, 0x20(%rsp)
movaps 0xabc6(%rip), %xmm0     # 0xc020
movss %xmm1, 0x4(%rsp)
xorps %xmm2, %xmm0
movaps %xmm2, 0x60(%rsp)
cvtss2sd %xmm3, %xmm2
cvtss2sd %xmm0, %xmm0
movaps %xmm2, %xmm1
movsd %xmm2, 0x70(%rsp)
callq 0x1170
movaps 0x60(%rsp), %xmm1
movaps 0x20(%rsp), %xmm2
movss 0xab80(%rip), %xmm4     # 0xc010
cvtsd2ss %xmm0, %xmm0
mulss %xmm2, %xmm2
mulss %xmm1, %xmm1
addss %xmm2, %xmm1
rsqrtss %xmm1, %xmm2
movaps %xmm1, %xmm3
andps 0xab82(%rip), %xmm1     # 0xc030
movss %xmm0, 0x20(%rsp)
cmpltss 0xab5b(%rip), %xmm1     # 0xc018
mulss %xmm2, %xmm3
mulss %xmm3, %xmm4
mulss %xmm2, %xmm3
addss 0xab43(%rip), %xmm3     # 0xc014
mulss %xmm4, %xmm3
andnps %xmm3, %xmm1
cvtss2sd %xmm1, %xmm0
callq 0x10f0
cvtsd2ss %xmm0, %xmm1
movss 0x10057(%rip), %xmm0    # 0x11544
xorps %xmm2, %xmm2
ucomiss %xmm0, %xmm2
cvtss2sd 0x20(%rsp), %xmm2
movsd %xmm2, 0x40(%rsp)
cvtss2sd %xmm1, %xmm1
movsd %xmm1, 0x38(%rsp)
movss 0x1002f(%rip), %xmm1    # 0x11540
movss %xmm1, 0x48(%rsp)
movss 0x10029(%rip), %xmm1    # 0x11548
movss %xmm1, 0x5c(%rsp)
movss 0x1001f(%rip), %xmm1    # 0x1154c
movss %xmm1, 0x58(%rsp)
xorps %xmm1, %xmm1
movss %xmm1, 0x20(%rsp)
je 0x1634
movss 0x10006(%rip), %xmm1    # 0x11550
movsd 0xaafe(%rip), %xmm2     # 0xc050
cvtss2sd %xmm0, %xmm0
leaq 0x80(%rsp), %rbx
leaq 0x78(%rsp), %r14
movss %xmm1, 0x18(%rsp)
cvtss2sd %xmm1, %xmm1
movsd %xmm0, 0x10(%rsp)
movss 0xffdd(%rip), %xmm0     # 0x11558
divsd %xmm1, %xmm2
mulss 0x4(%rsp), %xmm0
cvtss2sd 0xffc7(%rip), %xmm1     # 0x11554
cvtss2sd %xmm0, %xmm0
movsd %xmm1, 0x8(%rsp)
xorps %xmm1, %xmm1
movsd %xmm0, 0x30(%rsp)
xorps %xmm0, %xmm0
movss %xmm0, 0x20(%rsp)
movsd %xmm2, 0x50(%rsp)
ucomiss 0x18(%rsp), %xmm1
jae 0x1634
cvtss2sd %xmm1, %xmm0
movq %rbx, %rdi
movq %r14, %rsi
movss %xmm1, (%rsp)
mulsd 0xaa93(%rip), %xmm0     # 0xc060
mulsd 0x50(%rsp), %xmm0
callq 0x10e0
movsd 0x78(%rsp), %xmm0
movsd 0x80(%rsp), %xmm1
mulsd 0x40(%rsp), %xmm0
mulsd 0x38(%rsp), %xmm1
subsd %xmm1, %xmm0
mulsd 0x8(%rsp), %xmm0
addsd 0x30(%rsp), %xmm0
callq 0x1100
cvtss2sd 0x20(%rsp), %xmm1
mulsd 0x10(%rsp), %xmm0
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm0
movss (%rsp), %xmm1
addss 0xa9df(%rip), %xmm1     # 0xc008
movss %xmm0, 0x20(%rsp)
jmp 0x15af
movss 0x48(%rsp), %xmm0
ucomiss 0xa9db(%rip), %xmm0     # 0xc01c
cvtss2sd 0x60(%rsp), %xmm1
movsd %xmm1, 0x50(%rsp)
je 0x1759
movss 0xff01(%rip), %xmm3     # 0x1155c
movaps %xmm0, %xmm2
leaq 0x90(%rsp), %rbx
leaq 0x88(%rsp), %r14
cvtss2sd %xmm3, %xmm0
movss %xmm3, 0x18(%rsp)
movsd 0xa9d0(%rip), %xmm3     # 0xc050
cvtss2sd %xmm2, %xmm2
divsd %xmm0, %xmm3
movss 0xfed4(%rip), %xmm0     # 0x11564
movsd %xmm2, 0x30(%rsp)
mulss 0x4(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x48(%rsp)
xorps %xmm0, %xmm0
movsd %xmm3, 0x10(%rsp)
cvtss2sd 0xfea9(%rip), %xmm3     # 0x11560
mulsd 0xa999(%rip), %xmm3     # 0xc058
movapd %xmm3, %xmm2
mulsd 0x70(%rsp), %xmm3
mulsd %xmm1, %xmm2
movsd %xmm3, 0x8(%rsp)
movsd %xmm2, 0x60(%rsp)
ucomiss 0x18(%rsp), %xmm0
jae 0x1759
movss %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
cvtss2sd (%rsp), %xmm0
mulsd 0xa968(%rip), %xmm0     # 0xc060
mulsd 0x10(%rsp), %xmm0
callq 0x10e0
movsd 0x88(%rsp), %xmm1
movsd 0x90(%rsp), %xmm0
mulsd 0x8(%rsp), %xmm1
mulsd 0x60(%rsp), %xmm0
addsd %xmm1, %xmm0
addsd 0x48(%rsp), %xmm0
callq 0x1100
cvtss2sd 0x20(%rsp), %xmm1
mulsd 0x30(%rsp), %xmm0
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm0
movss %xmm0, 0x20(%rsp)
movss (%rsp), %xmm0
addss 0xa8b1(%rip), %xmm0     # 0xc008
jmp 0x16d9
xorps %xmm0, %xmm0
movss 0x58(%rsp), %xmm1
ucomiss %xmm0, %xmm1
je 0x1867
movss 0xfdf5(%rip), %xmm0     # 0x11568
movsd 0xa8d5(%rip), %xmm2     # 0xc050
leaq 0xa0(%rsp), %rbx
leaq 0x98(%rsp), %r14
movss %xmm0, 0x18(%rsp)
cvtss2sd %xmm0, %xmm0
divsd %xmm0, %xmm2
cvtss2sd %xmm1, %xmm0
cvtss2sd 0xfdc7(%rip), %xmm1     # 0x1156c
movsd %xmm0, 0x8(%rsp)
movss 0xfdbd(%rip), %xmm0     # 0x11570
mulss 0x4(%rsp), %xmm0
movsd %xmm1, 0x30(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x60(%rsp)
xorps %xmm0, %xmm0
movsd %xmm2, 0x10(%rsp)
ucomiss 0x18(%rsp), %xmm0
jae 0x1867
movss %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
cvtss2sd (%rsp), %xmm0
mulsd 0xa86b(%rip), %xmm0     # 0xc060
mulsd 0x10(%rsp), %xmm0
callq 0x10e0
movsd 0x98(%rsp), %xmm0
movsd 0xa0(%rsp), %xmm1
mulsd 0x40(%rsp), %xmm0
mulsd 0x38(%rsp), %xmm1
subsd %xmm1, %xmm0
andpd 0xa816(%rip), %xmm0     # 0xc040
mulsd 0x30(%rsp), %xmm0
addsd 0x60(%rsp), %xmm0
callq 0x1100
cvtss2sd 0x20(%rsp), %xmm1
mulsd 0x8(%rsp), %xmm0
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm0
movss %xmm0, 0x20(%rsp)
movss (%rsp), %xmm0
addss 0xa7a6(%rip), %xmm0     # 0xc008
jmp 0x17d2
movss 0x5c(%rsp), %xmm0
ucomiss 0xa7a8(%rip), %xmm0     # 0xc01c
movss 0xfcf8(%rip), %xmm2     # 0x11574
je 0x1985
movaps %xmm0, %xmm1
cvtss2sd %xmm2, %xmm0
movsd 0xa7bf(%rip), %xmm3     # 0xc050
cvtss2sd 0xfcdf(%rip), %xmm4     # 0x11578
leaq 0xb0(%rsp), %rbx
leaq 0xa8(%rsp), %r14
movss %xmm2, 0x40(%rsp)
cvtss2sd %xmm1, %xmm1
mulsd 0xa79d(%rip), %xmm4     # 0xc058
divsd %xmm0, %xmm3
movss 0x4(%rsp), %xmm0
mulss 0xfcaf(%rip), %xmm0     # 0x1157c
movsd %xmm1, 0x10(%rsp)
movsd %xmm4, 0x18(%rsp)
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
xorps %xmm0, %xmm0
movsd %xmm3, 0x38(%rsp)
ucomiss %xmm2, %xmm0
jae 0x1985
movss %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
cvtss2sd (%rsp), %xmm0
mulsd 0xa753(%rip), %xmm0     # 0xc060
mulsd 0x38(%rsp), %xmm0
callq 0x10e0
movsd 0xa8(%rsp), %xmm1
movsd 0xb0(%rsp), %xmm0
mulsd 0x70(%rsp), %xmm1
mulsd 0x50(%rsp), %xmm0
addsd %xmm1, %xmm0
andpd 0xa6fe(%rip), %xmm0     # 0xc040
mulsd 0x18(%rsp), %xmm0
addsd 0x8(%rsp), %xmm0
callq 0x1100
cvtss2sd 0x20(%rsp), %xmm1
mulsd 0x10(%rsp), %xmm0
movss 0x40(%rsp), %xmm2
addsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm0
movss %xmm0, 0x20(%rsp)
movss (%rsp), %xmm0
addss 0xa688(%rip), %xmm0     # 0xc008
jmp 0x18ec
movss 0x20(%rsp), %xmm0
addss %xmm2, %xmm0
addss %xmm2, %xmm2
divss %xmm2, %xmm0
leaq 0xb8(%rsp), %rsp
popq %rbx
popq %r14
retq