// File: /workspace/github_c_makefile_star2_O0/buptlxb[P]xRay/disasm/Routines_Disasm.c
// Function: FillSegmentsRegisters
void __bea_callspec__ FillSegmentsRegisters(PDISASM pMyDisasm)
{
    if (((*pMyDisasm).Prefix.LockPrefix == InUsePrefix) && !((*pMyDisasm).Argument1.ArgType & MEMORY_TYPE)) {
        (*pMyDisasm).Prefix.LockPrefix = InvalidPrefix;
    }
    if ((*pMyDisasm).Instruction.Category == GENERAL_PURPOSE_INSTRUCTION+STRING_INSTRUCTION) {
        (*pMyDisasm).Argument1.SegmentReg = ESReg;
        (*pMyDisasm).Argument2.SegmentReg = DSReg;
        /* =============== override affects Arg2 */
        if ((*pMyDisasm).Argument2.ArgType & MEMORY_TYPE) {
            if ((*pMyDisasm).Prefix.FSPrefix == InUsePrefix) {
                (*pMyDisasm).Argument2.SegmentReg = FSReg;
            }
            else if ((*pMyDisasm).Prefix.GSPrefix == InUsePrefix) {
                (*pMyDisasm).Argument2.SegmentReg = GSReg;
            }
            else if ((*pMyDisasm).Prefix.CSPrefix == InUsePrefix) {
                (*pMyDisasm).Argument2.SegmentReg = CSReg;
            }
            else if ((*pMyDisasm).Prefix.ESPrefix == InUsePrefix) {
                (*pMyDisasm).Argument2.SegmentReg = ESReg;
            }
            else if ((*pMyDisasm).Prefix.SSPrefix == InUsePrefix) {
                (*pMyDisasm).Argument2.SegmentReg = SSReg;
            }
            else {
                (*pMyDisasm).Argument2.SegmentReg = DSReg;
            }
        }
    }
    else {
        if ((*pMyDisasm).Argument1.ArgType & MEMORY_TYPE) {
            if (((*pMyDisasm).Argument1.Memory.BaseRegister == REG4) || ((*pMyDisasm).Argument1.Memory.BaseRegister == REG5)) {
                (*pMyDisasm).Argument1.SegmentReg = SSReg;
                /* ========== override is invalid here */
                if ((*pMyDisasm).Argument2.ArgType != MEMORY_TYPE) {
                    if ((*pMyDisasm).Prefix.FSPrefix == InUsePrefix) {
                        (*pMyDisasm).Argument1.SegmentReg = FSReg;
                        (*pMyDisasm).Prefix.FSPrefix = InvalidPrefix;
                    }
                    else if ((*pMyDisasm).Prefix.GSPrefix == InUsePrefix) {
                        (*pMyDisasm).Argument1.SegmentReg = GSReg;
                        (*pMyDisasm).Prefix.GSPrefix = InvalidPrefix;
                    }
                    else if ((*pMyDisasm).Prefix.CSPrefix == InUsePrefix) {
                        (*pMyDisasm).Argument1.SegmentReg = CSReg;
                        (*pMyDisasm).Prefix.CSPrefix = InvalidPrefix;
                    }
                    else if ((*pMyDisasm).Prefix.DSPrefix == InUsePrefix) {
                        (*pMyDisasm).Argument1.SegmentReg = DSReg;
                        (*pMyDisasm).Prefix.DSPrefix = InvalidPrefix;
                    }
                    else if ((*pMyDisasm).Prefix.ESPrefix == InUsePrefix) {
                        (*pMyDisasm).Argument1.SegmentReg = ESReg;
                        (*pMyDisasm).Prefix.ESPrefix = InvalidPrefix;
                    }
                    else if ((*pMyDisasm).Prefix.SSPrefix == InUsePrefix) {
                        (*pMyDisasm).Argument1.SegmentReg = SSReg;
                        (*pMyDisasm).Prefix.SSPrefix = InvalidPrefix;
                    }
                }
            }
            else {
                (*pMyDisasm).Argument1.SegmentReg = DSReg;
                /* ============= test if there is override */
                if ((*pMyDisasm).Prefix.FSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument1.SegmentReg = FSReg;
                }
                else if ((*pMyDisasm).Prefix.GSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument1.SegmentReg = GSReg;
                }
                else if ((*pMyDisasm).Prefix.CSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument1.SegmentReg = CSReg;
                }
                else if ((*pMyDisasm).Prefix.ESPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument1.SegmentReg = ESReg;
                }
                else if ((*pMyDisasm).Prefix.SSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument1.SegmentReg = SSReg;
                }
            }
        }

        if ((*pMyDisasm).Argument2.ArgType & MEMORY_TYPE) {
            if (((*pMyDisasm).Argument2.Memory.BaseRegister == REG4) || ((*pMyDisasm).Argument2.Memory.BaseRegister == REG5)) {
                (*pMyDisasm).Argument2.SegmentReg = SSReg;
                /* ========== override is invalid here */
                if ((*pMyDisasm).Prefix.FSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = FSReg;
                    (*pMyDisasm).Prefix.FSPrefix = InvalidPrefix;
                }
                else if ((*pMyDisasm).Prefix.GSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = GSReg;
                    (*pMyDisasm).Prefix.GSPrefix = InvalidPrefix;
                }
                else if ((*pMyDisasm).Prefix.CSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = CSReg;
                    (*pMyDisasm).Prefix.CSPrefix = InvalidPrefix;
                }
                else if ((*pMyDisasm).Prefix.DSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = DSReg;
                    (*pMyDisasm).Prefix.DSPrefix = InvalidPrefix;
                }
                else if ((*pMyDisasm).Prefix.ESPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = ESReg;
                    (*pMyDisasm).Prefix.ESPrefix = InvalidPrefix;
                }
                else if ((*pMyDisasm).Prefix.SSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = SSReg;
                    (*pMyDisasm).Prefix.SSPrefix = InvalidPrefix;
                }
            }
            else {
                (*pMyDisasm).Argument2.SegmentReg = DSReg;
                /* ============= test if there is override */
                if ((*pMyDisasm).Prefix.FSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = FSReg;
                }
                else if ((*pMyDisasm).Prefix.GSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = GSReg;
                }
                else if ((*pMyDisasm).Prefix.CSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = CSReg;
                }
                else if ((*pMyDisasm).Prefix.ESPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = ESReg;
                }
                else if ((*pMyDisasm).Prefix.SSPrefix == InUsePrefix) {
                    (*pMyDisasm).Argument2.SegmentReg = SSReg;
                }
            }
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movzbl 0x1dc(%rax), %eax
cmpl $0x1, %eax
jne 0x4f2c7
movq -0x8(%rbp), %rax
movl 0xdc(%rax), %eax
andl $0x40000000, %eax       # imm = 0x40000000
cmpl $0x0, %eax
jne 0x4f2c7
movq -0x8(%rbp), %rax
movb $0x4, 0x1dc(%rax)
movq -0x8(%rbp), %rax
cmpl $0x10007, 0x60(%rax)    # imm = 0x10007
jne 0x4f3cc
movq -0x8(%rbp), %rax
movl $0x1, 0x100(%rax)
movq -0x8(%rbp), %rax
movl $0x2, 0x168(%rax)
movq -0x8(%rbp), %rax
movl 0x144(%rax), %eax
andl $0x40000000, %eax       # imm = 0x40000000
cmpl $0x0, %eax
je 0x4f3c7
movq -0x8(%rbp), %rax
movzbl 0x1e1(%rax), %eax
cmpl $0x1, %eax
jne 0x4f32f
movq -0x8(%rbp), %rax
movl $0x3, 0x168(%rax)
jmp 0x4f3c5
movq -0x8(%rbp), %rax
movzbl 0x1e3(%rax), %eax
cmpl $0x1, %eax
jne 0x4f34f
movq -0x8(%rbp), %rax
movl $0x4, 0x168(%rax)
jmp 0x4f3c3
movq -0x8(%rbp), %rax
movzbl 0x1e5(%rax), %eax
cmpl $0x1, %eax
jne 0x4f36f
movq -0x8(%rbp), %rax
movl $0x5, 0x168(%rax)
jmp 0x4f3c1
movq -0x8(%rbp), %rax
movzbl 0x1e4(%rax), %eax
cmpl $0x1, %eax
jne 0x4f38f
movq -0x8(%rbp), %rax
movl $0x1, 0x168(%rax)
jmp 0x4f3bf
movq -0x8(%rbp), %rax
movzbl 0x1e2(%rax), %eax
cmpl $0x1, %eax
jne 0x4f3af
movq -0x8(%rbp), %rax
movl $0x6, 0x168(%rax)
jmp 0x4f3bd
movq -0x8(%rbp), %rax
movl $0x2, 0x168(%rax)
jmp 0x4f3bf
jmp 0x4f3c1
jmp 0x4f3c3
jmp 0x4f3c5
jmp 0x4f3c7
jmp 0x4f812
movq -0x8(%rbp), %rax
movl 0xdc(%rax), %eax
andl $0x40000000, %eax       # imm = 0x40000000
cmpl $0x0, %eax
je 0x4f5f9
movq -0x8(%rbp), %rax
cmpl $0x10, 0xec(%rax)
je 0x4f402
movq -0x8(%rbp), %rax
cmpl $0x20, 0xec(%rax)
jne 0x4f53e
movq -0x8(%rbp), %rax
movl $0x6, 0x100(%rax)
movq -0x8(%rbp), %rax
cmpl $0x40000000, 0x144(%rax) # imm = 0x40000000
je 0x4f539
movq -0x8(%rbp), %rax
movzbl 0x1e1(%rax), %eax
cmpl $0x1, %eax
jne 0x4f452
movq -0x8(%rbp), %rax
movl $0x3, 0x100(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e1(%rax)
jmp 0x4f537
movq -0x8(%rbp), %rax
movzbl 0x1e3(%rax), %eax
cmpl $0x1, %eax
jne 0x4f480
movq -0x8(%rbp), %rax
movl $0x4, 0x100(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e3(%rax)
jmp 0x4f535
movq -0x8(%rbp), %rax
movzbl 0x1e5(%rax), %eax
cmpl $0x1, %eax
jne 0x4f4ae
movq -0x8(%rbp), %rax
movl $0x5, 0x100(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e5(%rax)
jmp 0x4f533
movq -0x8(%rbp), %rax
movzbl 0x1e6(%rax), %eax
cmpl $0x1, %eax
jne 0x4f4d9
movq -0x8(%rbp), %rax
movl $0x2, 0x100(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e6(%rax)
jmp 0x4f531
movq -0x8(%rbp), %rax
movzbl 0x1e4(%rax), %eax
cmpl $0x1, %eax
jne 0x4f504
movq -0x8(%rbp), %rax
movl $0x1, 0x100(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e4(%rax)
jmp 0x4f52f
movq -0x8(%rbp), %rax
movzbl 0x1e2(%rax), %eax
cmpl $0x1, %eax
jne 0x4f52d
movq -0x8(%rbp), %rax
movl $0x6, 0x100(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e2(%rax)
jmp 0x4f52f
jmp 0x4f531
jmp 0x4f533
jmp 0x4f535
jmp 0x4f537
jmp 0x4f539
jmp 0x4f5f7
movq -0x8(%rbp), %rax
movl $0x2, 0x100(%rax)
movq -0x8(%rbp), %rax
movzbl 0x1e1(%rax), %eax
cmpl $0x1, %eax
jne 0x4f56f
movq -0x8(%rbp), %rax
movl $0x3, 0x100(%rax)
jmp 0x4f5f5
movq -0x8(%rbp), %rax
movzbl 0x1e3(%rax), %eax
cmpl $0x1, %eax
jne 0x4f58f
movq -0x8(%rbp), %rax
movl $0x4, 0x100(%rax)
jmp 0x4f5f3
movq -0x8(%rbp), %rax
movzbl 0x1e5(%rax), %eax
cmpl $0x1, %eax
jne 0x4f5af
movq -0x8(%rbp), %rax
movl $0x5, 0x100(%rax)
jmp 0x4f5f1
movq -0x8(%rbp), %rax
movzbl 0x1e4(%rax), %eax
cmpl $0x1, %eax
jne 0x4f5cf
movq -0x8(%rbp), %rax
movl $0x1, 0x100(%rax)
jmp 0x4f5ef
movq -0x8(%rbp), %rax
movzbl 0x1e2(%rax), %eax
cmpl $0x1, %eax
jne 0x4f5ed
movq -0x8(%rbp), %rax
movl $0x6, 0x100(%rax)
jmp 0x4f5ef
jmp 0x4f5f1
jmp 0x4f5f3
jmp 0x4f5f5
jmp 0x4f5f7
jmp 0x4f5f9
movq -0x8(%rbp), %rax
movl 0x144(%rax), %eax
andl $0x40000000, %eax       # imm = 0x40000000
cmpl $0x0, %eax
je 0x4f810
movq -0x8(%rbp), %rax
cmpl $0x10, 0x154(%rax)
je 0x4f62f
movq -0x8(%rbp), %rax
cmpl $0x20, 0x154(%rax)
jne 0x4f755
movq -0x8(%rbp), %rax
movl $0x6, 0x168(%rax)
movq -0x8(%rbp), %rax
movzbl 0x1e1(%rax), %eax
cmpl $0x1, %eax
jne 0x4f66b
movq -0x8(%rbp), %rax
movl $0x3, 0x168(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e1(%rax)
jmp 0x4f750
movq -0x8(%rbp), %rax
movzbl 0x1e3(%rax), %eax
cmpl $0x1, %eax
jne 0x4f699
movq -0x8(%rbp), %rax
movl $0x4, 0x168(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e3(%rax)
jmp 0x4f74e
movq -0x8(%rbp), %rax
movzbl 0x1e5(%rax), %eax
cmpl $0x1, %eax
jne 0x4f6c7
movq -0x8(%rbp), %rax
movl $0x5, 0x168(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e5(%rax)
jmp 0x4f74c
movq -0x8(%rbp), %rax
movzbl 0x1e6(%rax), %eax
cmpl $0x1, %eax
jne 0x4f6f2
movq -0x8(%rbp), %rax
movl $0x2, 0x168(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e6(%rax)
jmp 0x4f74a
movq -0x8(%rbp), %rax
movzbl 0x1e4(%rax), %eax
cmpl $0x1, %eax
jne 0x4f71d
movq -0x8(%rbp), %rax
movl $0x1, 0x168(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e4(%rax)
jmp 0x4f748
movq -0x8(%rbp), %rax
movzbl 0x1e2(%rax), %eax
cmpl $0x1, %eax
jne 0x4f746
movq -0x8(%rbp), %rax
movl $0x6, 0x168(%rax)
movq -0x8(%rbp), %rax
movb $0x4, 0x1e2(%rax)
jmp 0x4f748
jmp 0x4f74a
jmp 0x4f74c
jmp 0x4f74e
jmp 0x4f750
jmp 0x4f80e
movq -0x8(%rbp), %rax
movl $0x2, 0x168(%rax)
movq -0x8(%rbp), %rax
movzbl 0x1e1(%rax), %eax
cmpl $0x1, %eax
jne 0x4f786
movq -0x8(%rbp), %rax
movl $0x3, 0x168(%rax)
jmp 0x4f80c
movq -0x8(%rbp), %rax
movzbl 0x1e3(%rax), %eax
cmpl $0x1, %eax
jne 0x4f7a6
movq -0x8(%rbp), %rax
movl $0x4, 0x168(%rax)
jmp 0x4f80a
movq -0x8(%rbp), %rax
movzbl 0x1e5(%rax), %eax
cmpl $0x1, %eax
jne 0x4f7c6
movq -0x8(%rbp), %rax
movl $0x5, 0x168(%rax)
jmp 0x4f808
movq -0x8(%rbp), %rax
movzbl 0x1e4(%rax), %eax
cmpl $0x1, %eax
jne 0x4f7e6
movq -0x8(%rbp), %rax
movl $0x1, 0x168(%rax)
jmp 0x4f806
movq -0x8(%rbp), %rax
movzbl 0x1e2(%rax), %eax
cmpl $0x1, %eax
jne 0x4f804
movq -0x8(%rbp), %rax
movl $0x6, 0x168(%rax)
jmp 0x4f806
jmp 0x4f808
jmp 0x4f80a
jmp 0x4f80c
jmp 0x4f80e
jmp 0x4f810
jmp 0x4f812
popq %rbp
retq
nopw %cs:(%rax,%rax)