// File: sundale[P]gcode/rs274ngc/interp_convert.cc
// Function: threading_pass(setup_struct*, block_struct*, int, double, double, double, double, double, double, double, int, int, double, double, double, double)
static void 
threading_pass(setup_pointer settings, block_pointer block,
	       int boring, double safe_x, double depth, double end_depth, 
	       double start_y, double start_z, double zoff, double taper_dist,
	       int entry_taper, int exit_taper, double taper_pitch, 
	       double pitch, double full_threadheight, double target_z) {
    STRAIGHT_TRAVERSE(block->line_number, boring?
		      safe_x + depth - end_depth:
		      safe_x - depth + end_depth,
		      start_y, start_z - zoff, AABBCC); //back
    if(taper_dist && entry_taper) {
	DISABLE_FEED_OVERRIDE();
	START_SPEED_FEED_SYNCH(taper_pitch, 0);
	STRAIGHT_FEED(block->line_number, boring? 
		      safe_x + depth - full_threadheight: 
		      safe_x - depth + full_threadheight,
		      start_y, start_z - zoff, AABBCC); //in
	STRAIGHT_FEED(block->line_number, boring? safe_x + depth: safe_x - depth, //angled in
		      start_y, start_z - zoff - taper_dist, AABBCC);
	START_SPEED_FEED_SYNCH(pitch, 0);
    } else {
	STRAIGHT_TRAVERSE(block->line_number, boring? safe_x + depth: safe_x - depth, 
			  start_y, start_z - zoff, AABBCC); //in
	DISABLE_FEED_OVERRIDE();
	START_SPEED_FEED_SYNCH(pitch, 0);
    }
        
    if(taper_dist && exit_taper) {
	STRAIGHT_FEED(block->line_number, boring? safe_x + depth: safe_x - depth,  //over
		      start_y, target_z - zoff + taper_dist, AABBCC);
	START_SPEED_FEED_SYNCH(taper_pitch, 0);
	STRAIGHT_FEED(block->line_number, boring? 
		      safe_x + depth - full_threadheight: 
		      safe_x - depth + full_threadheight, 
		      start_y, target_z - zoff, AABBCC); //angled out
    } else {
	STRAIGHT_FEED(block->line_number, boring? safe_x + depth: safe_x - depth, 
		      start_y, target_z - zoff, AABBCC); //over
    }
    STOP_SPEED_FEED_SYNCH();
    STRAIGHT_TRAVERSE(block->line_number, boring? 
		      safe_x + depth - end_depth:
		      safe_x - depth + end_depth,
		      start_y, target_z - zoff, AABBCC); //out
    ENABLE_FEED_OVERRIDE();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movsd 0x20(%rbp), %xmm8
movsd 0x18(%rbp), %xmm8
movsd 0x10(%rbp), %xmm8
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movsd %xmm0, -0x20(%rbp)
movsd %xmm1, -0x28(%rbp)
movsd %xmm2, -0x30(%rbp)
movsd %xmm3, -0x38(%rbp)
movsd %xmm4, -0x40(%rbp)
movsd %xmm5, -0x48(%rbp)
movsd %xmm6, -0x50(%rbp)
movl %ecx, -0x54(%rbp)
movl %r8d, -0x58(%rbp)
movsd %xmm7, -0x60(%rbp)
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0x64(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32950
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
jmp 0x32964
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movl -0x64(%rbp), %edi
movsd -0x70(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ef0
movsd -0x50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x329d5
jp 0x329d5
jmp 0x32b3d
cmpl $0x0, -0x54(%rbp)
je 0x32b3d
callq 0x10520
movsd -0x60(%rbp), %xmm0
xorl %edi, %edi
callq 0x11880
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0x74(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32a19
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
subsd 0x18(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
jmp 0x32a2d
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
addsd 0x18(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movl -0x74(%rbp), %edi
movsd -0x80(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ac0
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0x84(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32ab3
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0x32ac5
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movl -0x84(%rbp), %edi
movsd -0x90(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
subsd -0x50(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ac0
movsd 0x10(%rbp), %xmm0
xorl %edi, %edi
callq 0x11880
jmp 0x32bec
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0x94(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32b67
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0xa0(%rbp)
jmp 0x32b79
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
movsd %xmm0, -0xa0(%rbp)
movl -0x94(%rbp), %edi
movsd -0xa0(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ef0
callq 0x10520
movsd 0x10(%rbp), %xmm0
xorl %edi, %edi
callq 0x11880
movsd -0x50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x32c01
jp 0x32c01
jmp 0x32d67
cmpl $0x0, -0x58(%rbp)
je 0x32d67
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0xa4(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32c35
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
jmp 0x32c47
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movl -0xa4(%rbp), %edi
movsd -0xb0(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd 0x20(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
addsd -0x50(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ac0
movsd -0x60(%rbp), %xmm0
xorl %edi, %edi
callq 0x11880
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0xb4(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32ce9
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
subsd 0x18(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
jmp 0x32d00
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
addsd 0x18(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
movl -0xb4(%rbp), %edi
movsd -0xc0(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd 0x20(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ac0
jmp 0x32e05
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0xc4(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32d91
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
jmp 0x32da3
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movl -0xc4(%rbp), %edi
movsd -0xd0(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd 0x20(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ac0
callq 0x10980
movq -0x10(%rbp), %rax
movl 0x1d0(%rax), %eax
movl %eax, -0xd4(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x32e39
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
jmp 0x32e50
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movl -0xd4(%rbp), %edi
movsd -0xe0(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd 0x20(%rbp), %xmm2
subsd -0x48(%rbp), %xmm2
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm4
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm5
movq -0x8(%rbp), %rax
movsd 0x50(%rax), %xmm6
movq -0x8(%rbp), %rax
movsd 0x68(%rax), %xmm7
movq -0x8(%rbp), %rax
movsd 0x80(%rax), %xmm8
movsd %xmm8, (%rsp)
callq 0x10ef0
callq 0x108b0
addq $0xf0, %rsp
popq %rbp
retq