mirror of
https://github.com/cea-sec/miasm
synced 2026-08-17 10:26:03 -04:00
[arch/x86] add (some) pmovsx familly instructions support
This commit is contained in:
parent
3ca7226793
commit
ff24b44fdf
2 changed files with 62 additions and 1 deletions
|
|
@ -4611,6 +4611,18 @@ addop("pmovmskb", [bs8(0x0f), bs8(0xd7), no_xmm_pref] +
|
|||
addop("pmovmskb", [bs8(0x0f), bs8(0xd7), pref_66] +
|
||||
rmmod(reg_modrm, rm_arg_xmm_reg))
|
||||
|
||||
addop("pmovsxwd", [bs8(0x0f), bs8(0x38), bs8(0x23), pref_66] +
|
||||
rmmod(xmm_reg, rm_arg_xmm_m64))
|
||||
|
||||
addop("pmovsxwq", [bs8(0x0f), bs8(0x38), bs8(0x24), pref_66] +
|
||||
rmmod(xmm_reg, rm_arg_xmm_m32))
|
||||
|
||||
addop("pmovsxbd", [bs8(0x0f), bs8(0x38), bs8(0x21), pref_66] +
|
||||
rmmod(xmm_reg, rm_arg_xmm_m32))
|
||||
|
||||
addop("pmovsxdq", [bs8(0x0f), bs8(0x38), bs8(0x25), pref_66] +
|
||||
rmmod(xmm_reg, rm_arg_xmm_m64))
|
||||
|
||||
addop("shufps", [bs8(0x0f), bs8(0xc6), no_xmm_pref] +
|
||||
rmmod(xmm_reg, rm_arg_xmm) + [u08])
|
||||
addop("shufpd", [bs8(0x0f), bs8(0xc6), pref_66] +
|
||||
|
|
|
|||
|
|
@ -4619,7 +4619,6 @@ def punpckldq(ir, instr, dst, src):
|
|||
def punpcklqdq(ir, instr, dst, src):
|
||||
return punpck(ir, instr, dst, src, 64, 0)
|
||||
|
||||
|
||||
def pinsr(_, instr, dst, src, imm, size):
|
||||
e = []
|
||||
|
||||
|
|
@ -4707,6 +4706,52 @@ def unpcklpd(_, instr, dst, src):
|
|||
e.append(m2_expr.ExprAssign(dst, src))
|
||||
return e, []
|
||||
|
||||
def pmovsxwd(ir, instr, dst, src):
|
||||
out = []
|
||||
for i in range(4):
|
||||
lane = src[16 * i:16 * (i + 1)]
|
||||
out.append(lane.signExtend(32))
|
||||
return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], []
|
||||
|
||||
def pmovsxwq(ir, instr, dst, src):
|
||||
e = []
|
||||
if dst.size != 128:
|
||||
raise RuntimeError("Unsupported size %d" % dst.size)
|
||||
|
||||
out = []
|
||||
for i in range(2):
|
||||
w = src[16 * i:16 * (i + 1)]
|
||||
out.append(w.signExtend(64))
|
||||
|
||||
e.append(m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out)))
|
||||
return e, []
|
||||
|
||||
def pmovmskb(ir, instr, dst, src):
|
||||
e = []
|
||||
e.append(m2_expr.ExprAssign(dst, src.zeroExtend(dst.size)))
|
||||
return e, []
|
||||
|
||||
def pmovsxbd(ir, instr, dst, src):
|
||||
e = []
|
||||
if dst.size != 128:
|
||||
raise RuntimeError("Unsupported size %d" % dst.size)
|
||||
out = []
|
||||
for i in range(4):
|
||||
b = src[8 * i: 8 * (i + 1)]
|
||||
out.append(b.signExtend(32))
|
||||
e.append(m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out)))
|
||||
return e, []
|
||||
|
||||
def pmovsxdq(_, instr, dst, src):
|
||||
e = []
|
||||
if dst.size != 128:
|
||||
raise RuntimeError("Unsupported size %d" % dst.size)
|
||||
out = []
|
||||
for i in range(2):
|
||||
d = src[32 * i: 32 * (i + 1)]
|
||||
out.append(d.signExtend(64))
|
||||
e.append(m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out)))
|
||||
return e, []
|
||||
|
||||
def movlpd(_, instr, dst, src):
|
||||
e = []
|
||||
|
|
@ -5783,6 +5828,10 @@ mnemo_func = {'mov': mov,
|
|||
"sqrtss": sqrtss,
|
||||
|
||||
"pmovmskb": pmovmskb,
|
||||
"pmovsxwd": pmovsxwd,
|
||||
"pmovsxwq": pmovsxwq,
|
||||
"pmovsxbd": pmovsxbd,
|
||||
"pmovsxdq": pmovsxdq,
|
||||
|
||||
"phminposuw": phminposuw,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue