[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 22/22] tcg-i386: Tidy data16 prefixes.
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 22/22] tcg-i386: Tidy data16 prefixes. |
Date: |
Wed, 28 Apr 2010 11:23:19 -0700 |
Include it in the opcode as an extension, as with P_EXT
or the REX bits in the x86-64 port.
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/i386/tcg-target.c | 21 +++++++++++++--------
1 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
index 646a7b6..2f096fa 100644
--- a/tcg/i386/tcg-target.c
+++ b/tcg/i386/tcg-target.c
@@ -161,7 +161,8 @@ static inline int tcg_target_const_match(tcg_target_long
val,
return 0;
}
-#define P_EXT 0x100 /* 0x0f opcode prefix */
+#define P_EXT 0x100 /* 0x0f opcode prefix */
+#define P_DATA16 0x200 /* 0x66 opcode prefix */
#define OPC_ARITH_EvIz (0x81)
#define OPC_ARITH_EvIb (0x83)
@@ -267,8 +268,12 @@ static const uint8_t tcg_cond_to_jcc[10] = {
static inline void tcg_out_opc(TCGContext *s, int opc)
{
- if (opc & P_EXT)
+ if (opc & P_DATA16) {
+ tcg_out8(s, 0x66);
+ }
+ if (opc & P_EXT) {
tcg_out8(s, 0x0f);
+ }
tcg_out8(s, opc);
}
@@ -460,8 +465,8 @@ static inline void tcg_out_bswap32(TCGContext *s, int reg)
static inline void tcg_out_rolw_8(TCGContext *s, int reg)
{
- tcg_out8(s, 0x66);
- tcg_out_shifti(s, SHIFT_ROL, reg, 8);
+ tcg_out_modrm(s, OPC_SHIFT_Ib | P_DATA16, SHIFT_ROL, reg);
+ tcg_out8(s, 8);
}
static inline void tgen_arithi(TCGContext *s, int c, int r0,
@@ -1074,8 +1079,8 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg
*args,
data_reg = r1;
}
/* movw */
- tcg_out8(s, 0x66);
- tcg_out_modrm_offset(s, OPC_MOVL_EvGv, data_reg, r0, GUEST_BASE);
+ tcg_out_modrm_offset(s, OPC_MOVL_EvGv | P_DATA16,
+ data_reg, r0, GUEST_BASE);
break;
case 2:
if (bswap) {
@@ -1180,8 +1185,8 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode
opc,
break;
case INDEX_op_st16_i32:
/* movw */
- tcg_out8(s, 0x66);
- tcg_out_modrm_offset(s, OPC_MOVL_EvGv, args[0], args[1], args[2]);
+ tcg_out_modrm_offset(s, OPC_MOVL_EvGv | P_DATA16,
+ args[0], args[1], args[2]);
break;
case INDEX_op_st_i32:
tcg_out_st(s, TCG_TYPE_I32, args[0], args[1], args[2]);
--
1.6.6.1
- [Qemu-devel] [PATCH 03/22] tcg-i386: Tidy ext8u and ext16u operations., (continued)
- [Qemu-devel] [PATCH 03/22] tcg-i386: Tidy ext8u and ext16u operations., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 12/22] tcg-i386: Tidy movi., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 10/22] tcg-i386: Tidy immediate arithmetic operations., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 07/22] tcg-i386: Tidy move operations., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 01/22] tcg-i386: Allocate call-saved registers first., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 11/22] tcg-i386: Tidy non-immediate arithmetic operations., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 06/22] tcg-i386: Tidy shift operations., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 17/22] tcg-i386: Tidy unary arithmetic., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 20/22] tcg-i386: Tidy lea., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 19/22] tcg-i386: Tidy xchg., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 22/22] tcg-i386: Tidy data16 prefixes.,
Richard Henderson <=
- [Qemu-devel] [PATCH 21/22] tcg-i386: Use lea for three-operand add., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 16/22] tcg-i386: Tidy setcc., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 14/22] tcg-i386: Tidy calls., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 15/22] tcg-i386: Tidy ret., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 18/22] tcg-i386: Tidy multiply., Richard Henderson, 2010/04/28
- [Qemu-devel] [PATCH 05/22] tcg-i386: Tidy bswap operations., Richard Henderson, 2010/04/28