TCG temporary operands allocate a 32-bit or 64-bit TCG temporary, and later automatically free it.
Signed-off-by: Jan Bobek <jan.bo...@gmail.com> --- target/i386/translate.c | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 99f46be34e..7fc5149d29 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4696,6 +4696,50 @@ static int ck_cpuid(CPUX86State *env, DisasContext *s, CkCpuidFeat feat) insnop_finalize(opTarg)(&ctxt->arg, env, s, modrm, is_write, arg); \ } +/* + * tcg_temp_i32 + * + * Operand which allocates a 32-bit TCG temporary and frees it + * automatically after use. + */ +typedef TCGv_i32 insnop_arg_t(tcg_temp_i32); +typedef struct {} insnop_ctxt_t(tcg_temp_i32); + +INSNOP_INIT(tcg_temp_i32) +{ + return 0; +} +INSNOP_PREPARE(tcg_temp_i32) +{ + return tcg_temp_new_i32(); +} +INSNOP_FINALIZE(tcg_temp_i32) +{ + tcg_temp_free_i32(arg); +} + +/* + * tcg_temp_i64 + * + * Operand which allocates a 64-bit TCG temporary and frees it + * automatically after use. + */ +typedef TCGv_i64 insnop_arg_t(tcg_temp_i64); +typedef struct {} insnop_ctxt_t(tcg_temp_i64); + +INSNOP_INIT(tcg_temp_i64) +{ + return 0; +} +INSNOP_PREPARE(tcg_temp_i64) +{ + return tcg_temp_new_i64(); +} +INSNOP_FINALIZE(tcg_temp_i64) +{ + tcg_temp_free_i64(arg); +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { -- 2.20.1