summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2013-02-21 22:48:33 -0500
committerSøren Sandmann Pedersen <ssp@redhat.com>2013-02-21 22:48:33 -0500
commit336e937b5c24e4748b5dfd25ff82184af865442d (patch)
tree18c0dbb9bc1ffe1ad4dc906defe09247f0e6f42e
parent089aa205c3cfcfeab8469f1db61ecf60d1455a61 (diff)
Immediate variant of bextr
-rw-r--r--main.c1
-rw-r--r--simplex86.c4
2 files changed, 5 insertions, 0 deletions
diff --git a/main.c b/main.c
index 495fcaa..e58b31c 100644
--- a/main.c
+++ b/main.c
@@ -183,6 +183,7 @@ main ()
BEGIN_ASM (frag)
I_lzcnt, r12, r12,
I_popcnt, r12, r12,
+ I_bextr, r12, r12, IMM (0xfedeabe),
END_ASM ();
BEGIN_ASM (frag)
diff --git a/simplex86.c b/simplex86.c
index 0e16380..354ed0c 100644
--- a/simplex86.c
+++ b/simplex86.c
@@ -750,6 +750,10 @@ static const variant_t variants[] =
{ I_andn, { A_R64, A_R64, A_RM64 }, F_BMI1, E_RVM, 0xf2, VEX(LZ,0x00,0x0f38,W1) },
{ I_bextr, { A_R32, A_R32, A_RM32 }, F_BMI1, E_RVM, 0xf7, VEX(LZ,0x00,0x0f38,W0) },
{ I_bextr, { A_R64, A_R64, A_RM64 }, F_BMI1, E_RVM, 0xf7, VEX(LZ,0x00,0x0f38,W1) },
+ /* TBM variant of bextr */
+ { I_bextr, { A_R32, A_R32, A_I32 }, F_TBM, E_RM, 0x10, XOP(LZ,0x00,0x0a,W0) },
+ { I_bextr, { A_R64, A_R64, A_I32 }, F_TBM, E_RM, 0x10, XOP(LZ,0x00,0x0a,W1) },
+
{ I_blsr, { A_R32, A_RM32 }, F_BMI1, E_VM, 0xf3, VEX(LZ,0x00,0x0f38,W0) | 1 },
{ I_blsr, { A_R64, A_RM64 }, F_BMI1, E_VM, 0xf3, VEX(LZ,0x00,0x0f38,W1) | 1 },
{ I_blsmsk, { A_R32, A_RM32 }, F_BMI1, E_VM, 0xf3, VEX(LZ,0x00,0x0f38,W0) | 2 },