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