[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/2] Some mmx/sse instructions in 'gen_sse' don't require CRO.TS=
From: |
Wei Li |
Subject: |
[PATCH 2/2] Some mmx/sse instructions in 'gen_sse' don't require CRO.TS=0 |
Date: |
Fri, 25 Mar 2022 22:50:07 +0800 |
Some instructions in 'gen_sse' don't require CRO.TS=0 and the opcode of them are
0F38F[0-F], 0F3AF[0-F].
Signed-off-by: Wei Li <lw945lw945@yahoo.com>
---
target/i386/tcg/translate.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index fe9fcdae96..14cf11771c 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -3139,8 +3139,16 @@ static void gen_sse(CPUX86State *env, DisasContext *s,
int b,
is_xmm = 1;
}
}
+
+ modrm = x86_ldub_code(env, s);
+ reg = ((modrm >> 3) & 7);
+ if (is_xmm) {
+ reg |= REX_R(s);
+ }
+ mod = (modrm >> 6) & 3;
/* simple MMX/SSE operation */
- if (s->flags & HF_TS_MASK) {
+ if ((s->flags & HF_TS_MASK)
+ && (!(modrm & 0xF0))) {
gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
return;
}
@@ -3159,13 +3167,6 @@ static void gen_sse(CPUX86State *env, DisasContext *s,
int b,
if (!is_xmm) {
gen_helper_enter_mmx(cpu_env);
}
-
- modrm = x86_ldub_code(env, s);
- reg = ((modrm >> 3) & 7);
- if (is_xmm) {
- reg |= REX_R(s);
- }
- mod = (modrm >> 6) & 3;
if (sse_fn_epp == SSE_SPECIAL) {
b |= (b1 << 8);
switch(b) {
--
2.30.2