e2k: Add mpsadbh instr.
This commit is contained in:
parent
d2b6bb3f9c
commit
acc2f18f97
|
@ -131,6 +131,7 @@ DEF_HELPER_2(psadbw, i64, i64, i64)
|
||||||
DEF_HELPER_2(pavgusb, i64, i64, i64)
|
DEF_HELPER_2(pavgusb, i64, i64, i64)
|
||||||
DEF_HELPER_2(pavgush, i64, i64, i64)
|
DEF_HELPER_2(pavgush, i64, i64, i64)
|
||||||
DEF_HELPER_2(phminposuh, i64, i64, i64)
|
DEF_HELPER_2(phminposuh, i64, i64, i64)
|
||||||
|
DEF_HELPER_2(mpsadbh, i64, i64, i64)
|
||||||
|
|
||||||
/* Float 32/64 Ops */
|
/* Float 32/64 Ops */
|
||||||
#define DEF_HELPER_3_32_64(name) \
|
#define DEF_HELPER_3_32_64(name) \
|
||||||
|
|
|
@ -190,6 +190,13 @@ GEN_HELPER_PACKED(pmulubhh, uh, { \
|
||||||
dst.uh[i] = (((int16_t) s1.ub[i] * s2.sh[i]) + s1.ub[i]) >> 8; \
|
dst.uh[i] = (((int16_t) s1.ub[i] * s2.sh[i]) + s1.ub[i]) >> 8; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
GEN_HELPER_PACKED(mpsadbh, uh, { \
|
||||||
|
dst.uh[i] = abs((int16_t) s1.ub[i ] - s2.ub[0]) \
|
||||||
|
+ abs((int16_t) s1.ub[i + 1] - s2.ub[1]) \
|
||||||
|
+ abs((int16_t) s1.ub[i + 2] - s2.ub[2]) \
|
||||||
|
+ abs((int16_t) s1.ub[i + 3] - s2.ub[3]); \
|
||||||
|
})
|
||||||
|
|
||||||
#define mul_sign(a, b) ((b) < 0 ? -(a) : ((b) > 0 ? (a) : 0))
|
#define mul_sign(a, b) ((b) < 0 ? -(a) : ((b) > 0 ? (a) : 0))
|
||||||
|
|
||||||
GEN_HELPER_PACKED_OP(psignb, sb, mul_sign)
|
GEN_HELPER_PACKED_OP(psignb, sb, mul_sign)
|
||||||
|
|
|
@ -3113,6 +3113,7 @@ static void gen_op(DisasContext *ctx, Instr *instr)
|
||||||
case OP_PMULHRSH: gen_alopf1_ddd(instr, gen_helper_pmulhrsh); break;
|
case OP_PMULHRSH: gen_alopf1_ddd(instr, gen_helper_pmulhrsh); break;
|
||||||
case OP_PMADDH: gen_alopf1_ddd(instr, gen_helper_pmaddh); break;
|
case OP_PMADDH: gen_alopf1_ddd(instr, gen_helper_pmaddh); break;
|
||||||
case OP_PMADDUBSH: gen_alopf1_ddd(instr, gen_helper_pmaddubsh); break;
|
case OP_PMADDUBSH: gen_alopf1_ddd(instr, gen_helper_pmaddubsh); break;
|
||||||
|
case OP_MPSADBH: gen_alopf1_ddd(instr, gen_helper_mpsadbh); break;
|
||||||
case OP_PSADBW: gen_alopf1_ddd(instr, gen_helper_psadbw); break;
|
case OP_PSADBW: gen_alopf1_ddd(instr, gen_helper_psadbw); break;
|
||||||
case OP_PSIGNB: gen_alopf1_ddd(instr, gen_helper_psignb); break;
|
case OP_PSIGNB: gen_alopf1_ddd(instr, gen_helper_psignb); break;
|
||||||
case OP_PSIGNH: gen_alopf1_ddd(instr, gen_helper_psignh); break;
|
case OP_PSIGNH: gen_alopf1_ddd(instr, gen_helper_psignh); break;
|
||||||
|
@ -3439,7 +3440,6 @@ static void gen_op(DisasContext *ctx, Instr *instr)
|
||||||
case OP_MOVX:
|
case OP_MOVX:
|
||||||
case OP_MOVXA:
|
case OP_MOVXA:
|
||||||
case OP_MOVXC:
|
case OP_MOVXC:
|
||||||
case OP_MPSADBH:
|
|
||||||
case OP_PFHADDS:
|
case OP_PFHADDS:
|
||||||
case OP_PFHSUBS:
|
case OP_PFHSUBS:
|
||||||
case OP_PFADDSUBS:
|
case OP_PFADDSUBS:
|
||||||
|
|
Loading…
Reference in New Issue