// File: /workspace/github_c_makefile_star2_O0/TheDiamondProject[P]lib68/cpu/instructions/abcd_m8_m8.c
// Function: abcd_m8_m8
void abcd_m8_m8(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 = m68_mmu_read_byte(--CPU68.A[Rx].value);
	uint8_t Vy = m68_mmu_read_byte(--CPU68.A[Ry].value);
	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;

	m68_mmu_write_byte(CPU68.A[Ry].value, 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 0x103bd9(%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 0x103ba6(%rip), %rax    # 0x109078
movl 0x20(%rax,%rcx,4), %edi
addl $-0x1, %edi
leaq 0x103b98(%rip), %rax    # 0x109078
movl %edi, 0x20(%rax,%rcx,4)
callq 0x5df0
movb %al, -0x5(%rbp)
movzbl -0x4(%rbp), %eax
movl %eax, %ecx
leaq 0x103b7f(%rip), %rax    # 0x109078
movl 0x20(%rax,%rcx,4), %edi
addl $-0x1, %edi
leaq 0x103b71(%rip), %rax    # 0x109078
movl %edi, 0x20(%rax,%rcx,4)
callq 0x5df0
movb %al, -0x6(%rbp)
leaq 0x103b5e(%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)
movzbl -0x4(%rbp), %eax
movl %eax, %ecx
leaq 0x103ac3(%rip), %rax    # 0x109078
movl 0x20(%rax,%rcx,4), %edi
movzbl -0xc(%rbp), %esi
callq 0x5cd0
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 0x103a99(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
andb $-0x2, %cl
orb %al, %cl
leaq 0x103a88(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
leaq 0x103a7e(%rip), %rax    # 0x109078
movb 0x44(%rax), %al
andb $0x1, %al
leaq 0x103a72(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb $0x4, %al
andb $-0x11, %cl
orb %al, %cl
leaq 0x103a5e(%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 0x563b
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 0x103a2b(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb %al
andb $-0x3, %cl
orb %al, %cl
leaq 0x103a18(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
movzbl -0xc(%rbp), %eax
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movzbl %al, %ecx
leaq 0x1039ff(%rip), %rax    # 0x109078
movb 0x44(%rax), %al
shrb $0x2, %al
andb $0x1, %al
movzbl %al, %eax
andl %ecx, %eax
leaq 0x1039eb(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb $0x2, %al
andb $-0x5, %cl
orb %al, %cl
leaq 0x1039d7(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
movzbl -0xc(%rbp), %eax
sarl $0x7, %eax
leaq 0x1039c6(%rip), %rcx    # 0x109078
movb 0x44(%rcx), %cl
andb $0x1, %al
shlb $0x3, %al
andb $-0x9, %cl
orb %al, %cl
leaq 0x1039b2(%rip), %rax    # 0x109078
movb %cl, 0x44(%rax)
addq $0x10, %rsp
popq %rbp
retq
nop