// File: /workspace/github_cpp_makefile_star2_O2/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 0x1aa4b
leaq 0x180ac(%rip), %rax     # 0x329b8
movslq (%rax,%rdx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x22644(%rip), %rax     # 0x3cf60
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 0x1aa87
movq 0x22606(%rip), %rax     # 0x3cf60
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 0x1aa87
movq 0x225c5(%rip), %rax     # 0x3cf60
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 0x1aa87
movq 0x22587(%rip), %rax     # 0x3cf60
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 0x1aa87
movq 0x22549(%rip), %rax     # 0x3cf60
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 0x1aa87
movq 0x2250e(%rip), %rax     # 0x3cf60
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 0xb970
xorl %eax, %eax
addq $0x10, %rsp
popq %rbp
retq