diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-12-23 23:03:33 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-12-24 18:38:19 +0100 |
| commit | 20f23a90dfacfdfa17d764922d83ee99827ad799 (patch) | |
| tree | 5e894c6a662ee063c236d60ecad8808e0178e54f /miasm2/arch/x86/sem.py | |
| parent | e3d844ba60ef0ead63dd07317a6e28f7b38cf6cd (diff) | |
| download | miasm-20f23a90dfacfdfa17d764922d83ee99827ad799.tar.gz miasm-20f23a90dfacfdfa17d764922d83ee99827ad799.zip | |
X86: add punpck
Diffstat (limited to 'miasm2/arch/x86/sem.py')
| -rw-r--r-- | miasm2/arch/x86/sem.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py index f7f6ea75..18634551 100644 --- a/miasm2/arch/x86/sem.py +++ b/miasm2/arch/x86/sem.py @@ -3582,6 +3582,33 @@ def pcmpeqw(ir, instr, a, b): def pcmpeqd(ir, instr, a, b): return pcmpeq(ir, instr, a, b, 32) + + + +def punpckh(ir, instr, a, b, size): + e = [] + for i in xrange(a.size / (2 * size)): + src1 = a[size * i + a.size / 2 : size * i + a.size / 2 + size] + src2 = b[size * i + a.size / 2 : size * i + a.size / 2 + size] + e.append(m2_expr.ExprAff(a[size * 2 * i : size * 2 * i + size], src1)) + e.append(m2_expr.ExprAff(a[size * (2 * i + 1) : size * (2 * i + 1) + size], src2)) + return e, [] + + +def punpckhbw(ir, instr, a, b): + return punpckh(ir, instr, a, b, 8) + +def punpckhwd(ir, instr, a, b): + return punpckh(ir, instr, a, b, 16) + +def punpckhdq(ir, instr, a, b): + return punpckh(ir, instr, a, b, 32) + +def punpckhqdq(ir, instr, a, b): + return punpckh(ir, instr, a, b, 64) + + + mnemo_func = {'mov': mov, 'xchg': xchg, 'movzx': movzx, @@ -4017,6 +4044,11 @@ mnemo_func = {'mov': mov, "pcmpeqw" : pcmpeqw, "pcmpeqd" : pcmpeqd, + "punpckhbw" : punpckhbw, + "punpckhwd" : punpckhwd, + "punpckhdq" : punpckhdq, + "punpckhqdq" : punpckhqdq, + } |