Patchwork [1/9] tcg: Remove jmp opcode.

login
register
mail settings
Submitter Richard Henderson
Date March 19, 2010, 5:40 p.m.
Message ID <e5fc8c332cd558bd1f259ff8c46d126329419d64.1269029456.git.rth@twiddle.net>
Download mbox | patch
Permalink /patch/48187/
State New
Headers show

Comments

Richard Henderson - March 19, 2010, 5:40 p.m.
This opcode is unused.  It was incorrectly implemented
on at least one host.  Just remove it.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 tcg/README              |    7 +------
 tcg/arm/tcg-target.c    |    7 -------
 tcg/hppa/tcg-target.c   |    5 -----
 tcg/i386/tcg-target.c   |    9 ---------
 tcg/mips/tcg-target.c   |    5 -----
 tcg/ppc/tcg-target.c    |   10 ----------
 tcg/ppc64/tcg-target.c  |   10 ----------
 tcg/sparc/tcg-target.c  |    2 --
 tcg/tcg-opc.h           |    1 -
 tcg/x86_64/tcg-target.c |    8 --------
 10 files changed, 1 insertions(+), 63 deletions(-)
Aurelien Jarno - March 26, 2010, 9:30 p.m.
On Fri, Mar 19, 2010 at 10:40:59AM -0700, Richard Henderson wrote:
> This opcode is unused.  It was incorrectly implemented
> on at least one host.  Just remove it.
> 
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
>  tcg/README              |    7 +------
>  tcg/arm/tcg-target.c    |    7 -------
>  tcg/hppa/tcg-target.c   |    5 -----
>  tcg/i386/tcg-target.c   |    9 ---------
>  tcg/mips/tcg-target.c   |    5 -----
>  tcg/ppc/tcg-target.c    |   10 ----------
>  tcg/ppc64/tcg-target.c  |   10 ----------
>  tcg/sparc/tcg-target.c  |    2 --
>  tcg/tcg-opc.h           |    1 -
>  tcg/x86_64/tcg-target.c |    8 --------
>  10 files changed, 1 insertions(+), 63 deletions(-)

Acked-by: Aurelien Jarno <aurelien@aurel32.net>

> diff --git a/tcg/README b/tcg/README
> index 281c114..53737fb 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 35e14c1..167728a 100644
> --- a/tcg/arm/tcg-target.c
> +++ b/tcg/arm/tcg-target.c
> @@ -1312,12 +1312,6 @@ static inline void tcg_out_op(TCGContext *s, int 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;
> @@ -1540,7 +1534,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 4677971..98f04fe 100644
> --- a/tcg/hppa/tcg-target.c
> +++ b/tcg/hppa/tcg-target.c
> @@ -753,10 +753,6 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
>          tcg_out32(s, BLE_SR4 | INSN_R2(args[0]));
>          tcg_out_mov(s, TCG_REG_RP, TCG_REG_R31);
>          break;
> -    case INDEX_op_jmp:
> -        fprintf(stderr, "unimplemented jmp\n");
> -        tcg_abort();
> -        break;
>      case INDEX_op_br:
>          fprintf(stderr, "unimplemented br\n");
>          tcg_abort();
> @@ -892,7 +888,6 @@ static const TCGTargetOpDef hppa_op_defs[] = {
>      { INDEX_op_goto_tb, { } },
>  
>      { INDEX_op_call, { "r" } },
> -    { 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 09c73b4..c7af11c 100644
> --- a/tcg/i386/tcg-target.c
> +++ b/tcg/i386/tcg-target.c
> @@ -1001,14 +1001,6 @@ static inline void tcg_out_op(TCGContext *s, int opc,
>              tcg_out_modrm(s, 0xff, 2, args[0]);
>          }
>          break;
> -    case INDEX_op_jmp:
> -        if (const_args[0]) {
> -            tcg_out8(s, 0xe9);
> -            tcg_out32(s, args[0] - (tcg_target_long)s->code_ptr - 4);
> -        } else {
> -            tcg_out_modrm(s, 0xff, 4, args[0]);
> -        }
> -        break;
>      case INDEX_op_br:
>          tcg_out_jxx(s, JCC_JMP, args[0], 0);
>          break;
> @@ -1226,7 +1218,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/mips/tcg-target.c b/tcg/mips/tcg-target.c
> index ec687ad..cb3adf3 100644
> --- a/tcg/mips/tcg-target.c
> +++ b/tcg/mips/tcg-target.c
> @@ -1115,10 +1115,6 @@ static inline void tcg_out_op(TCGContext *s, int 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;
> @@ -1326,7 +1322,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 81633ed..4098a4f 100644
> --- a/tcg/ppc/tcg-target.c
> +++ b/tcg/ppc/tcg-target.c
> @@ -1331,15 +1331,6 @@ static void tcg_out_op(TCGContext *s, int 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;
> @@ -1721,7 +1712,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 cf36c55..4087d17 100644
> --- a/tcg/ppc64/tcg-target.c
> +++ b/tcg/ppc64/tcg-target.c
> @@ -1242,15 +1242,6 @@ static void tcg_out_op (TCGContext *s, int 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;
> @@ -1575,7 +1566,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/sparc/tcg-target.c b/tcg/sparc/tcg-target.c
> index 620c666..e119166 100644
> --- a/tcg/sparc/tcg-target.c
> +++ b/tcg/sparc/tcg-target.c
> @@ -1169,7 +1169,6 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
>                       TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE -
>                       sizeof(long), HOST_LD_OP);
>          break;
> -    case INDEX_op_jmp:
>      case INDEX_op_br:
>          tcg_out_branch_i32(s, COND_A, args[0]);
>          tcg_out_nop(s);
> @@ -1431,7 +1430,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 01fea1e..2682bd7 100644
> --- a/tcg/tcg-opc.h
> +++ b/tcg/tcg-opc.h
> @@ -37,7 +37,6 @@ DEF2(discard, 1, 0, 0, 0)
>  
>  DEF2(set_label, 0, 0, 1, 0)
>  DEF2(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */
> -DEF2(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
>  DEF2(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
>  
>  DEF2(mov_i32, 1, 1, 0, 0)
> diff --git a/tcg/x86_64/tcg-target.c b/tcg/x86_64/tcg-target.c
> index ea313fa..b1f2c12 100644
> --- a/tcg/x86_64/tcg-target.c
> +++ b/tcg/x86_64/tcg-target.c
> @@ -935,13 +935,6 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
>              tcg_out_modrm(s, 0xff, 2, args[0]);
>          }
>          break;
> -    case INDEX_op_jmp:
> -        if (const_args[0]) {
> -            tcg_out_goto(s, 0, (void *) args[0]);
> -        } else {
> -            tcg_out_modrm(s, 0xff, 4, args[0]);
> -        }
> -        break;
>      case INDEX_op_br:
>          tcg_out_jxx(s, JCC_JMP, args[0]);
>          break;
> @@ -1320,7 +1313,6 @@ static const TCGTargetOpDef x86_64_op_defs[] = {
>      { INDEX_op_exit_tb, { } },
>      { INDEX_op_goto_tb, { } },
>      { INDEX_op_call, { "ri" } }, /* XXX: might need a specific constant constraint */
> -    { INDEX_op_jmp, { "ri" } }, /* XXX: might need a specific constant constraint */
>      { INDEX_op_br, { } },
>  
>      { INDEX_op_mov_i32, { "r", "r" } },
> -- 
> 1.6.6.1
> 
> 
> 
>

Patch

diff --git a/tcg/README b/tcg/README
index 281c114..53737fb 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 35e14c1..167728a 100644
--- a/tcg/arm/tcg-target.c
+++ b/tcg/arm/tcg-target.c
@@ -1312,12 +1312,6 @@  static inline void tcg_out_op(TCGContext *s, int 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;
@@ -1540,7 +1534,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 4677971..98f04fe 100644
--- a/tcg/hppa/tcg-target.c
+++ b/tcg/hppa/tcg-target.c
@@ -753,10 +753,6 @@  static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
         tcg_out32(s, BLE_SR4 | INSN_R2(args[0]));
         tcg_out_mov(s, TCG_REG_RP, TCG_REG_R31);
         break;
-    case INDEX_op_jmp:
-        fprintf(stderr, "unimplemented jmp\n");
-        tcg_abort();
-        break;
     case INDEX_op_br:
         fprintf(stderr, "unimplemented br\n");
         tcg_abort();
@@ -892,7 +888,6 @@  static const TCGTargetOpDef hppa_op_defs[] = {
     { INDEX_op_goto_tb, { } },
 
     { INDEX_op_call, { "r" } },
-    { 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 09c73b4..c7af11c 100644
--- a/tcg/i386/tcg-target.c
+++ b/tcg/i386/tcg-target.c
@@ -1001,14 +1001,6 @@  static inline void tcg_out_op(TCGContext *s, int opc,
             tcg_out_modrm(s, 0xff, 2, args[0]);
         }
         break;
-    case INDEX_op_jmp:
-        if (const_args[0]) {
-            tcg_out8(s, 0xe9);
-            tcg_out32(s, args[0] - (tcg_target_long)s->code_ptr - 4);
-        } else {
-            tcg_out_modrm(s, 0xff, 4, args[0]);
-        }
-        break;
     case INDEX_op_br:
         tcg_out_jxx(s, JCC_JMP, args[0], 0);
         break;
@@ -1226,7 +1218,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/mips/tcg-target.c b/tcg/mips/tcg-target.c
index ec687ad..cb3adf3 100644
--- a/tcg/mips/tcg-target.c
+++ b/tcg/mips/tcg-target.c
@@ -1115,10 +1115,6 @@  static inline void tcg_out_op(TCGContext *s, int 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;
@@ -1326,7 +1322,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 81633ed..4098a4f 100644
--- a/tcg/ppc/tcg-target.c
+++ b/tcg/ppc/tcg-target.c
@@ -1331,15 +1331,6 @@  static void tcg_out_op(TCGContext *s, int 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;
@@ -1721,7 +1712,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 cf36c55..4087d17 100644
--- a/tcg/ppc64/tcg-target.c
+++ b/tcg/ppc64/tcg-target.c
@@ -1242,15 +1242,6 @@  static void tcg_out_op (TCGContext *s, int 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;
@@ -1575,7 +1566,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/sparc/tcg-target.c b/tcg/sparc/tcg-target.c
index 620c666..e119166 100644
--- a/tcg/sparc/tcg-target.c
+++ b/tcg/sparc/tcg-target.c
@@ -1169,7 +1169,6 @@  static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
                      TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE -
                      sizeof(long), HOST_LD_OP);
         break;
-    case INDEX_op_jmp:
     case INDEX_op_br:
         tcg_out_branch_i32(s, COND_A, args[0]);
         tcg_out_nop(s);
@@ -1431,7 +1430,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 01fea1e..2682bd7 100644
--- a/tcg/tcg-opc.h
+++ b/tcg/tcg-opc.h
@@ -37,7 +37,6 @@  DEF2(discard, 1, 0, 0, 0)
 
 DEF2(set_label, 0, 0, 1, 0)
 DEF2(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */
-DEF2(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
 DEF2(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
 
 DEF2(mov_i32, 1, 1, 0, 0)
diff --git a/tcg/x86_64/tcg-target.c b/tcg/x86_64/tcg-target.c
index ea313fa..b1f2c12 100644
--- a/tcg/x86_64/tcg-target.c
+++ b/tcg/x86_64/tcg-target.c
@@ -935,13 +935,6 @@  static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
             tcg_out_modrm(s, 0xff, 2, args[0]);
         }
         break;
-    case INDEX_op_jmp:
-        if (const_args[0]) {
-            tcg_out_goto(s, 0, (void *) args[0]);
-        } else {
-            tcg_out_modrm(s, 0xff, 4, args[0]);
-        }
-        break;
     case INDEX_op_br:
         tcg_out_jxx(s, JCC_JMP, args[0]);
         break;
@@ -1320,7 +1313,6 @@  static const TCGTargetOpDef x86_64_op_defs[] = {
     { INDEX_op_exit_tb, { } },
     { INDEX_op_goto_tb, { } },
     { INDEX_op_call, { "ri" } }, /* XXX: might need a specific constant constraint */
-    { INDEX_op_jmp, { "ri" } }, /* XXX: might need a specific constant constraint */
     { INDEX_op_br, { } },
 
     { INDEX_op_mov_i32, { "r", "r" } },