kolibrios/programs/develop/koldbg/disasm/rtn-c4c5.inc
Kirill Lipatov (Leency) b34f9856cb upload koldbg by CandyMan
git-svn-id: svn://kolibrios.org@9353 a494cfbc-eb01-0410-851d-a64ba20cac60
2021-12-02 17:13:25 +00:00

976 lines
27 KiB
PHP

r8d equ edi
r8 equ rdi
;-----------------------------------------------------------------------------
R32RM32C5:
mov eax,R32RM32
jmp R16RM16C5.1
R16RM16C5:
mov eax,R16RM16
.1: cmp byte [rsi],0xC0
jae RtnAVX2C5
or byte [I.Flags],_O
and byte [I.Prefixes],not (bit P66)
jmp rax
RtnAVX2C5:
;F0/66/F2/F3/REX then #UD
test byte [I.Prefixes],bit PF0+bit P66+bit PF2+bit PF3+bit P4X
jnz ErrorDec
FetchB
mov [I.VEX],al
and [I.VEX],7Fh ;clear VEX.R
mov ah,al
and al,10000000b
xor al,10000000b
shr al,5 ;REX.R
jz .L1
cmp [IgnoreInvalid],True
je .L1
cmp [I.Arch],CPUX64
jne ErrorDec
.L1:
mov [I.PreREX],al
call SetMagicBytes
mov [I.P],1
mov al,ah
and al,01111000b ;vvvv
xor al,01111000b
shr al,3
cmp [IgnoreInvalid],True
je .L2
cmp al,7
jbe .L2
cmp [I.Arch],CPUX64
jne ErrorDec
.L2:
mov [I.VVVV],al
mov al,ah
and eax,11b ;pp
;mov [PP],al
mov edx,[rax*4+C4C5Tab]
mov edi,[rax*3+CMPSuffixesX]
jmp C4C5XX
;-----------------------------------------------------------------------------
R32RM32C4:
mov eax,R32RM32
jmp R16RM16C4.1
R16RM16C4:
mov eax,R16RM16
.1: cmp byte [rsi],0xC0
jae RtnAVX2C4
or byte [I.Flags],_O
and byte [I.Prefixes],not (bit P66)
jmp rax
RtnAVX2C4:
mov [I.RandSize],0
;F0/66/F2/F3/REX then #UD
test byte [I.Prefixes],bit PF0+bit P66+bit PF2+bit PF3+bit P4X
jnz ErrorDec
FetchB
mov ah,al
;and al,11100000b
xor al,11100000b
shr al,5 ;REX.RXB
jz .L1
cmp [IgnoreInvalid],True
je .L1
cmp [I.Arch],CPUX64
jne ErrorDec
.L1:
mov [I.PreREX],al
call SetMagicBytes
mov [I.P],1
mov al,ah
and al,11111b
mov [I.MMMMM],al ;mmmmm
FetchB
mov ah,al
mov [I.VEX],al
and al,01111000b ;vvvv
xor al,01111000b
shr al,3
cmp [IgnoreInvalid],True
je .L2
cmp al,7
jbe .L2
cmp [I.Arch],CPUX64
jne ErrorDec
.L2:
mov [I.VVVV],al
mov al,ah
and eax,11b ;pp
;mov [PP],al
mov edx,[rax*4+C4C5Tab]
mov ebx,[rax*4+C438Tab]
mov ecx,[rax*4+C43ATab]
mov edi,[rax*3+CMPSuffixesX]
mov al,[I.MMMMM]
or al,al
jz ErrorDec
cmp al,00011b
ja ErrorDec
;cmp al,00011b
jne .L3
mov edx,ecx
.L3:
cmp al,00010b
jne .L4
mov edx,ebx
.L4:
C4C5XX:
mov word [I.Suffix3rd],di
FetchB
mov [I.AfterVEX],al
mov [I.SaveRSI],rsi
.L1:
cmp dword [rdx],-1
jz ErrorDec
cmp al,[rdx+CXX.Imm]
jz .L2
add edx,CXX.Size
jmp .L1
.L2:
mov eax,dword [rdx+CXX.Flags]
mov word [I.FlagsVEX],ax
mov cl,VEXL
and al,cl
mov ah,[I.VEX]
and ah,al
jnz ErrorDec
test [I.FlagsVEX],VEXN
jz .L3
mov ah,[I.VEX]
and ah,cl
jz ErrorDec
.L3:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
test [I.FlagsVEX+1],VEXG shr 8
jz .L4
xor cl,cl
cmp [I.Arch],CPUX64
jne .L4
mov cl,VEXW
.L4:
mov al,[rdx+CXX.MOS]
test [I.VEX],cl
jz .L5
shr al,4
.L5: and al,0Fh
mov [I.RandSize],al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,byte [rdx+CXX.Flags]
and al,VEXW
mov ah,[I.VEX]
cmp [I.Arch],CPUX64
je .L6
test [I.FlagsVEX+1],VEXC shr 8
jnz .L6
test ah,VEXW
jnz ErrorDec
.L6:
and ah,al
jnz ErrorDec
mov al,byte [rdx+CXX.Flags]
and al,VEXV
jz .L7
cmp [I.VVVV],0 ;!1111b=0000b
jnz ErrorDec
.L7:
movzx r8d,[rdx+CXX.Rtn]
add r8d,RtnXX
mov edx,dword [rdx+CXX.Name]
test [I.FlagsVEX+1],VEXH shr 8
jnz .L8
mov [I.Prefix],'v'
.L8: mov [I.Name],dx
test [I.FlagsVEX+1],VEXF shr 8
jnz .L9
call FetchModRM
.L9:
test [I.FlagsVEX+1],VEXR shr 8
jz .LA
cmp [I.Mod],3
jnz ErrorDec
.LA:
cmp [I.Mod],3
jnz .LB
test [I.FlagsVEX],VEXM
jnz ErrorDec
.LB: jmp r8
RtnC4C5:
lea r8,[I.Arg1]
mov al,XMMRG
test [I.VEX],VEXL
jz .L1
mov al,YMMRG
.L1: mov ah,al
test [I.FlagsVEX+1],VEX2 shr 8
jz .L2
mov ah,XMMRG
.L2:
test [I.FlagsVEX+1],VEX1 shr 8
jz .L3
mov al,XMMRG
.L3:
test [I.FlagsVEX+1],VEXG shr 8
jz .L4
mov ax,GPR32 by GPR32
cmp [I.Arch],CPUX64
jne .L4
test [I.VEX],VEXW
jz .L4
mov ax,GPR64 by GPR64
.L4:
push rax
test [I.FlagsVEX+1],VEXS shr 8
jnz .NDD
mov [r8+TArg.Type],al
mov [r8+TArg.Type2nd],InReg
add r8d,sizeof.TArg
.NDD:
mov al,XMMRG
test [I.VEX],VEXL
jz .L5
mov al,YMMRG
.L5:
test [I.FlagsVEX+1],VEXG shr 8
jz .L6
mov al,GPR32
cmp [I.Arch],CPUX64
jne .L6
test [I.VEX],VEXW
jz .L6
mov al,GPR64
.L6:
test [I.FlagsVEX],VEXV
jnz .L7
mov [r8+TArg.Type],al
mov [r8+TArg.Type2nd],InVVVV
add r8d,sizeof.TArg
.L7: pop rax
;cmp [I.Mod],3
;setnz [r8+TArg.Mem]
mov dl,ah
mov [r8+TArg.Type],dl
mov [r8+TArg.Type2nd],InRM
add r8d,sizeof.TArg
test [I.FlagsVEX],VEXI
jnz .Imm
test [I.FlagsVEX],VEX8
jz .L8
movzx eax,byte [rsi]
cmp al,1Fh
ja .Imm
FetchB
cmp [I.AfterVEX],0xC2
jne .L8
mov edx,[rax*2+CMPxxNames]
mov [I.Name],dx
mov eax,dword [I.Suffix3rd]
mov dword [I.Suffix2nd],eax
ret
.Imm: FetchB
mov [r8+TArg.Type],80h+1
mov [r8+TArg.ImmB],al
ret
.L8:
test [I.FlagsVEX],VEX4
jnz .L9
ret
.L9:
FetchB
shr al,4
cmp [IgnoreInvalid],True
je .LA
cmp [I.Arch],CPUX64
je .LA
and al,111b
.LA: mov [r8+TArg.Reg],al
mov [r8+TArg.Type],XMMRG
test [I.VEX],VEXL
jz .LB
mov [r8+TArg.Type],YMMRG
.LB: ret
;-----------------------------------------------------------------------------
RtnC401:
;cmp [I.Mod],3
;setnz [I.Arg2.Mem]
mov [I.Arg2.Type],XMMRG
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type],XMMRG
mov [I.Arg1.Type2nd],InReg
test [I.VEX],VEXL
jz .L1
mov [I.Arg1.Type],YMMRG
.L1: ret
;-----------------------------------------------------------------------------
RtnC404:test [I.VEX],VEXW
jz .L1
mov [I.LastByte],'q'
.L1: ;jmp RtnC402
;-----------------------------------------------------------------------------
RtnC402:mov al,XMMRG
test [I.VEX],VEXL
jz .L1
mov al,YMMRG
.L1:
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InRM
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InVVVV
mov [I.Arg3.Type],al
mov [I.Arg3.Type2nd],InReg
ret
;-----------------------------------------------------------------------------
RtnC403:test [I.VEX],VEXW
jz .L1
mov [I.LastByte],'q'
.L1: jmp RtnC4C5
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
RtnC405:test [I.VEX],VEXW
jz .L1
mov [I.LastByte],'q'
.L1: ;jmp RtnC4VT
;-----------------------------------------------------------------------------
RtnC4VT:mov al,XMMRG
test [I.VEX],VEXL
jz .L1
mov al,YMMRG
.L1: call SetVT
;cmp [I.Mod],3
;setnz [I.Arg2.Mem]
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InReg
mov [I.Arg3.Type],al
mov [I.Arg3.Type2nd],InVVVV
ret
;-----------------------------------------------------------------------------
RtnC406:call RtnC4VT
mov ax,'ps'
test [I.VEX],VEXW
jz .L1
mov ah,'d' ;'pd'
.L1: mov word [I.Suffix2nd],ax
ret
;-----------------------------------------------------------------------------
RtnC407:call RtnC4C5
mov ax,'ps'
test [I.VEX],VEXW
jz .L1
mov ah,'d' ;'pd'
.L1: mov word [I.Suffix2nd],ax
ret
;-----------------------------------------------------------------------------
RtnC408:test [I.VEX],VEXW
jz .L1
mov [I.RandSize],xQ
.L1: call RtnC4C5
mov ax,'ss'
test [I.VEX],VEXW
jz .L2
mov ah,'d' ;'sd'
.L2: mov word [I.Suffix2nd],ax
ret
;-----------------------------------------------------------------------------
RtnC409:
mov al,GPR32
cmp [I.Arch],CPUX64
jne .L1
test [I.VEX],VEXW
jz .L1
mov al,GPR64
.L1:
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InReg
;cmp [I.Mod],3
;setnz [I.Arg2.Mem]
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InRM
mov [I.Arg3.Type],al
mov [I.Arg3.Type2nd],InVVVV
ret
;-----------------------------------------------------------------------------
RtnC40A:
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'w'
.L0:
mov al,KXXRG
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InRM
FetchB
mov [I.Arg3.Type],80h+1
mov [I.Arg3.ImmB],al
ret
;-----------------------------------------------------------------------------
RtnC40B:
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'q'
.L0: jmp RtnC40A.L0
;-----------------------------------------------------------------------------
RtnC40C:
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg1.Type],XMMRG
mov [I.Arg1.Type2nd],InRM
mov [I.Arg2.Type],YMMRG
mov [I.Arg2.Type2nd],InReg
.L1:
FetchB
mov [I.Arg3.Type],80h+1
mov [I.Arg3.ImmB],al
ret
;-----------------------------------------------------------------------------
RtnC40D:
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg1.Type],XMMRG
mov [I.Arg1.Type2nd],InRM
mov al,XMMRG
test [I.XOP],XOPL
jz .L1
mov al,YMMRG
.L1:
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InReg
jmp RtnC40C.L1
;-----------------------------------------------------------------------------
RtnC40F:
mov al,GPR64
cmp [I.Arch],CPUX64
jne RtnC40E.L1
test [I.VEX],VEXW
jnz RtnC40E.L2
RtnC40E:
.L1: mov al,GPR32
.L2:
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InRM
mov [I.Arg2.Type],XMMRG
mov [I.Arg2.Type2nd],InReg
jmp RtnC40C.L1
;-----------------------------------------------------------------------------
RtnC410:
mov [I.Arg1.Type],YMMRG
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],YMMRG
mov [I.Arg2.Type2nd],InVVVV
;cmp [I.Mod],3
;setnz [I.Arg3.Mem]
mov [I.Arg3.Type],XMMRG
mov [I.Arg3.Type2nd],InRM
FetchB
mov [I.Arg4.Type],80h+1
mov [I.Arg4.ImmB],al
ret
;-----------------------------------------------------------------------------
RtnCLMUL:
call RtnC4C5
movzx eax,byte [rsi-1]
cmp al,18
ja .L1
mov edx,[rax*2+TabCLMUL]
or dx,dx
jz .L1
mov [I.Name],dx
mov [I.Arg4.Type],0 ;Delete
.L1: ret
;-----------------------------------------------------------------------------
C40F3A48:
mov ebx,TPERMIL2PSX
jmp C40F3A49.L1
;-----------------------------------------------------------------------------
C40F3A49:
mov ebx,TPERMIL2PDX
.L1:
mov al,XMMRG
test [I.VEX],VEXL
jz .L2
mov al,YMMRG
.L2:
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InVVVV
mov [I.Arg3.Type],al
mov [I.Arg4.Type],al
FetchB
mov dl,al
shr dl,4
cmp [IgnoreInvalid],True
je .L3
cmp [I.Arch],CPUX64
je .L3
and dl,111b
.L3:
lea r8,[I.Arg3]
test [I.VEX],VEXW
jnz .L7
lea r8,[I.Arg4]
.L7: mov [r8+TArg.Reg],dl
and eax,1111b
cmp al,0011b
ja .L4
mov edx,[rax*2+rbx]
mov [I.Name],dx
jmp .L5
.L4:
mov [I.Arg5.Type],80h+1
mov [I.Arg5.ImmB],al
.L5:
lea r8,[I.Arg4]
test [I.VEX],VEXW
jnz .L6
lea r8,[I.Arg3]
.L6:
mov [r8+TArg.Type2nd],InRM
;cmp [I.Mod],3
;setnz [r8+TArg.Mem]
ret
;-----------------------------------------------------------------------------
RtnC411:
call RM32R32M
mov [I.Arg2.Type],XMMRG
test [I.VEX],VEXW
jz .L1
cmp [I.Arch],CPUX64
jnz ErrorDec
mov [I.Arg1.Type],GPR64
mov [I.RandSize],VQWORD+80h
mov [I.LastByte],'q'
.L1: jmp RtnC40C.L1
;-----------------------------------------------------------------------------
RtnC413:
push RtnPINSR?
RtnC412:
mov [I.Arg1.Type],XMMRG
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],XMMRG
mov [I.Arg2.Type2nd],InVVVV
;cmp [I.Mod],3
;setnz [I.Arg3.Mem]
mov [I.Arg3.Type],GPR32
mov [I.Arg3.Type2nd],InRM
FetchB
mov [I.Arg4.Type],80h+1
mov [I.Arg4.ImmB],al
ret
;-----------------------------------------------------------------------------
RtnC414:
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg2.Type],YMMRG
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type],YMMRG
mov [I.Arg1.Type2nd],InReg
jmp RtnC40C.L1
;-----------------------------------------------------------------------------
C4FMA: mov al,XMMRG
test [I.VEX],VEXL
jz .L1
mov al,YMMRG
.L1:
mov [I.Arg1.Type],al
mov [I.Arg2.Type],al
mov [I.Arg3.Type],al
mov [I.Arg4.Type],al
FetchB
shr al,4
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type2nd],InVVVV
lea r8,[I.Arg3]
test [I.VEX],VEXW
jnz .L2
lea r8,[I.Arg4]
.L2:
mov [r8+TArg.Reg],al
lea r8,[I.Arg4]
test [I.VEX],VEXW
jnz .L3
lea r8,[I.Arg3]
.L3:
;cmp [I.Mod],3
;setnz [r8+TArg.Mem]
mov [r8+TArg.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC415:
movzx eax,[I.Reg]
mov edx,[rax*2+BMI1]
or dx,dx
jz ErrorDec
mov [I.Name],dx
mov [I.Prefix],0
mov al,GPR32
cmp [I.Arch],CPUX64
jne .L1
test [I.VEX],VEXW
jz .L1
mov al,GPR64
.L1:
mov [I.Arg2.Type],al
mov [I.Arg1.Type],al
;cmp [I.Mod],3
;setnz [I.Arg2.Mem]
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type2nd],InVVVV
ret
;-----------------------------------------------------------------------------
RtnC416:
call R32RM32M
cmp [I.Arch],CPUX64
jne .L1
test [I.VEX],VEXW
jz .L1
mov [I.Arg1.Type],GPR64
mov [I.Arg2.Type],GPR64
.L1: jmp RtnC40C.L1
;-----------------------------------------------------------------------------
RtnC4C508:
test [I.VEX],VEXW
jz .L1
mov [I.Name],TKUNPCKDQ
.L1: jmp RtnC4C502.L0
;-----------------------------------------------------------------------------
RtnC4C501:
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'q'
.L0: jmp RtnC4C502.L0
;-----------------------------------------------------------------------------
RtnC4C502:
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'d'
.L0: ;
cmp [I.Mod],3
jnz ErrorDec
;
mov al,KXXRG
mov [I.Arg1.Type],al
mov [I.Arg2.Type],al
mov [I.Arg3.Type],al
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type2nd],InVVVV
;cmp [I.Mod],3
;setnz [I.Arg3.Mem]
mov [I.Arg3.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC4C503:
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'d'
.L0: jmp RtnC4C505.L0
;-----------------------------------------------------------------------------
RtnC4C504:
cmp [I.Mod],3
jnz ErrorDec
RtnC4C505:
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'q'
.L0:
mov al,KXXRG
mov [I.Arg1.Type],al
mov [I.Arg2.Type],al
mov [I.Arg1.Type2nd],InReg
;cmp [I.Mod],3
;setnz [I.Arg2.Mem]
mov [I.Arg2.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC4C506:
cmp [I.Mod],3
jz ErrorDec
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'d'
.L0:
mov al,KXXRG
mov [I.Arg1.Type],al
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InReg
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg1.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC4C507:
cmp [I.Mod],3
jz ErrorDec
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'q'
.L0:
jmp RtnC4C506.L0
;-----------------------------------------------------------------------------
RtnC4C509:
cmp [I.Mod],3
jnz ErrorDec
mov al,GPR32
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'q'
mov al,GPR64
.L0:
mov [I.Arg1.Type],KXXRG
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC4C50A:
cmp [I.Mod],3
jnz ErrorDec
mov al,GPR32
test [I.VEX],VEXW
jz .L0
mov [I.LastByte],'q'
mov al,GPR64
.L0:
mov [I.Arg2.Type],KXXRG
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type2nd],InReg
mov [I.Arg1.Type],al
ret
;-----------------------------------------------------------------------------
RtnC4C50B:
cmp [I.Reg],2 ;/2
jb ErrorDec
cmp [I.Reg],3 ;/3
ja ErrorDec
jne .L1
mov [I.Name],TSTMXCSR
.L1:
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg1.Type2nd],InRM
mov [I.Arg1.Type],GPR32
ret
;-----------------------------------------------------------------------------
RtnC4C50C:
mov al,XMMRG
test [I.VEX],VEXL
jz .L1
mov al,YMMRG
.L1:
;cmp [I.Mod],3
;setnz [I.Arg1.Mem]
mov [I.Arg1.Type2nd],InRM
mov [I.Arg2.Type2nd],InReg
mov [I.Arg1.Type],al
mov [I.Arg2.Type],al
ret
;-----------------------------------------------------------------------------
C4C5NB2:
mov dx,TMOVLHPS
jmp C4C5NB1.L1
;-----------------------------------------------------------------------------
C4C5NB1:mov dx,TMOVHLPS
.L1: cmp [I.Mod],3
jne .L2
mov [I.Name],dx
.L2: jmp RtnC4C5
;-----------------------------------------------------------------------------
RtnC4C50D:
mov ah,XMMRG
test [I.VEX],VEXL
jz .L1
mov ah,YMMRG
.L1:
mov al,GPR32
cmp [I.Arch],CPUX64
jnz .L2
mov al,GPR64
.L2:
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type],al
mov [I.Arg2.Type],ah
ret
;-----------------------------------------------------------------------------
RtnC4C50E:
test [I.VEX],VEXL
jnz .L1
mov [I.Name],TZEROUPPER
.L1: ret
;-----------------------------------------------------------------------------
RtnC4C5XRM:
mov al,XMMRG
mov ah,GPR32
test [I.VEX],VEXW
jz .L1
cmp [I.Arch],CPUX64
jnz ErrorDec
mov [I.LastByte],'q'
mov ah,GPR64
.L1:
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type2nd],InRM
mov [I.Arg1.Type],al
mov [I.Arg2.Type],ah
ret
;-----------------------------------------------------------------------------
RtnC4C5RMX:
mov al,XMMRG
mov ah,GPR32
test [I.VEX],VEXW
jz .L1
cmp [I.Arch],CPUX64
jnz ErrorDec
mov [I.LastByte],'q'
mov ah,GPR64
.L1:
mov [I.Arg2.Type2nd],InReg
mov [I.Arg1.Type2nd],InRM
mov [I.Arg2.Type],al
mov [I.Arg1.Type],ah
ret
;-----------------------------------------------------------------------------
RtnC4C50F:
mov al,GPR64
cmp [I.Arch],CPUX64
jz .L1
mov al,GPR32
.L1:
mov [I.Arg1.Type],al
mov [I.Arg2.Type],XMMRG
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type2nd],InRM
jmp RtnC40C.L1
;-----------------------------------------------------------------------------
C4C50F71:
mov edx,T0F71Names
jmp C4C5NDSX
;-----------------------------------------------------------------------------
C4C50F72:
mov edx,T0F72Names
jmp C4C5NDSX
;-----------------------------------------------------------------------------
C4C50F73:
mov edx,T0F73Names
C4C5NDSX:
movzx eax,[I.Reg]
mov edx,[rdx+rax*2]
or dx,dx
jz ErrorDec
mov [I.Name],dx
jmp RtnC4C5
;-----------------------------------------------------------------------------
RtnC4C510:
mov al,YMMRG
test [I.VEX],VEXL
jnz .L1
mov al,XMMRG
.L1:
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],al
mov [I.Arg2.Type2nd],InVVVV
mov [I.Arg3.Type],XMMRG
mov [I.Arg3.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC4C511:
mov al,GPR32
test [I.VEX],VEXW
jz .L1
cmp [I.Arch],CPUX64
jnz ErrorDec
mov al,GPR64
.L1:
mov [I.Arg1.Type],al
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],XMMRG
mov [I.Arg2.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
RtnC4C512:
mov al,GPR32
test [I.VEX],VEXW
jz .L1
cmp [I.Arch],CPUX64
jnz ErrorDec
mov [I.RandSize],VQWORD
mov al,GPR64
.L1:
mov [I.Arg1.Type],XMMRG
mov [I.Arg1.Type2nd],InReg
mov [I.Arg2.Type],XMMRG
mov [I.Arg2.Type2nd],InVVVV
mov [I.Arg3.Type],al
mov [I.Arg3.Type2nd],InRM
ret
;-----------------------------------------------------------------------------
C4C5MXJ:cmp [I.Mod],3
jz RtnC4C5
cmp [I.VVVV],0 ;!1111b=0000b
jnz ErrorDec
jmp RtnC4C50C
;-----------------------------------------------------------------------------
C4C5XMJ:cmp [I.Mod],3
jz .L1
or [I.FlagsVEX],VEXV
cmp [I.VVVV],0 ;!1111b=0000b
jnz ErrorDec
.L1: jmp RtnC4C5