We can implement extract and deposit fairly efficiently with
the bmi2 pext and pdep instructions.
I did wonder about using bextr and tcg_reg_alloc_new to
allocate the register required to hold the parameters. But
pdep allows the mask to be stored in the constant pool, and
there's the chance that the mask could be re-used, either
by another extract or by a deposit.
I have not yet done any profiling on this yet.
r~
Richard Henderson (6):
tcg: Add tcg_reg_alloc_new
disas/i386: Fix disassembly of two-byte vex prefixes
disas/i386: Add disassembly of vex.0f38.f5
disas/i386: Add disassembly of rorx
tcg/i386: Use pext for extract
tcg/i386: Use pdep for deposit
tcg/i386/tcg-target.h | 10 ++-
tcg/tcg.h | 1 +
disas/i386.c | 29 ++++--
tcg/i386/tcg-target.inc.c | 223 +++++++++++++++++++++++++++++++++++-----------
tcg/tcg.c | 58 +++++++++---
5 files changed, 246 insertions(+), 75 deletions(-)
--
2.13.3