qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 17/22] tcg-i386: Tidy unary arithmetic.


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH 17/22] tcg-i386: Tidy unary arithmetic.
Date: Fri, 21 May 2010 11:41:51 +0200
User-agent: Mutt/1.5.20 (2009-06-14)

On Wed, Apr 14, 2010 at 11:22:39AM -0700, Richard Henderson wrote:
> Define OPC_GRP3 and EXT3_FOO to match.  Use them instead of
> bare constants.
> 
> Define OPC_GRP5 and rename the existing EXT_BAR to EXT5_BAR to
> make it clear which extension should be used with which opcode.
> 
> Signed-off-by: Richard Henderson <address@hidden>

Acked-by: Aurelien Jarno <address@hidden>

> ---
>  tcg/i386/tcg-target.c |   38 +++++++++++++++++++++++++-------------
>  1 files changed, 25 insertions(+), 13 deletions(-)
> 
> diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
> index 0c1a53a..c3f3e4d 100644
> --- a/tcg/i386/tcg-target.c
> +++ b/tcg/i386/tcg-target.c
> @@ -195,7 +195,11 @@ static inline int tcg_target_const_match(tcg_target_long 
> val,
>  #define OPC_SHIFT_cl (0xd3)
>  #define OPC_TESTL    (0x85)
>  
> -/* Group 1 opcode extensions for 0x80-0x83.  */
> +#define OPC_GRP3_Ev  (0xf7)
> +#define OPC_GRP5     (0xff)
> +
> +/* Group 1 opcode extensions for 0x80-0x83.
> +   These are also used as modifiers for OPC_ARITH.  */
>  #define ARITH_ADD 0
>  #define ARITH_OR  1
>  #define ARITH_ADC 2
> @@ -212,9 +216,17 @@ static inline int tcg_target_const_match(tcg_target_long 
> val,
>  #define SHIFT_SHR 5
>  #define SHIFT_SAR 7
>  
> -/* Group 5 opcode extensions for 0xff.  */
> -#define EXT_CALLN_Ev 2
> -#define EXT_JMPN_Ev  4
> +/* Group 3 opcode extensions for 0xf6, 0xf7.  To be used with OPC_GRP3.  */
> +#define EXT3_NOT   2
> +#define EXT3_NEG   3
> +#define EXT3_MUL   4
> +#define EXT3_IMUL  5
> +#define EXT3_DIV   6
> +#define EXT3_IDIV  7
> +
> +/* Group 5 opcode extensions for 0xff.  To be used with OPC_GRP5.  */
> +#define EXT5_CALLN_Ev        2
> +#define EXT5_JMPN_Ev 4
>  
>  /* Condition codes to be added to OPC_JCC_{long,short}.  */
>  #define JCC_JMP (-1)
> @@ -1081,7 +1093,7 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode 
> opc,
>              tcg_out32(s, 0);
>          } else {
>              /* indirect jump method */
> -            tcg_out_modrm_offset(s, 0xff, EXT_JMPN_Ev, -1, 
> +            tcg_out_modrm_offset(s, OPC_GRP5, EXT5_JMPN_Ev, -1, 
>                                   (tcg_target_long)(s->tb_next + args[0]));
>          }
>          s->tb_next_offset[args[0]] = s->code_ptr - s->code_buf;
> @@ -1091,7 +1103,7 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode 
> opc,
>              tcg_out_calli(s, args[0]);
>          } else {
>              /* call *reg */
> -            tcg_out_modrm(s, 0xff, EXT_CALLN_Ev, args[0]);
> +            tcg_out_modrm(s, OPC_GRP5, EXT5_CALLN_Ev, args[0]);
>          }
>          break;
>      case INDEX_op_jmp:
> @@ -1100,7 +1112,7 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode 
> opc,
>              tcg_out32(s, args[0] - (tcg_target_long)s->code_ptr - 4);
>          } else {
>              /* jmp *reg */
> -            tcg_out_modrm(s, 0xff, EXT_JMPN_Ev, args[0]);
> +            tcg_out_modrm(s, OPC_GRP5, EXT5_JMPN_Ev, args[0]);
>          }
>          break;
>      case INDEX_op_br:
> @@ -1177,13 +1189,13 @@ static inline void tcg_out_op(TCGContext *s, 
> TCGOpcode opc,
>          }
>          break;
>      case INDEX_op_mulu2_i32:
> -        tcg_out_modrm(s, 0xf7, 4, args[3]);
> +        tcg_out_modrm(s, OPC_GRP3_Ev, EXT3_MUL, args[3]);
>          break;
>      case INDEX_op_div2_i32:
> -        tcg_out_modrm(s, 0xf7, 7, args[4]);
> +        tcg_out_modrm(s, OPC_GRP3_Ev, EXT3_IDIV, args[4]);
>          break;
>      case INDEX_op_divu2_i32:
> -        tcg_out_modrm(s, 0xf7, 6, args[4]);
> +        tcg_out_modrm(s, OPC_GRP3_Ev, EXT3_DIV, args[4]);
>          break;
>      case INDEX_op_shl_i32:
>          c = SHIFT_SHL;
> @@ -1247,11 +1259,11 @@ static inline void tcg_out_op(TCGContext *s, 
> TCGOpcode opc,
>          break;
>  
>      case INDEX_op_neg_i32:
> -        tcg_out_modrm(s, 0xf7, 3, args[0]);
> +        tcg_out_modrm(s, OPC_GRP3_Ev, EXT3_NEG, args[0]);
>          break;
>  
>      case INDEX_op_not_i32:
> -        tcg_out_modrm(s, 0xf7, 2, args[0]);
> +        tcg_out_modrm(s, OPC_GRP3_Ev, EXT3_NOT, args[0]);
>          break;
>  
>      case INDEX_op_ext8s_i32:
> @@ -1419,7 +1431,7 @@ void tcg_target_qemu_prologue(TCGContext *s)
>      stack_addend = frame_size - push_size;
>      tcg_out_addi(s, TCG_REG_ESP, -stack_addend);
>  
> -    tcg_out_modrm(s, 0xff, EXT_JMPN_Ev, TCG_REG_EAX); /* jmp *%eax */
> +    tcg_out_modrm(s, OPC_GRP5, EXT5_JMPN_Ev, TCG_REG_EAX); /* jmp *%eax */
>      
>      /* TB epilogue */
>      tb_ret_addr = s->code_ptr;
> -- 
> 1.6.6.1
> 
> 
> 
> 

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
address@hidden                 http://www.aurel32.net



reply via email to

[Prev in Thread] Current Thread [Next in Thread]