// File: /workspace/github_c_makefile_star2_O2/buptlxb[P]xRay/disasm/instr_set/opcodes_A_M.c
// Function: imul_GvEvIv
void __bea_callspec__ imul_GvEvIv(PDISASM pMyDisasm)
{
    (*pMyDisasm).Instruction.Category = GENERAL_PURPOSE_INSTRUCTION+ARITHMETIC_INSTRUCTION;
    #ifndef BEA_LIGHT_DISASSEMBLY
       (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "imul ");
    #endif
    if (GV.OperandSize >= 32) {
        if (GV.OperandSize == 64) {
            GV.MemDecoration = Arg2qword;
        }
        else {
            GV.MemDecoration = Arg2dword;
        }
        GV.ImmediatSize = 32;
        MOD_RM(&(*pMyDisasm).Argument2, pMyDisasm);
        Reg_Opcode(&(*pMyDisasm).Argument1, pMyDisasm);
        GV.EIP_+= GV.DECALAGE_EIP+6;
        if (!Security(0, pMyDisasm)) return;
        GV.third_arg = 1;
        (*pMyDisasm).Instruction.Immediat = *((UInt32*)(UIntPtr) (GV.EIP_- 4));
        #ifndef BEA_LIGHT_DISASSEMBLY
           (void) CopyFormattedNumber(pMyDisasm, (char*) (*pMyDisasm).Argument3.ArgMnemonic, "%.8X",(Int64) *((UInt32*)(UIntPtr) (GV.EIP_- 4)));
        #endif
        (*pMyDisasm).Argument3.ArgType = CONSTANT_TYPE+ABSOLUTE_;
        (*pMyDisasm).Argument3.ArgSize = 32;

        FillFlags(pMyDisasm, 38);
    }
    else {
        GV.MemDecoration = Arg2word;
        GV.ImmediatSize = 16;
        MOD_RM(&(*pMyDisasm).Argument2, pMyDisasm);
        Reg_Opcode(&(*pMyDisasm).Argument1, pMyDisasm);
        GV.EIP_+= GV.DECALAGE_EIP+4;
        if (!Security(0, pMyDisasm)) return;
        GV.third_arg = 1;
        (*pMyDisasm).Instruction.Immediat = *((UInt16*)(UIntPtr) (GV.EIP_- 2));
        #ifndef BEA_LIGHT_DISASSEMBLY
           (void) CopyFormattedNumber(pMyDisasm, (char*) (*pMyDisasm).Argument3.ArgMnemonic, "%.4X",(Int64) *((UInt16*)(UIntPtr) (GV.EIP_- 2)));
        #endif
        (*pMyDisasm).Argument3.ArgType = CONSTANT_TYPE+ABSOLUTE_;
        (*pMyDisasm).Argument3.ArgSize = 16;

        FillFlags(pMyDisasm, 38);
    }
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movl $0x10002, 0x60(%rdi)    # imm = 0x10002
movl $0x6c756d69, 0x68(%rdi) # imm = 0x6C756D69
movw $0x20, 0x6c(%rdi)
movl 0x20c(%rdi), %eax
cmpl $0x20, %eax
jl 0xed2a
xorl %ecx, %ecx
cmpl $0x40, %eax
sete %cl
addl $0x67, %ecx
movl %ecx, 0x210(%rbx)
movl $0x20, 0x260(%rbx)
leaq 0x104(%rbx), %rdi
movq %rbx, %rsi
callq 0x28863
leaq 0x9c(%rbx), %rdi
movq %rbx, %rsi
callq 0x2890a
movl 0x244(%rbx), %eax
addl $0x6, %eax
addq 0x1f0(%rbx), %rax
movq %rax, 0x1f0(%rbx)
movq 0x250(%rbx), %rcx
decq %rcx
cmpq %rax, %rcx
jb 0xed82
movl $0x1, 0x278(%rbx)
movl -0x4(%rax), %ecx
movq %rcx, 0x90(%rbx)
leaq 0x16c(%rbx), %rsi
leaq 0x1bd49(%rip), %rdx     # 0x2aa5c
movq %rbx, %rdi
callq 0x283ec
movabsq $0x2088000000, %rax     # imm = 0x2088000000
jmp 0xedc3
movl $0x66, 0x210(%rbx)
movl $0x10, 0x260(%rbx)
leaq 0x104(%rbx), %rdi
movq %rbx, %rsi
callq 0x28863
leaq 0x9c(%rbx), %rdi
movq %rbx, %rsi
callq 0x2890a
movl 0x244(%rbx), %eax
addl $0x4, %eax
addq 0x1f0(%rbx), %rax
movq %rax, 0x1f0(%rbx)
movq 0x250(%rbx), %rcx
decq %rcx
cmpq %rax, %rcx
jae 0xed8e
movl $0x1, 0x289(%rbx)
jmp 0xede1
movl $0x1, 0x278(%rbx)
movzwl -0x2(%rax), %ecx
movq %rcx, 0x90(%rbx)
leaq 0x16c(%rbx), %rsi
leaq 0x1bcc1(%rip), %rdx     # 0x2aa72
movq %rbx, %rdi
callq 0x283ec
movabsq $0x1088000000, %rax     # imm = 0x1088000000
movq %rax, 0x1ac(%rbx)
movq 0x27597(%rip), %rax     # 0x36368
movq %rax, 0x7c(%rbx)
movl 0x27595(%rip), %eax     # 0x36370
movl %eax, 0x84(%rbx)
popq %rbx
retq