On Mon, Oct 1, 2012 at 7:00 PM, Aurelien Jarno <aurel...@aurel32.net> wrote: > The TCG jmp operation doesn't really make sense in the QEMU context, it > is unused, it is not implemented by some targets, and it is wrongly > implemented by some others. > > This patch simply removes it. > > Cc: Andrzej Zaborowski <balr...@gmail.com> > Cc: Richard Henderson <r...@twiddle.net> > Cc: Vassili Karpov (malc) <av1...@comtv.ru> > Cc: Alexander Graf <ag...@suse.de> > Cc: Blue Swirl <blauwir...@gmail.com>
Acked-by: Blue Swirl <blauwir...@gmail.com> > Cc: Stefan Weil <s...@weilnetz.de> > Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> > --- > tcg/README | 7 +------ > tcg/arm/tcg-target.c | 7 ------- > tcg/hppa/tcg-target.c | 6 ------ > tcg/i386/tcg-target.c | 9 --------- > tcg/ia64/tcg-target.c | 4 ---- > tcg/mips/tcg-target.c | 5 ----- > tcg/ppc/tcg-target.c | 10 ---------- > tcg/ppc64/tcg-target.c | 10 ---------- > tcg/s390/tcg-target.c | 6 ------ > tcg/sparc/tcg-target.c | 2 -- > tcg/tcg-opc.h | 1 - > tcg/tci/tcg-target.c | 4 ---- > tci.c | 1 - > 13 files changed, 1 insertion(+), 71 deletions(-) > > diff --git a/tcg/README b/tcg/README > index 27846f1..aa86992 100644 > --- a/tcg/README > +++ b/tcg/README > @@ -88,8 +88,7 @@ supported. > > * Branches: > > -Use the instruction 'br' to jump to a label. Use 'jmp' to jump to an > -explicit address. Conditional branches can only jump to labels. > +Use the instruction 'br' to jump to a label. > > 3.3) Code Optimizations > > @@ -129,10 +128,6 @@ call function 'ptr' (pointer type) > > ********* Jumps/Labels > > -* jmp t0 > - > -Absolute jump to address t0 (pointer type). > - > * set_label $label > > Define label 'label' at the current program point. > diff --git a/tcg/arm/tcg-target.c b/tcg/arm/tcg-target.c > index 2bad0a2..1e61864 100644 > --- a/tcg/arm/tcg-target.c > +++ b/tcg/arm/tcg-target.c > @@ -1530,12 +1530,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, > else > tcg_out_callr(s, COND_AL, args[0]); > break; > - case INDEX_op_jmp: > - if (const_args[0]) > - tcg_out_goto(s, COND_AL, args[0]); > - else > - tcg_out_bx(s, COND_AL, args[0]); > - break; > case INDEX_op_br: > tcg_out_goto_label(s, COND_AL, args[0]); > break; > @@ -1769,7 +1763,6 @@ static const TCGTargetOpDef arm_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "ri" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/hppa/tcg-target.c b/tcg/hppa/tcg-target.c > index 2c79c10..44974c4 100644 > --- a/tcg/hppa/tcg-target.c > +++ b/tcg/hppa/tcg-target.c > @@ -1353,11 +1353,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, const TCGArg *args, > } > break; > > - case INDEX_op_jmp: > - fprintf(stderr, "unimplemented jmp\n"); > - tcg_abort(); > - break; > - > case INDEX_op_br: > tcg_out_branch(s, args[0], 1); > break; > @@ -1592,7 +1587,6 @@ static const TCGTargetOpDef hppa_op_defs[] = { > { INDEX_op_goto_tb, { } }, > > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "r" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c > index 0e218c8..bb2306d 100644 > --- a/tcg/i386/tcg-target.c > +++ b/tcg/i386/tcg-target.c > @@ -1513,14 +1513,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, > tcg_out_modrm(s, OPC_GRP5, EXT5_CALLN_Ev, args[0]); > } > break; > - case INDEX_op_jmp: > - if (const_args[0]) { > - tcg_out_jmp(s, args[0]); > - } else { > - /* jmp *reg */ > - tcg_out_modrm(s, OPC_GRP5, EXT5_JMPN_Ev, args[0]); > - } > - break; > case INDEX_op_br: > tcg_out_jxx(s, JCC_JMP, args[0], 0); > break; > @@ -1848,7 +1840,6 @@ static const TCGTargetOpDef x86_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "ri" } }, > { INDEX_op_br, { } }, > { INDEX_op_mov_i32, { "r", "r" } }, > { INDEX_op_movi_i32, { "r" } }, > diff --git a/tcg/ia64/tcg-target.c b/tcg/ia64/tcg-target.c > index dc9c12c..705712f 100644 > --- a/tcg/ia64/tcg-target.c > +++ b/tcg/ia64/tcg-target.c > @@ -1916,9 +1916,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, > case INDEX_op_goto_tb: > tcg_out_goto_tb(s, args[0]); > break; > - case INDEX_op_jmp: > - tcg_out_jmp(s, args[0]); > - break; > > case INDEX_op_movi_i32: > tcg_out_movi(s, TCG_TYPE_I32, args[0], args[1]); > @@ -2156,7 +2153,6 @@ static const TCGTargetOpDef ia64_op_defs[] = { > { INDEX_op_call, { "r" } }, > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > - { INDEX_op_jmp, { "r" } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > { INDEX_op_movi_i32, { "r" } }, > diff --git a/tcg/mips/tcg-target.c b/tcg/mips/tcg-target.c > index 34e3e7f..7e4013e 100644 > --- a/tcg/mips/tcg-target.c > +++ b/tcg/mips/tcg-target.c > @@ -1322,10 +1322,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, > tcg_out_opc_reg(s, OPC_JALR, TCG_REG_RA, args[0], 0); > tcg_out_nop(s); > break; > - case INDEX_op_jmp: > - tcg_out_opc_reg(s, OPC_JR, 0, args[0], 0); > - tcg_out_nop(s); > - break; > case INDEX_op_br: > tcg_out_brcond(s, TCG_COND_EQ, TCG_REG_ZERO, TCG_REG_ZERO, args[0]); > break; > @@ -1577,7 +1573,6 @@ static const TCGTargetOpDef mips_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "C" } }, > - { INDEX_op_jmp, { "r" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/ppc/tcg-target.c b/tcg/ppc/tcg-target.c > index 90c275d..56baedd 100644 > --- a/tcg/ppc/tcg-target.c > +++ b/tcg/ppc/tcg-target.c > @@ -1417,15 +1417,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, > const TCGArg *args, > case INDEX_op_call: > tcg_out_call (s, args[0], const_args[0]); > break; > - case INDEX_op_jmp: > - if (const_args[0]) { > - tcg_out_b (s, 0, args[0]); > - } > - else { > - tcg_out32 (s, MTSPR | RS (args[0]) | CTR); > - tcg_out32 (s, BCCTR | BO_ALWAYS); > - } > - break; > case INDEX_op_movi_i32: > tcg_out_movi(s, TCG_TYPE_I32, args[0], args[1]); > break; > @@ -1904,7 +1895,6 @@ static const TCGTargetOpDef ppc_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "ri" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/ppc64/tcg-target.c b/tcg/ppc64/tcg-target.c > index 19944bc..6e9b363 100644 > --- a/tcg/ppc64/tcg-target.c > +++ b/tcg/ppc64/tcg-target.c > @@ -1245,15 +1245,6 @@ static void tcg_out_op (TCGContext *s, TCGOpcode opc, > const TCGArg *args, > case INDEX_op_call: > tcg_out_call (s, args[0], const_args[0]); > break; > - case INDEX_op_jmp: > - if (const_args[0]) { > - tcg_out_b (s, 0, args[0]); > - } > - else { > - tcg_out32 (s, MTSPR | RS (args[0]) | CTR); > - tcg_out32 (s, BCCTR | BO_ALWAYS); > - } > - break; > case INDEX_op_movi_i32: > tcg_out_movi (s, TCG_TYPE_I32, args[0], args[1]); > break; > @@ -1588,7 +1579,6 @@ static const TCGTargetOpDef ppc_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "ri" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/s390/tcg-target.c b/tcg/s390/tcg-target.c > index 3b90605..4b43059 100644 > --- a/tcg/s390/tcg-target.c > +++ b/tcg/s390/tcg-target.c > @@ -2037,11 +2037,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, > break; > #endif /* TCG_TARGET_REG_BITS == 64 */ > > - case INDEX_op_jmp: > - /* This one is obsolete and never emitted. */ > - tcg_abort(); > - break; > - > default: > fprintf(stderr,"unimplemented opc 0x%x\n",opc); > tcg_abort(); > @@ -2052,7 +2047,6 @@ static const TCGTargetOpDef s390_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "ri" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/sparc/tcg-target.c b/tcg/sparc/tcg-target.c > index 8fd7f86..e82fab2 100644 > --- a/tcg/sparc/tcg-target.c > +++ b/tcg/sparc/tcg-target.c > @@ -1097,7 +1097,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode > opc, const TCGArg *args, > /* delay slot */ > tcg_out_nop(s); > break; > - case INDEX_op_jmp: > case INDEX_op_br: > tcg_out_branch_i32(s, COND_A, args[0]); > tcg_out_nop(s); > @@ -1367,7 +1366,6 @@ static const TCGTargetOpDef sparc_op_defs[] = { > { INDEX_op_exit_tb, { } }, > { INDEX_op_goto_tb, { } }, > { INDEX_op_call, { "ri" } }, > - { INDEX_op_jmp, { "ri" } }, > { INDEX_op_br, { } }, > > { INDEX_op_mov_i32, { "r", "r" } }, > diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h > index dbb0e39..04cb7ca 100644 > --- a/tcg/tcg-opc.h > +++ b/tcg/tcg-opc.h > @@ -38,7 +38,6 @@ DEF(discard, 1, 0, 0, 0) > > DEF(set_label, 0, 0, 1, TCG_OPF_BB_END) > DEF(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */ > -DEF(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS) > DEF(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS) > > #define IMPL(X) (X ? 0 : TCG_OPF_NOT_PRESENT) > diff --git a/tcg/tci/tcg-target.c b/tcg/tci/tcg-target.c > index d272a90..e930740 100644 > --- a/tcg/tci/tcg-target.c > +++ b/tcg/tci/tcg-target.c > @@ -69,7 +69,6 @@ static const TCGTargetOpDef tcg_target_op_defs[] = { > { INDEX_op_exit_tb, { NULL } }, > { INDEX_op_goto_tb, { NULL } }, > { INDEX_op_call, { RI } }, > - { INDEX_op_jmp, { RI } }, > { INDEX_op_br, { NULL } }, > > { INDEX_op_mov_i32, { R, R } }, > @@ -583,9 +582,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, > const TCGArg *args, > case INDEX_op_call: > tcg_out_ri(s, const_args[0], args[0]); > break; > - case INDEX_op_jmp: > - TODO(); > - break; > case INDEX_op_setcond_i32: > tcg_out_r(s, args[0]); > tcg_out_r(s, args[1]); > diff --git a/tci.c b/tci.c > index a4f7b78..98f5f71 100644 > --- a/tci.c > +++ b/tci.c > @@ -505,7 +505,6 @@ tcg_target_ulong tcg_qemu_tb_exec(CPUArchState *cpustate, > uint8_t *tb_ptr) > tci_write_reg(TCG_REG_R0, tmp64); > #endif > break; > - case INDEX_op_jmp: > case INDEX_op_br: > label = tci_read_label(&tb_ptr); > assert(tb_ptr == old_code_ptr + op_size); > -- > 1.7.10.4 >