// File: /workspace/github_c_makefile_star2_O3/georgeweigt[P]eigenmath/eigenmath.c
// Function: power_complex_minus
void
power_complex_minus(struct atom *X, struct atom *Y, int n)
{
	int i;
	struct atom *PX, *PY, *R;

	// R = X^2 + Y^2

	push(X);
	push(X);
	multiply();
	push(Y);
	push(Y);
	multiply();
	add();
	R = pop();

	// X = X / R

	push(X);
	push(R);
	divide();
	X = pop();

	// Y = -Y / R

	push(Y);
	negate();
	push(R);
	divide();
	Y = pop();

	PX = X;
	PY = Y;

	for (i = 1; i < n; i++) {

		push(PX);
		push(X);
		multiply();
		push(PY);
		push(Y);
		multiply();
		subtract();

		push(PX);
		push(Y);
		multiply();
		push(PY);
		push(X);
		multiply();
		add();

		PY = pop();
		PX = pop();
	}

	// X + i*Y

	push(PX);
	push(imaginaryunit);
	push(PY);
	multiply();
	add();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %edx, %ebx
movq %rsi, %r15
movq %rdi, %r14
callq 0x8ba5
movq %r14, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movq %r15, %rdi
callq 0x8ba5
movq %r15, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movl $0x2, %edi
callq 0xadb3
movl 0x20f21(%rip), %eax     # 0x3f2b8
movl $0xfffe795f, %r13d      # imm = 0xFFFE795F
leal (%rax,%r13), %ecx
cmpl %r13d, %ecx
jbe 0x1e59e
decl %eax
movl %eax, 0x20f06(%rip)     # 0x3f2b8
leaq 0x2a207(%rip), %rcx     # 0x485c0
movq (%rcx,%rax,8), %r12
movq %r14, %rdi
callq 0x8ba5
movq %r12, %rdi
callq 0x8ba5
movq 0xf801c(%rip), %rdi     # 0x1163f0
callq 0x8ba5
callq 0xa573
movl $0x2, %edi
callq 0xacef
movl 0x20eca(%rip), %eax     # 0x3f2b8
leal (%rax,%r13), %ecx
cmpl %r13d, %ecx
jbe 0x1e59e
decl %eax
movl %eax, 0x20eb5(%rip)     # 0x3f2b8
leaq 0x2a1b6(%rip), %r13     # 0x485c0
movq (%r13,%rax,8), %r14
movq %r15, %rdi
callq 0x8ba5
movq 0xf7fd2(%rip), %rdi     # 0x1163f0
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movq %r12, %rdi
callq 0x8ba5
movq 0xf7fb4(%rip), %rdi     # 0x1163f0
callq 0x8ba5
callq 0xa573
movl $0x2, %edi
callq 0xacef
movl 0x20e62(%rip), %eax     # 0x3f2b8
movl $0xfffe795f, %ecx       # imm = 0xFFFE795F
leal (%rax,%rcx), %edx
cmpl %ecx, %edx
jbe 0x1e59e
decl %eax
movl %eax, 0x20e4a(%rip)     # 0x3f2b8
movq (%r13,%rax,8), %r15
cmpl $0x2, %ebx
jl 0x1e55a
decl %ebx
movq %r15, %r12
movq %r14, %r13
movq %r13, %rdi
callq 0x8ba5
movq %r14, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movq %r12, %rdi
callq 0x8ba5
movq %r15, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movq 0xf7f31(%rip), %rdi     # 0x1163f0
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movl $0x2, %edi
callq 0xadb3
movq %r13, %rdi
callq 0x8ba5
movq %r15, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movq %r12, %rdi
callq 0x8ba5
movq %r14, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movl $0x2, %edi
callq 0xadb3
movl 0x20d9c(%rip), %eax     # 0x3f2b8
movl $0xfffe795f, %edx       # imm = 0xFFFE795F
leal (%rax,%rdx), %ecx
cmpl %edx, %ecx
jbe 0x1e59e
leal -0x1(%rax), %ecx
movl %ecx, 0x20d87(%rip)     # 0x3f2b8
cmpl $0x1, %eax
leaq 0x2a085(%rip), %rdx     # 0x485c0
jbe 0x1e59e
movl %ecx, %ecx
movq (%rdx,%rcx,8), %r12
addl $-0x2, %eax
movl %eax, 0x20d6c(%rip)     # 0x3f2b8
movq (%rdx,%rax,8), %r13
decl %ebx
jne 0x1e484
jmp 0x1e560
movq %r14, %r13
movq %r15, %r12
movq %r13, %rdi
callq 0x8ba5
movq 0xed571(%rip), %rdi     # 0x10bae0
callq 0x8ba5
movq %r12, %rdi
callq 0x8ba5
movl $0x2, %edi
callq 0xacef
movl $0x2, %edi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xadb3
leaq 0x1099c(%rip), %rdi     # 0x2ef41
callq 0x780b