// File: /workspace/github_c_makefile_star2_O0/TheDiamondProject[P]lib68/cpu/instructions/abcd_dn_dn.c
// Function: abcd_dn_dn
void abcd_dn_dn(void)
{
	union m68_abcd_opcode opcode = { m68_mmu_read_word(CPU68.PC.value) };
	uint8_t Rx = opcode.field.Rx;
	uint8_t Ry = opcode.field.Ry;
	uint8_t Vx = CPU68.D[Rx].byte[0];
	uint8_t Vy = CPU68.D[Ry].byte[0];
	uint8_t X = CPU68.CCR.bitmask.user.X;

	uint8_t r = Vx + Vy + X;
	uint8_t bc = ((Vx & Vy) | (~r & Vx) | (~r & Vy)) & 0x88;
	uint8_t dc = (((r + 0x66) ^ r) & 0x110) >> 1;
	uint8_t corf = (bc | dc) - ((bc | dc) >> 2);
	uint8_t rr = r + corf;

	CPU68.D[Ry].byte[0] = rr;
	     
	CPU68.CCR.bitmask.user.C = (bc | (r & ~rr)) >> 7;
	CPU68.CCR.bitmask.user.X = CPU68.CCR.bitmask.user.C;
	CPU68.CCR.bitmask.user.V = (~r && r) >> 7;
	CPU68.CCR.bitmask.user.Z &= (rr == 0);
	CPU68.CCR.bitmask.user.N = rr >> 7;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
leaq 0x103999(%rip), %rax    # 0x109078
movl 0x40(%rax), %edi
callq 0x5e20
movw %ax, -0x2(%rbp)
movw -0x2(%rbp), %ax
shrw $0x9, %ax
andw $0x7, %ax
movb %al, -0x3(%rbp)
movw -0x2(%rbp), %ax
andw $0x7, %ax
movb %al, -0x4(%rbp)
movzbl -0x3(%rbp), %eax
movl %eax, %ecx
leaq 0x103966(%rip), %rax    # 0x109078
movb (%rax,%rcx,4), %al
movb %al, -0x5(%rbp)
movzbl -0x4(%rbp), %eax
movl %eax, %ecx
leaq 0x103953(%rip), %rax    # 0x109078
movb (%rax,%rcx,4), %al
movb %al, -0x6(%rbp)
leaq 0x103946(%rip), %rax    # 0x109078
movb 0x44(%rax), %al
shrb $0x4, %al
andb $0x1, %al
movb %al, -0x7(%rbp)
movzbl -0x5(%rbp), %eax
movzbl -0x6(%rbp), %ecx
addl %ecx, %eax
movzbl -0x7(%rbp), %ecx
addl %ecx, %eax
movb %al, -0x8(%rbp)
movzbl -0x5(%rbp), %eax
movzbl -0x6(%rbp), %ecx
andl %ecx, %eax
movzbl -0x8(%rbp), %ecx
xorl $-0x1, %ecx
movzbl -0x5(%rbp), %edx
andl %edx, %ecx
orl %ecx, %eax
movzbl -0x8(%rbp), %ecx
xorl $-0x1, %ecx
movzbl -0x6(%rbp), %edx
andl %edx, %ecx
orl %ecx, %eax
andl $0x88, %eax
movb %al, -0x9(%rbp)
movzbl -0x8(%rbp), %eax
addl $0x66, %eax
movzbl -0x8(%rbp), %ecx
xorl %ecx, %eax
andl $0x110, %eax            # imm = 0x110
sarl %eax
movb %al, -0xa(%rbp)
movzbl -0x9(%rbp), %eax
movzbl -0xa(%rbp), %ecx
orl %ecx, %eax
movzbl -0x9(%rbp), %ecx
movzbl -0xa(%rbp), %edx
orl %edx, %ecx
sarl $0x2, %ecx
subl %ecx, %eax
movb %al, -0xb(%rbp)
movzbl -0x8(%rbp), %eax
movzbl -0xb(%rbp), %ecx
addl %ecx, %eax
movb %al, -0xc(%rbp)
movb -0xc(%rbp), %dl
movzbl -0x4(%rbp), %eax
movl %eax, %ecx
leaq 0x1038a8(%rip), %rax    # 0x109078
movb %dl, (%rax,%rcx,4)
movzbl -0x9(%rbp), %eax
movzbl -0x8(%rbp), %ecx
movzbl -0xc(%rbp), %edx
xorl $-0x1, %edx
andl %edx, %ecx
orl %ecx, %eax
sarl $0x7, %eax
leaq 0x103888(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
andb $-0x2, %cl
orb %al, %cl
leaq 0x103877(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
leaq 0x10386d(%rip), %rax    # 0x109078
movb 0x44(%rax), %al
andb $0x1, %al
leaq 0x103861(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb $0x4, %al
andb $-0x11, %cl
orb %al, %cl
leaq 0x10384d(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
movzbl -0x8(%rbp), %ecx
xorl $-0x1, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0xd(%rbp)
je 0x584c
movzbl -0x8(%rbp), %eax
cmpl $0x0, %eax
setne %al
movb %al, -0xd(%rbp)
movb -0xd(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
sarl $0x7, %eax
leaq 0x10381a(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb %al
andb $-0x3, %cl
orb %al, %cl
leaq 0x103807(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
movzbl -0xc(%rbp), %eax
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movzbl %al, %ecx
leaq 0x1037ee(%rip), %rax    # 0x109078
movb 0x44(%rax), %al
shrb $0x2, %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
leaq 0x1037da(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb $0x2, %al
andb $-0x5, %cl
orb %al, %cl
leaq 0x1037c6(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
movzbl -0xc(%rbp), %eax
sarl $0x7, %eax
leaq 0x1037b5(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb $0x3, %al
andb $-0x9, %cl
orb %al, %cl
leaq 0x1037a1(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
addq $0x10, %rsp
popq %rbp
retq