// File: /workspace/github_cpp_makefile_star2_O3/XuhuiSun95[P]My-OpenGL/main.cpp
// Function: drawCurve(float, float, float, float, float)
void drawCurve(float radian, float radius, float width, float depth, float samplingRate)
{
    // FRONT
    myBegin(QUAD_STRIP);
    for(int i=0; i<samplingRate; i++) {
        myVertex3d(-(radius-width)*cosf(i*radian/samplingRate), (radius-width)*sinf(i*radian/samplingRate), 0.5*depth);
        myVertex3d(-radius*cosf(i*radian/samplingRate), radius*sinf(i*radian/samplingRate), 0.5*depth);
        myVertex3d(-(radius-width)*cosf((i+1)*radian/samplingRate), (radius-width)*sinf((i+1)*radian/samplingRate), 0.5*depth);
        myVertex3d(-radius*cosf((i+1)*radian/samplingRate), radius*sinf((i+1)*radian/samplingRate), 0.5*depth);
    }
    myEnd();
    
    // BACK
    myBegin(QUAD_STRIP);
    for(int i=0; i<samplingRate; i++) {
        myVertex3d(-(radius-width)*cosf(i*radian/samplingRate), (radius-width)*sinf(i*radian/samplingRate), -0.5*depth);
        myVertex3d(-radius*cosf(i*radian/samplingRate), radius*sinf(i*radian/samplingRate), -0.5*depth);
        myVertex3d(-(radius-width)*cosf((i+1)*radian/samplingRate), (radius-width)*sinf((i+1)*radian/samplingRate), -0.5*depth);
        myVertex3d(-radius*cosf((i+1)*radian/samplingRate), radius*sinf((i+1)*radian/samplingRate), -0.5*depth);
        
    }
    myEnd();
    
    // LEFT
    myBegin(POLYGON);
    myVertex3d(-radius, 0.0 , -0.5*depth);
    myVertex3d(-radius, 0.0 , 0.5*depth);
    myVertex3d(-(radius-width), 0.0, 0.5*depth);
    myVertex3d(-(radius-width), 0.0, -0.5*depth);
    myEnd();
    
    // RIGHT
    myBegin(POLYGON);
    myVertex3d(-radius*cosf(radian), radius*sinf(radian), 0.5*depth);
    myVertex3d(-radius*cosf(radian), radius*sinf(radian), -0.5*depth);
    myVertex3d(-(radius-width)*cosf(radian), (radius-width)*sinf(radian), -0.5*depth);
    myVertex3d(-(radius-width)*cosf(radian), (radius-width)*sinf(radian), 0.5*depth);
    myEnd();
    
    // TOP
    myBegin(QUAD_STRIP);
    for(int i=0; i<samplingRate; i++) {
        myVertex3d(-radius*cosf(i*radian/samplingRate), radius*sinf(i*radian/samplingRate), 0.5*depth);
        myVertex3d(-radius*cosf(i*radian/samplingRate), radius*sinf(i*radian/samplingRate), -0.5*depth);
        myVertex3d(-radius*cosf((i+1)*radian/samplingRate), radius*sinf((i+1)*radian/samplingRate), 0.5*depth);
        myVertex3d(-radius*cosf((i+1)*radian/samplingRate), radius*sinf((i+1)*radian/samplingRate), -0.5*depth);
    }
    myEnd();
    
    // BOTTOM
    myBegin(QUAD_STRIP);
    for(int i=0; i<samplingRate; i++) {
        myVertex3d(-(radius-width)*cosf(i*radian/samplingRate), (radius-width)*sinf(i*radian/samplingRate), -0.5*depth);
        myVertex3d(-(radius-width)*cosf(i*radian/samplingRate), (radius-width)*sinf(i*radian/samplingRate), 0.5*depth);
        myVertex3d(-(radius-width)*cosf((i+1)*radian/samplingRate), (radius-width)*sinf((i+1)*radian/samplingRate), -0.5*depth);
        myVertex3d(-(radius-width)*cosf((i+1)*radian/samplingRate), (radius-width)*sinf((i+1)*radian/samplingRate), 0.5*depth);
    }
    myEnd();
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x88, %rsp
movss %xmm4, -0x18(%rbp)
movss %xmm3, -0x88(%rbp)
movss %xmm2, -0x84(%rbp)
movaps %xmm1, -0x60(%rbp)
movss %xmm0, -0x14(%rbp)
movl $0x1, %ebx
movl $0x1, %edi
callq 0x3c30
movss -0x18(%rbp), %xmm5
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm5
jbe 0x195a
movaps -0x60(%rbp), %xmm2
movaps %xmm2, %xmm1
subss -0x84(%rbp), %xmm1
movaps 0x5c02(%rip), %xmm3     # 0x72a0
movaps %xmm1, -0x80(%rbp)
xorps %xmm3, %xmm1
movaps %xmm1, -0x70(%rbp)
xorps %xmm1, %xmm1
cvtss2sd -0x88(%rbp), %xmm1
movsd 0x594c(%rip), %xmm4     # 0x7008
movsd %xmm1, -0x38(%rbp)
mulsd %xmm1, %xmm4
movsd %xmm4, -0x28(%rbp)
xorps %xmm2, %xmm3
movaps %xmm3, -0x50(%rbp)
mulss -0x14(%rbp), %xmm0
divss %xmm5, %xmm0
movss %xmm0, -0x10(%rbp)
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x10(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
xorps %xmm0, %xmm0
cvtsi2ss %ebx, %xmm0
movss %xmm0, -0x10(%rbp)
mulss -0x14(%rbp), %xmm0
divss -0x18(%rbp), %xmm0
movss %xmm0, -0x20(%rbp)
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movss -0x20(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x20(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movss -0x20(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x10(%rbp), %xmm0
movss -0x18(%rbp), %xmm5
incl %ebx
ucomiss %xmm0, %xmm5
ja 0x16d1
callq 0x3ca7
movl $0x1, %ebx
movl $0x1, %edi
callq 0x3c30
movss -0x18(%rbp), %xmm2
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm2
jbe 0x1969
movsd 0x57ea(%rip), %xmm1     # 0x7010
mulsd -0x38(%rbp), %xmm1
movsd %xmm1, -0x28(%rbp)
mulss -0x14(%rbp), %xmm0
divss %xmm2, %xmm0
movss %xmm0, -0x10(%rbp)
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x10(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
xorps %xmm0, %xmm0
cvtsi2ss %ebx, %xmm0
movss %xmm0, -0x10(%rbp)
mulss -0x14(%rbp), %xmm0
divss -0x18(%rbp), %xmm0
movss %xmm0, -0x20(%rbp)
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movss -0x20(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x20(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movss -0x20(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x10(%rbp), %xmm0
movss -0x18(%rbp), %xmm2
incl %ebx
ucomiss %xmm0, %xmm2
ja 0x1830
jmp 0x19b2
callq 0x3ca7
movl $0x1, %edi
callq 0x3c30
movaps -0x60(%rbp), %xmm2
movaps %xmm2, %xmm0
subss -0x84(%rbp), %xmm0
movaps 0x5921(%rip), %xmm1     # 0x72a0
xorps %xmm1, %xmm2
movaps %xmm2, -0x50(%rbp)
xorps %xmm3, %xmm3
cvtss2sd -0x88(%rbp), %xmm3
movsd 0x5677(%rip), %xmm2     # 0x7010
movsd %xmm3, -0x38(%rbp)
mulsd %xmm3, %xmm2
movsd %xmm2, -0x28(%rbp)
movaps %xmm0, -0x80(%rbp)
xorps %xmm0, %xmm1
movaps %xmm1, -0x70(%rbp)
callq 0x3ca7
xorl %edi, %edi
callq 0x3c30
xorps %xmm0, %xmm0
cvtss2sd -0x50(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
xorps %xmm1, %xmm1
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movsd -0x38(%rbp), %xmm2
mulsd 0x5623(%rip), %xmm2     # 0x7008
movsd %xmm2, -0x38(%rbp)
xorps %xmm1, %xmm1
movsd -0x10(%rbp), %xmm0
callq 0x3c53
xorps %xmm0, %xmm0
cvtss2sd -0x70(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
xorps %xmm1, %xmm1
movsd -0x38(%rbp), %xmm2
callq 0x3c53
xorps %xmm1, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
callq 0x3ca7
xorl %edi, %edi
callq 0x3c30
movss -0x14(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
movss -0x14(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x3c53
movss -0x14(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
movss -0x14(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x14(%rbp), %xmm0
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
movss -0x14(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x14(%rbp), %xmm0
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
movss -0x14(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x3c53
callq 0x3ca7
movl $0x1, %ebx
movl $0x1, %edi
callq 0x3c30
xorps %xmm0, %xmm0
movss -0x18(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x1db9
mulss -0x14(%rbp), %xmm0
divss %xmm1, %xmm0
movss %xmm0, -0x10(%rbp)
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x3c53
movss -0x10(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
xorps %xmm0, %xmm0
cvtsi2ss %ebx, %xmm0
movss %xmm0, -0x10(%rbp)
mulss -0x14(%rbp), %xmm0
divss -0x18(%rbp), %xmm0
movss %xmm0, -0x20(%rbp)
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movss -0x20(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x3c53
movss -0x20(%rbp), %xmm0
callq 0x10b0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movss -0x20(%rbp), %xmm0
callq 0x10d0
mulss -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x10(%rbp), %xmm0
movss -0x18(%rbp), %xmm1
incl %ebx
ucomiss %xmm0, %xmm1
ja 0x1b48
callq 0x3ca7
movl $0x1, %ebx
movl $0x1, %edi
callq 0x3c30
movss -0x18(%rbp), %xmm1
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm1
jbe 0x1dc8
mulss -0x14(%rbp), %xmm0
divss %xmm1, %xmm0
movss %xmm0, -0x60(%rbp)
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x50(%rbp)
movss -0x60(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x60(%rbp), %xmm0
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x50(%rbp)
movss -0x60(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x3c53
xorps %xmm0, %xmm0
cvtsi2ss %ebx, %xmm0
movss %xmm0, -0x60(%rbp)
mulss -0x14(%rbp), %xmm0
divss -0x18(%rbp), %xmm0
movss %xmm0, -0x50(%rbp)
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
movss -0x50(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x28(%rbp), %xmm2
callq 0x3c53
movss -0x50(%rbp), %xmm0
callq 0x10b0
mulss -0x70(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
movss -0x50(%rbp), %xmm0
callq 0x10d0
mulss -0x80(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x3c53
movss -0x60(%rbp), %xmm0
movss -0x18(%rbp), %xmm1
incl %ebx
jmp 0x1c8c
callq 0x3ca7
movl $0x1, %edi
callq 0x3c30
addq $0x88, %rsp
popq %rbx
popq %rbp
jmp 0x3ca7