[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/15] tcg-i386: Tidy unary arithmetic.
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 10/15] tcg-i386: Tidy unary arithmetic. |
Date: |
Fri, 21 May 2010 08:30:30 -0700 |
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>
---
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 a43dbfb..07da8c7 100644
--- a/tcg/i386/tcg-target.c
+++ b/tcg/i386/tcg-target.c
@@ -190,7 +190,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
@@ -207,9 +211,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)
@@ -1060,7 +1072,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;
@@ -1070,7 +1082,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:
@@ -1079,7 +1091,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:
@@ -1156,13 +1168,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;
@@ -1226,11 +1238,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:
@@ -1398,7 +1410,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.7.0.1
- [Qemu-devel] [PATCH 01/15] tcg-i386: Tidy ext8u and ext16u operations., (continued)
- [Qemu-devel] [PATCH 01/15] tcg-i386: Tidy ext8u and ext16u operations., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 02/15] tcg-i386: Tidy ext8s and ext16s operations., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 04/15] tcg-i386: Tidy non-immediate arithmetic operations., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 06/15] tcg-i386: Tidy push/pop., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 03/15] tcg-i386: Tidy immediate arithmetic operations., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 09/15] tcg-i386: Tidy setcc., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 07/15] tcg-i386: Tidy calls., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 08/15] tcg-i386: Tidy ret., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 05/15] tcg-i386: Tidy movi., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 12/15] tcg-i386: Tidy xchg., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 10/15] tcg-i386: Tidy unary arithmetic.,
Richard Henderson <=
- [Qemu-devel] [PATCH 13/15] tcg-i386: Tidy lea., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 11/15] tcg-i386: Tidy multiply., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 14/15] tcg-i386: Use lea for three-operand add., Richard Henderson, 2010/05/21
- [Qemu-devel] [PATCH 15/15] tcg-i386: Nuke trailing whitespace., Richard Henderson, 2010/05/21
- Re: [Qemu-devel] [PATCH 00/15] tcg-i386 cleanup and improvement, v3, Aurelien Jarno, 2010/05/21