// File: /workspace/github_cpp_makefile_star2_O2/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 $0x78, %rsp
movss %xmm4, -0x24(%rbp)
movss %xmm3, -0x30(%rbp)
movss %xmm2, -0x38(%rbp)
movaps %xmm1, -0x60(%rbp)
movss %xmm0, -0x14(%rbp)
pushq $0x1
popq %rdi
callq 0x394a
movaps -0x60(%rbp), %xmm3
movaps %xmm3, %xmm0
subss -0x38(%rbp), %xmm0
movaps 0x4cf6(%rip), %xmm2     # 0x62a0
movaps %xmm0, -0x80(%rbp)
xorps %xmm2, %xmm0
movaps %xmm0, -0x70(%rbp)
cvtss2sd -0x30(%rbp), %xmm0
movsd 0x4a46(%rip), %xmm1     # 0x6008
movsd %xmm0, -0x30(%rbp)
mulsd %xmm0, %xmm1
movsd %xmm1, -0x38(%rbp)
xorps %xmm3, %xmm2
movaps %xmm2, -0x50(%rbp)
xorl %ebx, %ebx
cvtsi2ss %ebx, %xmm0
movss -0x24(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x16f1
mulss -0x14(%rbp), %xmm0
divss %xmm1, %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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
incl %ebx
cvtsi2ss %ebx, %xmm0
mulss -0x14(%rbp), %xmm0
divss -0x24(%rbp), %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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
jmp 0x15d9
callq 0x3999
pushq $0x1
popq %rdi
callq 0x394a
movsd -0x30(%rbp), %xmm0
mulsd 0x4905(%rip), %xmm0     # 0x6010
movsd %xmm0, -0x30(%rbp)
xorl %ebx, %ebx
cvtsi2ss %ebx, %xmm0
movss -0x24(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x182a
mulss -0x14(%rbp), %xmm0
divss %xmm1, %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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
incl %ebx
cvtsi2ss %ebx, %xmm0
mulss -0x14(%rbp), %xmm0
divss -0x24(%rbp), %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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
jmp 0x1712
callq 0x3999
xorl %ebx, %ebx
xorl %edi, %edi
callq 0x394a
cvtss2sd -0x50(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
xorps %xmm1, %xmm1
movsd -0x30(%rbp), %xmm2
callq 0x396d
xorps %xmm1, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
cvtss2sd -0x70(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
xorps %xmm1, %xmm1
movsd -0x38(%rbp), %xmm2
callq 0x396d
xorps %xmm1, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
callq 0x3999
xorl %edi, %edi
callq 0x394a
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
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x10(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
callq 0x3999
pushq $0x1
popq %rdi
callq 0x394a
cvtsi2ss %ebx, %xmm0
movss -0x24(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x1aa3
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
incl %ebx
cvtsi2ss %ebx, %xmm0
mulss -0x14(%rbp), %xmm0
divss -0x24(%rbp), %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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
jmp 0x198b
callq 0x3999
pushq $0x1
popq %rdi
callq 0x394a
xorl %ebx, %ebx
cvtsi2ss %ebx, %xmm0
movss -0x24(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x1bca
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
cvtss2sd %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
incl %ebx
cvtsi2ss %ebx, %xmm0
mulss -0x14(%rbp), %xmm0
divss -0x24(%rbp), %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
cvtss2sd %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
movsd -0x30(%rbp), %xmm2
callq 0x396d
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
cvtss2sd %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
callq 0x396d
jmp 0x1ab2
addq $0x78, %rsp
popq %rbx
popq %rbp
jmp 0x3999