// File: /workspace/github_cpp_makefile_star2_O3/sundale[P]gcode/rs274ngc/interp_cycles.cc
// Function: Interp::cycle_traverse(block_struct*, int, double, double, double)
int Interp::cycle_traverse(block_pointer block,
                           CANON_PLANE plane,    //!< currently selected plane 
                           double end1,  //!< first coordinate value   
                           double end2,  //!< second coordinate value  
                           double end3)  //!< third coordinate value   
{

    if (plane == CANON_PLANE_XY)
        STRAIGHT_TRAVERSE(block->line_number, end1, end2, end3,
                          _setup.AA_current, _setup.BB_current, _setup.CC_current,
                          _setup.u_current, _setup.v_current, _setup.w_current);
    else if (plane == CANON_PLANE_YZ)
        STRAIGHT_TRAVERSE(block->line_number, end3, end1, end2,
                          _setup.AA_current, _setup.BB_current, _setup.CC_current,
                          _setup.u_current, _setup.v_current, _setup.w_current);
    else if (plane == CANON_PLANE_XZ)
        STRAIGHT_TRAVERSE(block->line_number, end2, end3, end1,
                          _setup.AA_current, _setup.BB_current, _setup.CC_current,
                          _setup.u_current, _setup.v_current, _setup.w_current);
    else if (plane == CANON_PLANE_UV)
        STRAIGHT_TRAVERSE(block->line_number, _setup.current_x, _setup.current_y, _setup.current_z,
                          _setup.AA_current, _setup.BB_current, _setup.CC_current,
                          end1, end2, end3);
    else if (plane == CANON_PLANE_VW)
        STRAIGHT_TRAVERSE(block->line_number, _setup.current_x, _setup.current_y, _setup.current_z,
                          _setup.AA_current, _setup.BB_current, _setup.CC_current,
                          end3, end1, end2);
    else // (plane == CANON_PLANE_UW)
        STRAIGHT_TRAVERSE(block->line_number, _setup.current_x, _setup.current_y, _setup.current_z,
                          _setup.AA_current, _setup.BB_current, _setup.CC_current,
                          end2, end3, end1);
    return INTERP_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movaps %xmm2, %xmm10
movaps %xmm1, %xmm8
movaps %xmm0, %xmm9
movl 0x1d0(%rsi), %edi
decl %edx
cmpl $0x4, %edx
ja 0x1a843
leaq 0x1c2b4(%rip), %rax     # 0x369b8
movslq (%rax,%rdx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x2684c(%rip), %rax     # 0x40f60
movsd 0x8(%rax), %xmm3
movsd 0x20(%rax), %xmm4
movsd 0x38(%rax), %xmm5
movsd 0x50(%rax), %xmm6
movsd 0x68(%rax), %xmm7
movsd 0x80(%rax), %xmm0
movsd %xmm0, (%rsp)
movaps %xmm9, %xmm0
movaps %xmm8, %xmm1
movaps %xmm10, %xmm2
jmp 0x1a87f
movq 0x2680e(%rip), %rax     # 0x40f60
movsd 0x600(%rax), %xmm0
movsd 0x608(%rax), %xmm1
movsd 0x610(%rax), %xmm2
movsd 0x8(%rax), %xmm3
movsd 0x20(%rax), %xmm4
movsd 0x38(%rax), %xmm5
movsd %xmm8, (%rsp)
movaps %xmm10, %xmm6
movaps %xmm9, %xmm7
jmp 0x1a87f
movq 0x267cd(%rip), %rax     # 0x40f60
movsd 0x8(%rax), %xmm3
movsd 0x20(%rax), %xmm4
movsd 0x38(%rax), %xmm5
movsd 0x50(%rax), %xmm6
movsd 0x68(%rax), %xmm7
movsd 0x80(%rax), %xmm0
movsd %xmm0, (%rsp)
movaps %xmm8, %xmm0
movaps %xmm10, %xmm1
movaps %xmm9, %xmm2
jmp 0x1a87f
movq 0x2678f(%rip), %rax     # 0x40f60
movsd 0x600(%rax), %xmm0
movsd 0x608(%rax), %xmm1
movsd 0x610(%rax), %xmm2
movsd 0x8(%rax), %xmm3
movsd 0x20(%rax), %xmm4
movsd 0x38(%rax), %xmm5
movsd %xmm10, (%rsp)
movaps %xmm9, %xmm6
movaps %xmm8, %xmm7
jmp 0x1a87f
movq 0x26751(%rip), %rax     # 0x40f60
movsd 0x8(%rax), %xmm3
movsd 0x20(%rax), %xmm4
movsd 0x38(%rax), %xmm5
movsd 0x50(%rax), %xmm6
movsd 0x68(%rax), %xmm7
movsd 0x80(%rax), %xmm0
movsd %xmm0, (%rsp)
movaps %xmm10, %xmm0
movaps %xmm9, %xmm1
movaps %xmm8, %xmm2
jmp 0x1a87f
movq 0x26716(%rip), %rax     # 0x40f60
movsd 0x600(%rax), %xmm0
movsd 0x608(%rax), %xmm1
movsd 0x610(%rax), %xmm2
movsd 0x8(%rax), %xmm3
movsd 0x20(%rax), %xmm4
movsd 0x38(%rax), %xmm5
movsd %xmm9, (%rsp)
movaps %xmm8, %xmm6
movaps %xmm10, %xmm7
callq 0xa8d0
xorl %eax, %eax
addq $0x10, %rsp
popq %rbp
retq