From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835130; cv=none; d=zoho.com; s=zohoarc; b=lyE/h852ZYcrVGro91bF8CA72hN0DBPo4Da525irDWxSGhw+d9J2lqvUTBWYoErIlqvleK9n3d29H5oV7m4qu3XcBzDU7/faRopaiMSrLz0grgZtnWbQQYLy4YJABQRRf5KPHRn2yfxsd8+T7OQe/70R4VRNZdXNeCG487BVi5E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835130; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=XvCHdm9nHE9smMApxfPJipkd9WnhL73swaE5KE6lGAQ=; b=SUjsYS21KfvB973CMOIY66+1j8e8KgDN45YgybpOPS/CHjF9Q9XovAxj1pQzsNe+C5pPlZUW23XK5dr7n1Kd9iyYIZljAB3TRDbphEulEvvImCo6BscgRXUT6dyww6MtXsZ6gWCXfzuAXeP8StW42S9RGbWQnFubmuUADYwzGo8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835130786124.58875996908739; Wed, 14 Aug 2019 19:12:10 -0700 (PDT) Received: from localhost ([::1]:37352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5FC-0007t5-CD for importer@patchew.org; Wed, 14 Aug 2019 22:12:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46601) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DD-0005sD-E7 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DB-0008Cz-Fy for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:09:59 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:35387) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DB-0008CV-AB for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:09:57 -0400 Received: by mail-yw1-xc42.google.com with SMTP id g19so303027ywe.2 for ; Wed, 14 Aug 2019 19:09:57 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.09.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:09:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XvCHdm9nHE9smMApxfPJipkd9WnhL73swaE5KE6lGAQ=; b=TLgCVUOSC4vrCtQw+ftiZMoHZg71cSQ+yLAN8KZY+zv85K/7SENRospUzRxsUAOWss HmMRLXkYHg+suzev1U9j8OtSlA322zZJCy1k4YgI7BXfwzPeiz23VWRY23vyoVLb6HiN HYDqTsP6BflMTd7ij7yETStpXESkH8rfH0j6v4Ck0qXRsvqq1xzhYMnsHd5BOaEUX7ck zQqz0f6gtRb/Mptio/dcBqHgQrqt9/dOdqCjR3TFzBgD2fn3GTl3gCmRtnE8tm2HKk8U SM5/O8KpyLzweyQmBjwHdYkVRKJ2utvy69wk5nLaMjwo0+KnKkuH2JwoKOAuxgkdnIs4 maLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XvCHdm9nHE9smMApxfPJipkd9WnhL73swaE5KE6lGAQ=; b=DX0POWUto3/nParv4sZ1izFZpLUJEtaqLenosPQkv13XakeGMb8So3NVXXuu3CG1uQ 8uc5axEf3vbspGjt2s6CXgVW+B09UKTPHnVCUdmA2MLRHdfpkSFJ7onJGU5Z3pokcSVd 6AUaZ58gtaE/t8Ze/WzItY8jkUgNmr/3wz+42OanpDPiEP1VUcfejMLHvSF9yOH0y7wd RcQNYdfdkcswH6FxQntze294nu833AUlEkwh2XSEVAvdhlIlFR2XYwIIzbTclVWa1bcu vTDtU0w3n4PUvCm1HV6P/l8k/NUJTkep3v2C7/qkeW2i0IusA4NhkFCctVg28uw4wRaq eHQA== X-Gm-Message-State: APjAAAX2+gNAnktjdBAqQYQCDl4a7FWD2cNuXXIHnfyjQIyjdcWQSCfU WUYA1o52/xK6VkaSBCdWyA+Ew4J8 X-Google-Smtp-Source: APXvYqxabc/ZNsI/laMdCP4x82EQazrSIrFdX11fnqCorXBdD8EcZVmqcPdK9bYXm0u2+/Hwf78Ivw== X-Received: by 2002:a0d:c841:: with SMTP id k62mr1512887ywd.95.1565834996232; Wed, 14 Aug 2019 19:09:56 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:43 -0400 Message-Id: <20190815020928.9679-2-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 01/46] target/i386: Push rex_r into DisasContext X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Richard Henderson Treat this value the same as we do for rex_b and rex_x. Signed-off-by: Richard Henderson --- target/i386/translate.c | 85 +++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index 03150a86e2..d74dbfd585 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -43,10 +43,12 @@ #define CODE64(s) ((s)->code64) #define REX_X(s) ((s)->rex_x) #define REX_B(s) ((s)->rex_b) +#define REX_R(s) ((s)->rex_r) #else #define CODE64(s) 0 #define REX_X(s) 0 #define REX_B(s) 0 +#define REX_R(s) 0 #endif =20 #ifdef TARGET_X86_64 @@ -98,7 +100,7 @@ typedef struct DisasContext { #ifdef TARGET_X86_64 int lma; /* long mode active */ int code64; /* 64 bit code segment */ - int rex_x, rex_b; + int rex_x, rex_b, rex_r; #endif int vex_l; /* vex vector length */ int vex_v; /* vex vvvv register, without 1's complement. */ @@ -3037,7 +3039,7 @@ static const struct SSEOpHelper_eppi sse_op_table7[25= 6] =3D { }; =20 static void gen_sse(CPUX86State *env, DisasContext *s, int b, - target_ulong pc_start, int rex_r) + target_ulong pc_start) { int b1, op1_offset, op2_offset, is_xmm, val; int modrm, mod, rm, reg; @@ -3107,8 +3109,9 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, =20 modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7); - if (is_xmm) - reg |=3D rex_r; + if (is_xmm) { + reg |=3D REX_R(s); + } mod =3D (modrm >> 6) & 3; if (sse_fn_epp =3D=3D SSE_SPECIAL) { b |=3D (b1 << 8); @@ -3642,7 +3645,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, tcg_gen_ld16u_tl(s->T0, cpu_env, offsetof(CPUX86State,fpregs[rm].mmx.MMX_W(= val))); } - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_op_mov_reg_v(s, ot, reg, s->T0); break; case 0x1d6: /* movq ea, xmm */ @@ -3686,7 +3689,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, offsetof(CPUX86State, fpregs[rm].mmx)); gen_helper_pmovmskb_mmx(s->tmp2_i32, cpu_env, s->ptr0); } - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); tcg_gen_extu_i32_tl(cpu_regs[reg], s->tmp2_i32); break; =20 @@ -3698,7 +3701,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, } modrm =3D x86_ldub_code(env, s); rm =3D modrm & 7; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; if (b1 >=3D 2) { goto unknown_op; @@ -3774,7 +3777,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, /* Various integer extensions at 0f 38 f[0-f]. */ b =3D modrm | (b1 << 8); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 switch (b) { case 0x3f0: /* crc32 Gd,Eb */ @@ -4128,7 +4131,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, b =3D modrm; modrm =3D x86_ldub_code(env, s); rm =3D modrm & 7; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; if (b1 >=3D 2) { goto unknown_op; @@ -4148,7 +4151,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, rm =3D (modrm & 7) | REX_B(s); if (mod !=3D 3) gen_lea_modrm(env, s, modrm); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); val =3D x86_ldub_code(env, s); switch (b) { case 0x14: /* pextrb */ @@ -4317,7 +4320,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, /* Various integer extensions at 0f 3a f[0-f]. */ b =3D modrm | (b1 << 8); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 switch (b) { case 0x3f0: /* rorx Gy,Ey, Ib */ @@ -4491,14 +4494,15 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) TCGMemOp ot, aflag, dflag; int modrm, reg, rm, mod, op, opreg, val; target_ulong next_eip, tval; - int rex_w, rex_r; target_ulong pc_start =3D s->base.pc_next; + int rex_w; =20 s->pc_start =3D s->pc =3D pc_start; s->override =3D -1; #ifdef TARGET_X86_64 s->rex_x =3D 0; s->rex_b =3D 0; + s->rex_r =3D 0; s->x86_64_hregs =3D false; #endif s->rip_offset =3D 0; /* for relative ip address */ @@ -4511,7 +4515,6 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 prefixes =3D 0; rex_w =3D -1; - rex_r =3D 0; =20 next_byte: b =3D x86_ldub_code(env, s); @@ -4555,9 +4558,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (CODE64(s)) { /* REX prefix */ rex_w =3D (b >> 3) & 1; - rex_r =3D (b & 0x4) << 1; + s->rex_r =3D (b & 0x4) << 1; s->rex_x =3D (b & 0x2) << 2; - REX_B(s) =3D (b & 0x1) << 3; + s->rex_b =3D (b & 0x1) << 3; /* select uniform byte register addressing */ s->x86_64_hregs =3D true; goto next_byte; @@ -4590,8 +4593,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->x86_64_hregs) { goto illegal_op; } + s->rex_r =3D (~vex2 >> 4) & 8; #endif - rex_r =3D (~vex2 >> 4) & 8; if (b =3D=3D 0xc5) { /* 2-byte VEX prefix: RVVVVlpp, implied 0f leading opcode = byte */ vex3 =3D vex2; @@ -4681,7 +4684,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) switch(f) { case 0: /* OP Ev, Gv */ modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; rm =3D (modrm & 7) | REX_B(s); if (mod !=3D 3) { @@ -4703,7 +4706,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 1: /* OP Gv, Ev */ modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); rm =3D (modrm & 7) | REX_B(s); if (mod !=3D 3) { gen_lea_modrm(env, s, modrm); @@ -5123,7 +5126,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d(b, dflag); =20 modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 0); gen_op_mov_v_reg(s, ot, s->T1, reg); @@ -5195,7 +5198,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x6b: ot =3D dflag; modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); if (b =3D=3D 0x69) s->rip_offset =3D insn_const_size(ot); else if (b =3D=3D 0x6b) @@ -5247,7 +5250,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1c1: /* xadd Ev, Gv */ ot =3D mo_b_d(b, dflag); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; gen_op_mov_v_reg(s, ot, s->T0, reg); if (mod =3D=3D 3) { @@ -5279,7 +5282,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 ot =3D mo_b_d(b, dflag); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; oldv =3D tcg_temp_new(); newv =3D tcg_temp_new(); @@ -5502,7 +5505,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x89: /* mov Gv, Ev */ ot =3D mo_b_d(b, dflag); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 /* generate a generic store */ gen_ldst_modrm(env, s, modrm, ot, reg, 1); @@ -5528,7 +5531,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x8b: /* mov Ev, Gv */ ot =3D mo_b_d(b, dflag); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 0); gen_op_mov_reg_v(s, ot, reg, s->T0); @@ -5578,7 +5581,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) s_ot =3D b & 8 ? MO_SIGN | ot : ot; =20 modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; rm =3D (modrm & 7) | REX_B(s); =20 @@ -5617,7 +5620,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) mod =3D (modrm >> 6) & 3; if (mod =3D=3D 3) goto illegal_op; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); { AddressParts a =3D gen_lea_modrm_0(env, s, modrm); TCGv ea =3D gen_lea_modrm_1(s, a); @@ -5699,7 +5702,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x87: /* xchg Ev, Gv */ ot =3D mo_b_d(b, dflag); modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; if (mod =3D=3D 3) { rm =3D (modrm & 7) | REX_B(s); @@ -5736,7 +5739,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) do_lxx: ot =3D dflag !=3D MO_16 ? MO_32 : MO_16; modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; if (mod =3D=3D 3) goto illegal_op; @@ -5819,7 +5822,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; rm =3D (modrm & 7) | REX_B(s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); if (mod !=3D 3) { gen_lea_modrm(env, s, modrm); opreg =3D OR_TMP0; @@ -6674,7 +6677,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } ot =3D dflag; modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_cmovcc1(env, s, ot, b, modrm, reg); break; =20 @@ -6824,7 +6827,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) do_btx: ot =3D dflag; modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; rm =3D (modrm & 7) | REX_B(s); gen_op_mov_v_reg(s, MO_32, s->T1, reg); @@ -6929,7 +6932,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1bd: /* bsr / lzcnt */ ot =3D dflag; modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 0); gen_extu(ot, s->T0); =20 @@ -7693,7 +7696,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) d_ot =3D dflag; =20 modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; rm =3D (modrm & 7) | REX_B(s); =20 @@ -7767,7 +7770,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; ot =3D dflag !=3D MO_16 ? MO_32 : MO_16; modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); t0 =3D tcg_temp_local_new(); gen_update_cc_op(s); @@ -7808,7 +7811,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) modrm =3D x86_ldub_code(env, s); if (s->flags & HF_MPX_EN_MASK) { mod =3D (modrm >> 6) & 3; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); if (prefixes & PREFIX_REPZ) { /* bndcl */ if (reg >=3D 4 @@ -7898,7 +7901,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) modrm =3D x86_ldub_code(env, s); if (s->flags & HF_MPX_EN_MASK) { mod =3D (modrm >> 6) & 3; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); if (mod !=3D 3 && (prefixes & PREFIX_REPZ)) { /* bndmk */ if (reg >=3D 4 @@ -8012,7 +8015,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) * are assumed to be 1's, regardless of actual values. */ rm =3D (modrm & 7) | REX_B(s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); if (CODE64(s)) ot =3D MO_64; else @@ -8069,7 +8072,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) * are assumed to be 1's, regardless of actual values. */ rm =3D (modrm & 7) | REX_B(s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); if (CODE64(s)) ot =3D MO_64; else @@ -8112,7 +8115,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) mod =3D (modrm >> 6) & 3; if (mod =3D=3D 3) goto illegal_op; - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); /* generate a generic store */ gen_ldst_modrm(env, s, modrm, ot, reg, 1); break; @@ -8338,7 +8341,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; =20 modrm =3D x86_ldub_code(env, s); - reg =3D ((modrm >> 3) & 7) | rex_r; + reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 if (s->prefix & PREFIX_DATA) { ot =3D MO_16; @@ -8366,7 +8369,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1c2: case 0x1c4 ... 0x1c6: case 0x1d0 ... 0x1fe: - gen_sse(env, s, b, pc_start, rex_r); + gen_sse(env, s, b, pc_start); break; default: goto unknown_op; --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835258; cv=none; d=zoho.com; s=zohoarc; b=Gcew448dJrnlEiF84Fj/SPIcq10VqXIcF07vVq0Yw95PIKtaFY/Y1gicH94dZUcpjiqnp3pXMcs8gw2jRhUkkFgSeLcvDqeR5XyhzlE/2/JBGazn48FWWDiG8QwgQmOay9nTFbbe+7Sibmeb14BwJgMyb9KHS+BOc3nwF3YKIyE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835258; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=6nDSi2OJfOTaQ/1QMGaIy9TKp9JFtHSdU8wWAA7Z90w=; b=EfPg+ZZsl2+Iy/HZRn/xNR2idRi+Om1IY3YE++Xf8GvVtr78ApWZqO6CyITtkhYgeZ9jAWDOkdTcNa4cvZUU1sJNWtAbfBnTIlZRVFLrWKkbi3GWRh7Vmtc3c1wlBOUfBHsZZ/UtKS803y6ABpQBwo1NyPe635UZdkdvvr801r4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835258590754.3083829780226; Wed, 14 Aug 2019 19:14:18 -0700 (PDT) Received: from localhost ([::1]:37374 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5HM-0002lr-G0 for importer@patchew.org; Wed, 14 Aug 2019 22:14:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46592) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DC-0005sC-Tz for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DB-0008DD-Me for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:09:58 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:36576) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DB-0008Cr-Ik for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:09:57 -0400 Received: by mail-yw1-xc44.google.com with SMTP id m11so301561ywh.3 for ; Wed, 14 Aug 2019 19:09:57 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.09.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:09:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6nDSi2OJfOTaQ/1QMGaIy9TKp9JFtHSdU8wWAA7Z90w=; b=JZyMRb8ubWY5Io5D8r2aAx3gQm75jsZyR+PaLLSMl34/mvkgjiUeTowT4FKcN0qZZl WgrAjZIlAIrSKYHVS+kHTIoLPa8KbVRMRviNNvxHDod0MnsYnu8VEKYbs0/V+biRU1cv SlD+0dYein6ImFVoIlaW7i3ADrTu1NpfcsellPCoar5WSOdCFh9Pw9vrv+VmrJlx+6/T z7SEWwdXc2TomoLgEQQI4wDH+aAaeKzBvCV6LACG5vXkYSXWhSlZU/O4Z9ZylL8k9aJK Vl/t+BlNJ7W41LVjahp6UwdCsaX0QGYIwyASB9RYcjIq5yu/unoF95t817sq54kQ10jW Pu0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6nDSi2OJfOTaQ/1QMGaIy9TKp9JFtHSdU8wWAA7Z90w=; b=IHhd0gg56fYMTu/HeFd+OWC3EvqAQGB4zh8YJBfw9dYsMGofAc1Z2DtclrKJ7sYqHw XeNwbZZFDeCZj8LfqYkngDLkvlfgu5hsMeDSA+ytU7mFrr2anAyet2d+VaEI4xfXu89d 2zGNZbENf3FNe+7Afg8Eyuh4aql/s1QvEdbg7RkEHo4+iaCzpjnDrPK5v3Hv0Tr0qOtK xQVFxcoB1QlQusD+r/jAbOqCBHoo79tp+/2QPOLW32FQoj902TFuMm17l79uyAqrTo3r fqck8RgZG4cjvm0mdPUNUSEawgXFSdtbxudyzjvFfXM3qqC0TX4fWiA855rvB+YLHyHq 2O2g== X-Gm-Message-State: APjAAAXNkwbH7cO5OM2ajIZV7j1bM71VCUFIVLnJ3zqaT35ZobSiuH3t zff/bYrfw6G5axa0UKj1gpv1/bd8 X-Google-Smtp-Source: APXvYqxdnL20Ec1JVUtcO+jaxNLtfCfJm1mREc6N6/dVT5puWNru5qk1wKKwIQEBg2SEo6hky+FPLQ== X-Received: by 2002:a0d:ddcb:: with SMTP id g194mr1576499ywe.110.1565834996908; Wed, 14 Aug 2019 19:09:56 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:44 -0400 Message-Id: <20190815020928.9679-3-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c44 Subject: [Qemu-devel] [RFC PATCH v3 02/46] target/i386: Push rex_w into DisasContext X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Richard Henderson Treat this the same as we already do for other rex bits. Signed-off-by: Richard Henderson --- target/i386/translate.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index d74dbfd585..c0866c2797 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -44,11 +44,13 @@ #define REX_X(s) ((s)->rex_x) #define REX_B(s) ((s)->rex_b) #define REX_R(s) ((s)->rex_r) +#define REX_W(s) ((s)->rex_w) #else #define CODE64(s) 0 #define REX_X(s) 0 #define REX_B(s) 0 #define REX_R(s) 0 +#define REX_W(s) -1 #endif =20 #ifdef TARGET_X86_64 @@ -100,7 +102,7 @@ typedef struct DisasContext { #ifdef TARGET_X86_64 int lma; /* long mode active */ int code64; /* 64 bit code segment */ - int rex_x, rex_b, rex_r; + int rex_x, rex_b, rex_r, rex_w; #endif int vex_l; /* vex vector length */ int vex_v; /* vex vvvv register, without 1's complement. */ @@ -4495,7 +4497,6 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) int modrm, reg, rm, mod, op, opreg, val; target_ulong next_eip, tval; target_ulong pc_start =3D s->base.pc_next; - int rex_w; =20 s->pc_start =3D s->pc =3D pc_start; s->override =3D -1; @@ -4503,6 +4504,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) s->rex_x =3D 0; s->rex_b =3D 0; s->rex_r =3D 0; + s->rex_w =3D -1; s->x86_64_hregs =3D false; #endif s->rip_offset =3D 0; /* for relative ip address */ @@ -4514,7 +4516,6 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } =20 prefixes =3D 0; - rex_w =3D -1; =20 next_byte: b =3D x86_ldub_code(env, s); @@ -4557,7 +4558,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x40 ... 0x4f: if (CODE64(s)) { /* REX prefix */ - rex_w =3D (b >> 3) & 1; + s->rex_w =3D (b >> 3) & 1; s->rex_r =3D (b & 0x4) << 1; s->rex_x =3D (b & 0x2) << 2; s->rex_b =3D (b & 0x1) << 3; @@ -4606,7 +4607,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) s->rex_b =3D (~vex2 >> 2) & 8; #endif vex3 =3D x86_ldub_code(env, s); - rex_w =3D (vex3 >> 7) & 1; +#ifdef TARGET_X86_64 + s->rex_w =3D (vex3 >> 7) & 1; +#endif switch (vex2 & 0x1f) { case 0x01: /* Implied 0f leading opcode bytes. */ b =3D x86_ldub_code(env, s) | 0x100; @@ -4631,9 +4634,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /* Post-process prefixes. */ if (CODE64(s)) { /* In 64-bit mode, the default data size is 32-bit. Select 64-bit - data with rex_w, and 16-bit data with 0x66; rex_w takes precede= nce + data with REX_W, and 16-bit data with 0x66; REX_W takes precede= nce over 0x66 if both are present. */ - dflag =3D (rex_w > 0 ? MO_64 : prefixes & PREFIX_DATA ? MO_16 : MO= _32); + dflag =3D (REX_W(s) > 0 ? MO_64 : prefixes & PREFIX_DATA ? MO_16 := MO_32); /* In 64-bit mode, 0x67 selects 32-bit addressing. */ aflag =3D (prefixes & PREFIX_ADR ? MO_32 : MO_64); } else { @@ -5029,7 +5032,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /* operand size for jumps is 64 bit */ ot =3D MO_64; } else if (op =3D=3D 3 || op =3D=3D 5) { - ot =3D dflag !=3D MO_16 ? MO_32 + (rex_w =3D=3D 1) : MO_16; + ot =3D dflag !=3D MO_16 ? MO_32 + (REX_W(s) =3D=3D 1) : MO= _16; } else if (op =3D=3D 6) { /* default push size is 64 bit */ ot =3D mo_pushpop(s, dflag); --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835118; cv=none; d=zoho.com; s=zohoarc; b=a0wapNvS/iAGSUN2YgWsQ70qCd/lHtqs5sVmkW5X5rpEm3/pmZuLLJmWShtMe6J7TNCpK4tikxNI6PmYhGwq6V1u0U4GoSQBRWTn+IxX1/hcUKtqHf2lZLWFyUtUCocs4axtgZ4YqFvEGL9cHtPGnm4/M9bQ2lK4P3++LGyKDtM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835118; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=ouwU3mH0heGGYj5tVAnCDMGwPLkEloG4KITrIoN6Jz0=; b=EwpNHTk9vqQcwfsAJ8HEfLpJv7QzpmoGMVtV9dESjfv3ge4pIQ8TkcIAbfFW82YCNMcdfwufFg/ddIfN7YDgaU+2jeJr883gdq4ivLFcHq+3qZjmDUzl27WVveE9LrjWS/MFIHh4PYfEAHYRyYmqzbz1PCt5kieohz0fjxVQ7Ok= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835118410902.7644692938954; Wed, 14 Aug 2019 19:11:58 -0700 (PDT) Received: from localhost ([::1]:37350 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5F5-0007oW-T2 for importer@patchew.org; Wed, 14 Aug 2019 22:11:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46608) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DD-0005sJ-TM for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DC-0008Dz-Qh for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:09:59 -0400 Received: from mail-yb1-xb43.google.com ([2607:f8b0:4864:20::b43]:39541) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DC-0008Dk-Mg for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:09:58 -0400 Received: by mail-yb1-xb43.google.com with SMTP id s142so402732ybc.6 for ; Wed, 14 Aug 2019 19:09:58 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:09:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ouwU3mH0heGGYj5tVAnCDMGwPLkEloG4KITrIoN6Jz0=; b=Z1tLin0u8OQBU3jYRNi6no+IMJ7+piZGf1bc2DejWtEsqFTd9AvufUdiTNyUBZN/bE ql2NXcznET8QRALiBBCekue0noz/0RbLofkHdDA0LhjHhPiBJx3koPHs0Ww/E/0bReMz PykHOD96qRauom7zIx/UfoGgX1BtT8Z41DOUwVoAy+dPaPYpaXePAb7W5038XGjZciih RCw8WoVD+loKTspvQlnpUoo/94ZDxAWYyiId1DJ/i9xRH8nH/KVPDV0RObOxhrxs5MJm ZZqDx4O5tgkyYegzcVdrVDn11NYjJPwSpQOIjQOJNHf0MyO02qZczS2ab3G/aSb+kytH rRkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ouwU3mH0heGGYj5tVAnCDMGwPLkEloG4KITrIoN6Jz0=; b=UZEQ4sF5AaKg9Ppqkzvmo8wzO2Bo3dhK2Qn7SQDkOEea5zKACMo7KatSthv75hO1PY UgZeiy5v5iPxik4ebOUHVh7kMVK4qFzQeSZnHF+CHeJeUEFuoepETt3AmHmBojFOGjOu 0CP8hnBBZUPIZKw+9eZngB8BKLQmUKXpN4pLcQUSYRiwcwfzLk89czQOAgfgjgwpfRQq Pn6n+0gHoSuKHV9fdHJElGKPsyG/SVRJ3B1KyYalFXTxV/Zs5rBVXbGOoL7v6Jfcsggf WEHFtAqII25XmKX3MdAG/1cpVx9052Jyq708MvhYsb2GCqwGWLy0XesCnj/Nw/DTKTYf PZyQ== X-Gm-Message-State: APjAAAUZtwBxkGJC0w7gIsHoRZO2rZC0Id3l2GRrvqQyO11kQyT4htha 1IYT5qLcG2iyzANjIp/iSeNup7HH X-Google-Smtp-Source: APXvYqxf1uIqEp03Hi01UodPJ2NYneHd2JcmOp+E2X09CSUc7c4K1SweVP8n37U7PQny092oO7w+VA== X-Received: by 2002:a25:d7d0:: with SMTP id o199mr1960407ybg.162.1565834997967; Wed, 14 Aug 2019 19:09:57 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:45 -0400 Message-Id: <20190815020928.9679-4-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b43 Subject: [Qemu-devel] [RFC PATCH v3 03/46] target/i386: reduce scope of variable aflag X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The variable aflag is not used in most of disas_insn; make this clear by explicitly reducing its scope to the block where it is used. Suggested-by: Richard Henderson Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index c0866c2797..bda96277e4 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4493,11 +4493,14 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) CPUX86State *env =3D cpu->env_ptr; int b, prefixes; int shift; - TCGMemOp ot, aflag, dflag; + TCGMemOp ot, dflag; int modrm, reg, rm, mod, op, opreg, val; target_ulong next_eip, tval; target_ulong pc_start =3D s->base.pc_next; =20 + { + TCGMemOp aflag; + s->pc_start =3D s->pc =3D pc_start; s->override =3D -1; #ifdef TARGET_X86_64 @@ -4657,6 +4660,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) s->prefix =3D prefixes; s->aflag =3D aflag; s->dflag =3D dflag; + } =20 /* now check op code */ reswitch: --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835280; cv=none; d=zoho.com; s=zohoarc; b=WqgXwHwrJOb5vF4yPmbLVqHBWTivpdjw/aT0od6cjKd+NowwKSWpiOBtLdPI3nLmT9coH1L62C6KDklsElTjFfOZJdlqbfUiE64neKuCO4jPTpZ+RejgZmfJOjnuFMwfSzC7Z60NzF5oHGk606P9Cs57WPeHCj24IDt1kDpIhkE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835280; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=h0ZVdm/leUiJWx2djHy67HwW08F/u6D3t5Lw8XDcdP4=; b=iF008/YnPRG3ewh1hXpD4FSDPgWSGBwMALjYviRZfsyA2MAKlVfEjRyjFAx5/HwCOCUjiGiV6TumHZIEfEJnSTpSEceDku/08GGknApmCc7KTphauSQeTq1/WxhLkLCtqShHSNxOTta4u0DPgusFKtfEr2zUBF/SNC+D6tEKXws= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835280120907.1669076915412; Wed, 14 Aug 2019 19:14:40 -0700 (PDT) Received: from localhost ([::1]:37382 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Hi-0003Fj-7r for importer@patchew.org; Wed, 14 Aug 2019 22:14:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46643) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DH-0005wp-Hq for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DE-0008FQ-Cj for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:03 -0400 Received: from mail-yw1-xc41.google.com ([2607:f8b0:4864:20::c41]:43831) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DE-0008F7-6f for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:00 -0400 Received: by mail-yw1-xc41.google.com with SMTP id n205so286743ywb.10 for ; Wed, 14 Aug 2019 19:10:00 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.09.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=h0ZVdm/leUiJWx2djHy67HwW08F/u6D3t5Lw8XDcdP4=; b=UVOm7lLXbTC9b942cSJnW6560WQABl1TrMeZeYRMOvwVi8yMTKTRTxREhBtxlo73qH BDP/bgwCkGd6Ej419mdkFXx9S/+BuAOhhSmJeE1h2ffdUazNQa6Em3TaoxezAiTfD9ga CcY4BfuAkRLEl0YXHwU3GdNb+6Ug1GKwvH4IAfaX+G0aP93FctUkIt+BpM+jbnQ7afIc IL/T/L9cGVdiz2gUxkNr/U/mXoymSEZm5IhNxgDRIeZKR15t6ViBYmdGJWlfILO+Y0LV bx6HpS6EgBizd38pupQDiV8Zbkdyo6BGcbEEX4N0RDNv0YfhQwSYCb0WQSn892GThX0t CsUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=h0ZVdm/leUiJWx2djHy67HwW08F/u6D3t5Lw8XDcdP4=; b=XctwWRaB5ubUE1+RE2JTKiinvk+zE41iAbTsmdBk2Y5OqgGQxSdhR0aPzPWxGQGRXL qnlVRgID2nNTHIvnzRkYNzNcAIcZwBrR7Mtcz1ZEjupJieKSIvKKPtx7r7hm1psRIymC igc7997rcfICCy0F73Y8dxDs4+3Q/AB7qKyUbyIbmh+I9WsB9Gn7vb08/rjBLJeiBCng XRvYmkBZ8G2SE8pv54IeMKZMlwmrD9KzevoIn0pabWvnflWxhv3anLr5tWLMio0t6RF5 jmzt4LHKPqiIZ19K2SbW3q8wQ6Ne3q5O+DdTlecNtxvOQmf1RwOqQEnAtVOQVfaLyZBj zoTg== X-Gm-Message-State: APjAAAVo5ZcsvzkwWVGwE5ptbSuUHV821uqAo2f1ppdczh312hcdocpl euu24yAFFdlOhO+s2973gAbiHqb0 X-Google-Smtp-Source: APXvYqxODqmMzHlX58KTbPLW0oW5eqpdXzLPWCdYWpXKVduFh/I7rl2mjY/bLB14J0Rbkpl6EUrZBg== X-Received: by 2002:a81:8706:: with SMTP id x6mr1589667ywf.512.1565834998952; Wed, 14 Aug 2019 19:09:58 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:46 -0400 Message-Id: <20190815020928.9679-5-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c41 Subject: [Qemu-devel] [RFC PATCH v3 04/46] target/i386: use dflag from DisasContext X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" There already is a variable dflag in DisasContext, so reduce the scope of the local variable dflag to enforce use of the one in DisasContext. Suggested-by: Richard Henderson Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 184 ++++++++++++++++++++-------------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index bda96277e4..bb13877df7 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4493,13 +4493,13 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) CPUX86State *env =3D cpu->env_ptr; int b, prefixes; int shift; - TCGMemOp ot, dflag; + TCGMemOp ot; int modrm, reg, rm, mod, op, opreg, val; target_ulong next_eip, tval; target_ulong pc_start =3D s->base.pc_next; =20 { - TCGMemOp aflag; + TCGMemOp aflag, dflag; =20 s->pc_start =3D s->pc =3D pc_start; s->override =3D -1; @@ -4686,7 +4686,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) op =3D (b >> 3) & 7; f =3D (b >> 1) & 3; =20 - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); =20 switch(f) { case 0: /* OP Ev, Gv */ @@ -4744,7 +4744,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) { int val; =20 - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); =20 modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; @@ -4781,16 +4781,16 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) /**************************/ /* inc, dec, and other misc arith */ case 0x40 ... 0x47: /* inc Gv */ - ot =3D dflag; + ot =3D s->dflag; gen_inc(s, ot, OR_EAX + (b & 7), 1); break; case 0x48 ... 0x4f: /* dec Gv */ - ot =3D dflag; + ot =3D s->dflag; gen_inc(s, ot, OR_EAX + (b & 7), -1); break; case 0xf6: /* GRP3 */ case 0xf7: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); =20 modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; @@ -5022,7 +5022,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0xfe: /* GRP4 */ case 0xff: /* GRP5 */ - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); =20 modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; @@ -5036,10 +5036,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) /* operand size for jumps is 64 bit */ ot =3D MO_64; } else if (op =3D=3D 3 || op =3D=3D 5) { - ot =3D dflag !=3D MO_16 ? MO_32 + (REX_W(s) =3D=3D 1) : MO= _16; + ot =3D s->dflag !=3D MO_16 ? MO_32 + (REX_W(s) =3D=3D 1) := MO_16; } else if (op =3D=3D 6) { /* default push size is 64 bit */ - ot =3D mo_pushpop(s, dflag); + ot =3D mo_pushpop(s, s->dflag); } } if (mod !=3D 3) { @@ -5067,7 +5067,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 2: /* call Ev */ /* XXX: optimize if memory (no 'and' is necessary) */ - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tcg_gen_ext16u_tl(s->T0, s->T0); } next_eip =3D s->pc - s->cs_base; @@ -5085,19 +5085,19 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) if (s->pe && !s->vm86) { tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); gen_helper_lcall_protected(cpu_env, s->tmp2_i32, s->T1, - tcg_const_i32(dflag - 1), + tcg_const_i32(s->dflag - 1), tcg_const_tl(s->pc - s->cs_base= )); } else { tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); gen_helper_lcall_real(cpu_env, s->tmp2_i32, s->T1, - tcg_const_i32(dflag - 1), + tcg_const_i32(s->dflag - 1), tcg_const_i32(s->pc - s->cs_base)); } tcg_gen_ld_tl(s->tmp4, cpu_env, offsetof(CPUX86State, eip)); gen_jr(s, s->tmp4); break; case 4: /* jmp Ev */ - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tcg_gen_ext16u_tl(s->T0, s->T0); } gen_op_jmp_v(s->T0); @@ -5130,7 +5130,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0x84: /* test Ev, Gv */ case 0x85: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); =20 modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); @@ -5143,7 +5143,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0xa8: /* test eAX, Iv */ case 0xa9: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); val =3D insn_get(env, s, ot); =20 gen_op_mov_v_reg(s, ot, s->T0, OR_EAX); @@ -5153,7 +5153,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; =20 case 0x98: /* CWDE/CBW */ - switch (dflag) { + switch (s->dflag) { #ifdef TARGET_X86_64 case MO_64: gen_op_mov_v_reg(s, MO_32, s->T0, R_EAX); @@ -5176,7 +5176,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } break; case 0x99: /* CDQ/CWD */ - switch (dflag) { + switch (s->dflag) { #ifdef TARGET_X86_64 case MO_64: gen_op_mov_v_reg(s, MO_64, s->T0, R_EAX); @@ -5203,7 +5203,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1af: /* imul Gv, Ev */ case 0x69: /* imul Gv, Ev, I */ case 0x6b: - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); if (b =3D=3D 0x69) @@ -5255,7 +5255,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x1c0: case 0x1c1: /* xadd Ev, Gv */ - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; @@ -5287,7 +5287,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) { TCGv oldv, newv, cmpv; =20 - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; @@ -5348,7 +5348,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } #ifdef TARGET_X86_64 - if (dflag =3D=3D MO_64) { + if (s->dflag =3D=3D MO_64) { if (!(s->cpuid_ext_features & CPUID_EXT_CX16)) { goto illegal_op; } @@ -5388,7 +5388,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } gen_helper_rdrand(s->T0, cpu_env); rm =3D (modrm & 7) | REX_B(s); - gen_op_mov_reg_v(s, dflag, rm, s->T0); + gen_op_mov_reg_v(s, s->dflag, rm, s->T0); set_cc_op(s, CC_OP_EFLAGS); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_end(); @@ -5425,7 +5425,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x68: /* push Iv */ case 0x6a: - ot =3D mo_pushpop(s, dflag); + ot =3D mo_pushpop(s, s->dflag); if (b =3D=3D 0x68) val =3D insn_get(env, s, ot); else @@ -5510,7 +5510,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /* mov */ case 0x88: case 0x89: /* mov Gv, Ev */ - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 @@ -5519,7 +5519,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xc6: case 0xc7: /* mov Ev, Iv */ - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; if (mod !=3D 3) { @@ -5536,7 +5536,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x8a: case 0x8b: /* mov Ev, Gv */ - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); =20 @@ -5568,7 +5568,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (reg >=3D 6) goto illegal_op; gen_op_movl_T0_seg(s, reg); - ot =3D mod =3D=3D 3 ? dflag : MO_16; + ot =3D mod =3D=3D 3 ? s->dflag : MO_16; gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 1); break; =20 @@ -5581,7 +5581,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) TCGMemOp s_ot; =20 /* d_ot is the size of destination */ - d_ot =3D dflag; + d_ot =3D s->dflag; /* ot is the size of source */ ot =3D (b & 1) + MO_8; /* s_ot is the sign+size of source */ @@ -5632,7 +5632,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) AddressParts a =3D gen_lea_modrm_0(env, s, modrm); TCGv ea =3D gen_lea_modrm_1(s, a); gen_lea_v_seg(s, s->aflag, ea, -1, -1); - gen_op_mov_reg_v(s, dflag, reg, s->A0); + gen_op_mov_reg_v(s, s->dflag, reg, s->A0); } break; =20 @@ -5643,7 +5643,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) { target_ulong offset_addr; =20 - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); switch (s->aflag) { #ifdef TARGET_X86_64 case MO_64: @@ -5681,7 +5681,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xb8 ... 0xbf: /* mov R, Iv */ #ifdef TARGET_X86_64 - if (dflag =3D=3D MO_64) { + if (s->dflag =3D=3D MO_64) { uint64_t tmp; /* 64 bit case */ tmp =3D x86_ldq_code(env, s); @@ -5691,7 +5691,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } else #endif { - ot =3D dflag; + ot =3D s->dflag; val =3D insn_get(env, s, ot); reg =3D (b & 7) | REX_B(s); tcg_gen_movi_tl(s->T0, val); @@ -5701,13 +5701,13 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) =20 case 0x91 ... 0x97: /* xchg R, EAX */ do_xchg_reg_eax: - ot =3D dflag; + ot =3D s->dflag; reg =3D (b & 7) | REX_B(s); rm =3D R_EAX; goto do_xchg_reg; case 0x86: case 0x87: /* xchg Ev, Gv */ - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; @@ -5744,7 +5744,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1b5: /* lgs Gv */ op =3D R_GS; do_lxx: - ot =3D dflag !=3D MO_16 ? MO_32 : MO_16; + ot =3D s->dflag !=3D MO_16 ? MO_32 : MO_16; modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; @@ -5772,7 +5772,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) shift =3D 2; grp2: { - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; op =3D (modrm >> 3) & 7; @@ -5825,7 +5825,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) op =3D 1; shift =3D 0; do_shiftd: - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; rm =3D (modrm & 7) | REX_B(s); @@ -5987,7 +5987,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } break; case 0x0c: /* fldenv mem */ - gen_helper_fldenv(cpu_env, s->A0, tcg_const_i32(dflag - 1)= ); + gen_helper_fldenv(cpu_env, s->A0, tcg_const_i32(s->dflag -= 1)); break; case 0x0d: /* fldcw mem */ tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, @@ -5995,7 +5995,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_helper_fldcw(cpu_env, s->tmp2_i32); break; case 0x0e: /* fnstenv mem */ - gen_helper_fstenv(cpu_env, s->A0, tcg_const_i32(dflag - 1)= ); + gen_helper_fstenv(cpu_env, s->A0, tcg_const_i32(s->dflag -= 1)); break; case 0x0f: /* fnstcw mem */ gen_helper_fnstcw(s->tmp2_i32, cpu_env); @@ -6010,10 +6010,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) gen_helper_fpop(cpu_env); break; case 0x2c: /* frstor mem */ - gen_helper_frstor(cpu_env, s->A0, tcg_const_i32(dflag - 1)= ); + gen_helper_frstor(cpu_env, s->A0, tcg_const_i32(s->dflag -= 1)); break; case 0x2e: /* fnsave mem */ - gen_helper_fsave(cpu_env, s->A0, tcg_const_i32(dflag - 1)); + gen_helper_fsave(cpu_env, s->A0, tcg_const_i32(s->dflag - = 1)); break; case 0x2f: /* fnstsw mem */ gen_helper_fnstsw(s->tmp2_i32, cpu_env); @@ -6355,7 +6355,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0xa4: /* movsS */ case 0xa5: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_movs(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { @@ -6365,7 +6365,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0xaa: /* stosS */ case 0xab: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_stos(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { @@ -6374,7 +6374,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xac: /* lodsS */ case 0xad: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_lods(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { @@ -6383,7 +6383,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xae: /* scasS */ case 0xaf: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); if (prefixes & PREFIX_REPNZ) { gen_repz_scas(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 1); } else if (prefixes & PREFIX_REPZ) { @@ -6395,7 +6395,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0xa6: /* cmpsS */ case 0xa7: - ot =3D mo_b_d(b, dflag); + ot =3D mo_b_d(b, s->dflag); if (prefixes & PREFIX_REPNZ) { gen_repz_cmps(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 1); } else if (prefixes & PREFIX_REPZ) { @@ -6406,7 +6406,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x6c: /* insS */ case 0x6d: - ot =3D mo_b_d32(b, dflag); + ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base,=20 SVM_IOIO_TYPE_MASK | svm_is_rep(prefixes) | 4); @@ -6421,7 +6421,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x6e: /* outsS */ case 0x6f: - ot =3D mo_b_d32(b, dflag); + ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base, svm_is_rep(prefixes) | 4); @@ -6440,7 +6440,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 case 0xe4: case 0xe5: - ot =3D mo_b_d32(b, dflag); + ot =3D mo_b_d32(b, s->dflag); val =3D x86_ldub_code(env, s); tcg_gen_movi_tl(s->T0, val); gen_check_io(s, ot, pc_start - s->cs_base, @@ -6459,7 +6459,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xe6: case 0xe7: - ot =3D mo_b_d32(b, dflag); + ot =3D mo_b_d32(b, s->dflag); val =3D x86_ldub_code(env, s); tcg_gen_movi_tl(s->T0, val); gen_check_io(s, ot, pc_start - s->cs_base, @@ -6480,7 +6480,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xec: case 0xed: - ot =3D mo_b_d32(b, dflag); + ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base, SVM_IOIO_TYPE_MASK | svm_is_rep(prefixes)); @@ -6498,7 +6498,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xee: case 0xef: - ot =3D mo_b_d32(b, dflag); + ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base, svm_is_rep(prefixes)); @@ -6542,21 +6542,21 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) if (s->pe && !s->vm86) { gen_update_cc_op(s); gen_jmp_im(s, pc_start - s->cs_base); - gen_helper_lret_protected(cpu_env, tcg_const_i32(dflag - 1), + gen_helper_lret_protected(cpu_env, tcg_const_i32(s->dflag - 1), tcg_const_i32(val)); } else { gen_stack_A0(s); /* pop offset */ - gen_op_ld_v(s, dflag, s->T0, s->A0); + gen_op_ld_v(s, s->dflag, s->T0, s->A0); /* NOTE: keeping EIP updated is not a problem in case of exception */ gen_op_jmp_v(s->T0); /* pop selector */ - gen_add_A0_im(s, 1 << dflag); - gen_op_ld_v(s, dflag, s->T0, s->A0); + gen_add_A0_im(s, 1 << s->dflag); + gen_op_ld_v(s, s->dflag, s->T0, s->A0); gen_op_movl_seg_T0_vm(s, R_CS); /* add stack offset */ - gen_stack_update(s, val + (2 << dflag)); + gen_stack_update(s, val + (2 << s->dflag)); } gen_eob(s); break; @@ -6567,17 +6567,17 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) gen_svm_check_intercept(s, pc_start, SVM_EXIT_IRET); if (!s->pe) { /* real mode */ - gen_helper_iret_real(cpu_env, tcg_const_i32(dflag - 1)); + gen_helper_iret_real(cpu_env, tcg_const_i32(s->dflag - 1)); set_cc_op(s, CC_OP_EFLAGS); } else if (s->vm86) { if (s->iopl !=3D 3) { gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); } else { - gen_helper_iret_real(cpu_env, tcg_const_i32(dflag - 1)); + gen_helper_iret_real(cpu_env, tcg_const_i32(s->dflag - 1)); set_cc_op(s, CC_OP_EFLAGS); } } else { - gen_helper_iret_protected(cpu_env, tcg_const_i32(dflag - 1), + gen_helper_iret_protected(cpu_env, tcg_const_i32(s->dflag - 1), tcg_const_i32(s->pc - s->cs_base)); set_cc_op(s, CC_OP_EFLAGS); } @@ -6585,14 +6585,14 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) break; case 0xe8: /* call im */ { - if (dflag !=3D MO_16) { + if (s->dflag !=3D MO_16) { tval =3D (int32_t)insn_get(env, s, MO_32); } else { tval =3D (int16_t)insn_get(env, s, MO_16); } next_eip =3D s->pc - s->cs_base; tval +=3D next_eip; - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tval &=3D 0xffff; } else if (!CODE64(s)) { tval &=3D 0xffffffff; @@ -6609,7 +6609,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 if (CODE64(s)) goto illegal_op; - ot =3D dflag; + ot =3D s->dflag; offset =3D insn_get(env, s, ot); selector =3D insn_get(env, s, MO_16); =20 @@ -6618,13 +6618,13 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) } goto do_lcall; case 0xe9: /* jmp im */ - if (dflag !=3D MO_16) { + if (s->dflag !=3D MO_16) { tval =3D (int32_t)insn_get(env, s, MO_32); } else { tval =3D (int16_t)insn_get(env, s, MO_16); } tval +=3D s->pc - s->cs_base; - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tval &=3D 0xffff; } else if (!CODE64(s)) { tval &=3D 0xffffffff; @@ -6638,7 +6638,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 if (CODE64(s)) goto illegal_op; - ot =3D dflag; + ot =3D s->dflag; offset =3D insn_get(env, s, ot); selector =3D insn_get(env, s, MO_16); =20 @@ -6649,7 +6649,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xeb: /* jmp Jb */ tval =3D (int8_t)insn_get(env, s, MO_8); tval +=3D s->pc - s->cs_base; - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tval &=3D 0xffff; } gen_jmp(s, tval); @@ -6658,7 +6658,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) tval =3D (int8_t)insn_get(env, s, MO_8); goto do_jcc; case 0x180 ... 0x18f: /* jcc Jv */ - if (dflag !=3D MO_16) { + if (s->dflag !=3D MO_16) { tval =3D (int32_t)insn_get(env, s, MO_32); } else { tval =3D (int16_t)insn_get(env, s, MO_16); @@ -6666,7 +6666,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) do_jcc: next_eip =3D s->pc - s->cs_base; tval +=3D next_eip; - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tval &=3D 0xffff; } gen_bnd_jmp(s); @@ -6682,7 +6682,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (!(s->cpuid_features & CPUID_CMOV)) { goto illegal_op; } - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_cmovcc1(env, s, ot, b, modrm, reg); @@ -6707,7 +6707,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } else { ot =3D gen_pop_T0(s); if (s->cpl =3D=3D 0) { - if (dflag !=3D MO_16) { + if (s->dflag !=3D MO_16) { gen_helper_write_eflags(cpu_env, s->T0, tcg_const_i32((TF_MASK | AC_MA= SK | ID_MASK | NT_MA= SK | @@ -6722,7 +6722,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } } else { if (s->cpl <=3D s->iopl) { - if (dflag !=3D MO_16) { + if (s->dflag !=3D MO_16) { gen_helper_write_eflags(cpu_env, s->T0, tcg_const_i32((TF_MASK | AC_MASK | @@ -6739,7 +6739,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) & 0xffff)); } } else { - if (dflag !=3D MO_16) { + if (s->dflag !=3D MO_16) { gen_helper_write_eflags(cpu_env, s->T0, tcg_const_i32((TF_MASK | AC_MAS= K | ID_MASK | NT_MAS= K))); @@ -6799,7 +6799,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /************************/ /* bit operations */ case 0x1ba: /* bt/bts/btr/btc Gv, im */ - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); op =3D (modrm >> 3) & 7; mod =3D (modrm >> 6) & 3; @@ -6832,7 +6832,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1bb: /* btc */ op =3D 3; do_btx: - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); mod =3D (modrm >> 6) & 3; @@ -6937,7 +6937,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x1bc: /* bsf / tzcnt */ case 0x1bd: /* bsr / lzcnt */ - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 0); @@ -7111,7 +7111,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x62: /* bound */ if (CODE64(s)) goto illegal_op; - ot =3D dflag; + ot =3D s->dflag; modrm =3D x86_ldub_code(env, s); reg =3D (modrm >> 3) & 7; mod =3D (modrm >> 6) & 3; @@ -7129,7 +7129,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1c8 ... 0x1cf: /* bswap reg */ reg =3D (b & 7) | REX_B(s); #ifdef TARGET_X86_64 - if (dflag =3D=3D MO_64) { + if (s->dflag =3D=3D MO_64) { gen_op_mov_v_reg(s, MO_64, s->T0, reg); tcg_gen_bswap64_i64(s->T0, s->T0); gen_op_mov_reg_v(s, MO_64, reg, s->T0); @@ -7159,7 +7159,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) tval =3D (int8_t)insn_get(env, s, MO_8); next_eip =3D s->pc - s->cs_base; tval +=3D next_eip; - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tval &=3D 0xffff; } =20 @@ -7243,7 +7243,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (!s->pe) { gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); } else { - gen_helper_sysexit(cpu_env, tcg_const_i32(dflag - 1)); + gen_helper_sysexit(cpu_env, tcg_const_i32(s->dflag - 1)); gen_eob(s); } break; @@ -7262,7 +7262,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (!s->pe) { gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); } else { - gen_helper_sysret(cpu_env, tcg_const_i32(dflag - 1)); + gen_helper_sysret(cpu_env, tcg_const_i32(s->dflag - 1)); /* condition codes are modified only in long mode */ if (s->lma) { set_cc_op(s, CC_OP_EFLAGS); @@ -7301,7 +7301,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_svm_check_intercept(s, pc_start, SVM_EXIT_LDTR_READ); tcg_gen_ld32u_tl(s->T0, cpu_env, offsetof(CPUX86State, ldt.selector)); - ot =3D mod =3D=3D 3 ? dflag : MO_16; + ot =3D mod =3D=3D 3 ? s->dflag : MO_16; gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 1); break; case 2: /* lldt */ @@ -7322,7 +7322,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_svm_check_intercept(s, pc_start, SVM_EXIT_TR_READ); tcg_gen_ld32u_tl(s->T0, cpu_env, offsetof(CPUX86State, tr.selector)); - ot =3D mod =3D=3D 3 ? dflag : MO_16; + ot =3D mod =3D=3D 3 ? s->dflag : MO_16; gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 1); break; case 3: /* ltr */ @@ -7366,7 +7366,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_op_st_v(s, MO_16, s->T0, s->A0); gen_add_A0_im(s, 2); tcg_gen_ld_tl(s->T0, cpu_env, offsetof(CPUX86State, gdt.base)); - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tcg_gen_andi_tl(s->T0, s->T0, 0xffffff); } gen_op_st_v(s, CODE64(s) + MO_32, s->T0, s->A0); @@ -7421,7 +7421,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_op_st_v(s, MO_16, s->T0, s->A0); gen_add_A0_im(s, 2); tcg_gen_ld_tl(s->T0, cpu_env, offsetof(CPUX86State, idt.base)); - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tcg_gen_andi_tl(s->T0, s->T0, 0xffffff); } gen_op_st_v(s, CODE64(s) + MO_32, s->T0, s->A0); @@ -7571,7 +7571,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_op_ld_v(s, MO_16, s->T1, s->A0); gen_add_A0_im(s, 2); gen_op_ld_v(s, CODE64(s) + MO_32, s->T0, s->A0); - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tcg_gen_andi_tl(s->T0, s->T0, 0xffffff); } tcg_gen_st_tl(s->T0, cpu_env, offsetof(CPUX86State, gdt.base)); @@ -7588,7 +7588,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_op_ld_v(s, MO_16, s->T1, s->A0); gen_add_A0_im(s, 2); gen_op_ld_v(s, CODE64(s) + MO_32, s->T0, s->A0); - if (dflag =3D=3D MO_16) { + if (s->dflag =3D=3D MO_16) { tcg_gen_andi_tl(s->T0, s->T0, 0xffffff); } tcg_gen_st_tl(s->T0, cpu_env, offsetof(CPUX86State, idt.base)); @@ -7700,7 +7700,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (CODE64(s)) { int d_ot; /* d_ot is the size of destination */ - d_ot =3D dflag; + d_ot =3D s->dflag; =20 modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); @@ -7775,7 +7775,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) TCGv t0; if (!s->pe || s->vm86) goto illegal_op; - ot =3D dflag !=3D MO_16 ? MO_32 : MO_16; + ot =3D s->dflag !=3D MO_16 ? MO_32 : MO_16; modrm =3D x86_ldub_code(env, s); reg =3D ((modrm >> 3) & 7) | REX_R(s); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); @@ -8117,7 +8117,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1c3: /* MOVNTI reg, mem */ if (!(s->cpuid_features & CPUID_SSE2)) goto illegal_op; - ot =3D mo_64_32(dflag); + ot =3D mo_64_32(s->dflag); modrm =3D x86_ldub_code(env, s); mod =3D (modrm >> 6) & 3; if (mod =3D=3D 3) @@ -8353,7 +8353,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->prefix & PREFIX_DATA) { ot =3D MO_16; } else { - ot =3D mo_64_32(dflag); + ot =3D mo_64_32(s->dflag); } =20 gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 0); --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835842; cv=none; d=zoho.com; s=zohoarc; b=BxlRQiKRl5MC5uKtjjrGtWE+HETUH+x+8hRDgiXyKBWJRvp97dNRsqqApvobiX7ykmGhHRePn1yaiEYhZXE6Bd0Tp+7haxn2KBaKgnTGrTEDHJ9NbveirBc0cbuzwMgtf7qn4YHoUcjaTpipVpjvioidMa/cF5rktFoyxWOM6aE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835842; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=BvKEqCsxGM1icK/UDvmsFoZ3TKzQweETmIyLpTRUtPE=; b=DXyhZtAodHujNMfSAMoOnypI1Wfs7WHjwfJdqURYzteqPzLNoox9B7pqMQW5ASLMzhHGIHtbIYqVs//r1atWNyDMEBEQXI3OlJ1her5TUAT+vYYepVrKzbI5CoM3D5awgRWyOqsF2EofgbT+h3JtpCtEy26F9PqpcFeDGC4ALdk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835842463767.4491178204479; Wed, 14 Aug 2019 19:24:02 -0700 (PDT) Received: from localhost ([::1]:37464 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Qg-0005KN-Gn for importer@patchew.org; Wed, 14 Aug 2019 22:23:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46637) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DH-0005w9-5U for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DE-0008Fr-VC for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:03 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:44673) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DE-0008Fa-Q0 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:00 -0400 Received: by mail-yb1-xb42.google.com with SMTP id y21so390985ybi.11 for ; Wed, 14 Aug 2019 19:10:00 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.09.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:09:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BvKEqCsxGM1icK/UDvmsFoZ3TKzQweETmIyLpTRUtPE=; b=aizWusaGB/wPKp3jkFCKMuJn199x1vyRRS6u2bjFeEHoTj44c2rG3jHsMNkT6fwudG 5b/PZ6AuCNziTK7yFb7Kh/q5TGgKoRuIXWwQrqSSVhi1pvMGz8ZpEbVYtpTUZQZZXLlK v6aSQVtfJVwSv8gyTRFlZWZ64PSXfNx0QvrXvMWpU1mq878o+TbvmOmWLlyAD3fUGjPB sZdYjQVsmOkSVraumS3FbPFf4v1dwHXuRqmYNURiI8EanYZ4JatvNVskiKDDSHYYyQ9Y AiruCvh4TYkdDDt7N6rhdjAgbTRwlKsJ5PJlqpVnRGN82wFLVyo6T7f1za7u1npdq2yZ CDTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BvKEqCsxGM1icK/UDvmsFoZ3TKzQweETmIyLpTRUtPE=; b=Q79hZ/meO37SJuLAIlwdVEo1Yxn8MtvqlktM8K2C/7t8ngE3OTv5N8PEhAoXt94WKy Xie3FwdJqhgTzyIxk56EYPu0LlDGsBrca7HurUHU+7DJr/bYpmwOdTuPOgdbSJrpzCie BWjiEHSk4nGZoVzBgCldFWDeYn8LzLmd9+/RjDwWV+R/PXkmdZ6eMUPH8I4b3a1yfWTC 0Xb6Iw2mJmTgVpt8huqIU80KClq3l3FRF4zF1cw3xwGtQpiCdJMuIdpy1hzDKXLRo+td +uSPB2za7z7ldCoJi9IO9VX5bNlZOxqy0jwSRu2TKc5D/yt6Nis3irzQNhfAqgJ2OOTy CBNA== X-Gm-Message-State: APjAAAVBigxT1EQGbBeYC2wR9wiZt44ZGGOAejCHxzwkoKdlB+PxAjKI RD+K2szoJplpnzTAp2BWSfH9UuMv X-Google-Smtp-Source: APXvYqyGwNgF/nckxqKd+0OLghzhMF/CQeZBQXNKhbu8i18EMa2xa7PAy4rOess1yaPMp5dn6BiVww== X-Received: by 2002:a25:83c8:: with SMTP id v8mr1870864ybm.346.1565834999872; Wed, 14 Aug 2019 19:09:59 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:47 -0400 Message-Id: <20190815020928.9679-6-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b42 Subject: [Qemu-devel] [RFC PATCH v3 05/46] target/i386: use prefix from DisasContext X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Reduce scope of the local variable prefixes to enforce use of prefix from DisasContext instead. Suggested-by: Richard Henderson Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 113 ++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index bb13877df7..40a4844b64 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4491,7 +4491,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, static target_ulong disas_insn(DisasContext *s, CPUState *cpu) { CPUX86State *env =3D cpu->env_ptr; - int b, prefixes; + int b; int shift; TCGMemOp ot; int modrm, reg, rm, mod, op, opreg, val; @@ -4499,6 +4499,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) target_ulong pc_start =3D s->base.pc_next; =20 { + int prefixes; TCGMemOp aflag, dflag; =20 s->pc_start =3D s->pc =3D pc_start; @@ -6356,7 +6357,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xa4: /* movsS */ case 0xa5: ot =3D mo_b_d(b, s->dflag); - if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { + if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_movs(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { gen_movs(s, ot); @@ -6366,7 +6367,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xaa: /* stosS */ case 0xab: ot =3D mo_b_d(b, s->dflag); - if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { + if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_stos(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { gen_stos(s, ot); @@ -6375,7 +6376,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xac: /* lodsS */ case 0xad: ot =3D mo_b_d(b, s->dflag); - if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { + if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_lods(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { gen_lods(s, ot); @@ -6384,9 +6385,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xae: /* scasS */ case 0xaf: ot =3D mo_b_d(b, s->dflag); - if (prefixes & PREFIX_REPNZ) { + if (s->prefix & PREFIX_REPNZ) { gen_repz_scas(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 1); - } else if (prefixes & PREFIX_REPZ) { + } else if (s->prefix & PREFIX_REPZ) { gen_repz_scas(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 0); } else { gen_scas(s, ot); @@ -6396,9 +6397,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xa6: /* cmpsS */ case 0xa7: ot =3D mo_b_d(b, s->dflag); - if (prefixes & PREFIX_REPNZ) { + if (s->prefix & PREFIX_REPNZ) { gen_repz_cmps(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 1); - } else if (prefixes & PREFIX_REPZ) { + } else if (s->prefix & PREFIX_REPZ) { gen_repz_cmps(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 0); } else { gen_cmps(s, ot); @@ -6409,8 +6410,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base,=20 - SVM_IOIO_TYPE_MASK | svm_is_rep(prefixes) | 4); - if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { + SVM_IOIO_TYPE_MASK | svm_is_rep(s->prefix) | 4); + if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_ins(s, ot, pc_start - s->cs_base, s->pc - s->cs_base); } else { gen_ins(s, ot); @@ -6424,8 +6425,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base, - svm_is_rep(prefixes) | 4); - if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) { + svm_is_rep(s->prefix) | 4); + if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { gen_repz_outs(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); } else { gen_outs(s, ot); @@ -6444,7 +6445,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) val =3D x86_ldub_code(env, s); tcg_gen_movi_tl(s->T0, val); gen_check_io(s, ot, pc_start - s->cs_base, - SVM_IOIO_TYPE_MASK | svm_is_rep(prefixes)); + SVM_IOIO_TYPE_MASK | svm_is_rep(s->prefix)); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); } @@ -6463,7 +6464,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) val =3D x86_ldub_code(env, s); tcg_gen_movi_tl(s->T0, val); gen_check_io(s, ot, pc_start - s->cs_base, - svm_is_rep(prefixes)); + svm_is_rep(s->prefix)); gen_op_mov_v_reg(s, ot, s->T1, R_EAX); =20 if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { @@ -6483,7 +6484,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base, - SVM_IOIO_TYPE_MASK | svm_is_rep(prefixes)); + SVM_IOIO_TYPE_MASK | svm_is_rep(s->prefix)); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); } @@ -6501,7 +6502,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); gen_check_io(s, ot, pc_start - s->cs_base, - svm_is_rep(prefixes)); + svm_is_rep(s->prefix)); gen_op_mov_v_reg(s, ot, s->T1, R_EAX); =20 if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { @@ -6944,7 +6945,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_extu(ot, s->T0); =20 /* Note that lzcnt and tzcnt are in different extensions. */ - if ((prefixes & PREFIX_REPZ) + if ((s->prefix & PREFIX_REPZ) && (b & 1 ? s->cpuid_ext3_features & CPUID_EXT3_ABM : s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_BMI1)) { @@ -7037,14 +7038,14 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) /* misc */ case 0x90: /* nop */ /* XXX: correct lock test for all insn */ - if (prefixes & PREFIX_LOCK) { + if (s->prefix & PREFIX_LOCK) { goto illegal_op; } /* If REX_B is set, then this is xchg eax, r8d, not a nop. */ if (REX_B(s)) { goto do_xchg_reg_eax; } - if (prefixes & PREFIX_REPZ) { + if (s->prefix & PREFIX_REPZ) { gen_update_cc_op(s); gen_jmp_im(s, pc_start - s->cs_base); gen_helper_pause(cpu_env, tcg_const_i32(s->pc - pc_start)); @@ -7607,7 +7608,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 1); break; case 0xee: /* rdpkru */ - if (prefixes & PREFIX_LOCK) { + if (s->prefix & PREFIX_LOCK) { goto illegal_op; } tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); @@ -7615,7 +7616,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], s->tmp1_= i64); break; case 0xef: /* wrpkru */ - if (prefixes & PREFIX_LOCK) { + if (s->prefix & PREFIX_LOCK) { goto illegal_op; } tcg_gen_concat_tl_i64(s->tmp1_i64, cpu_regs[R_EAX], @@ -7819,18 +7820,18 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) if (s->flags & HF_MPX_EN_MASK) { mod =3D (modrm >> 6) & 3; reg =3D ((modrm >> 3) & 7) | REX_R(s); - if (prefixes & PREFIX_REPZ) { + if (s->prefix & PREFIX_REPZ) { /* bndcl */ if (reg >=3D 4 - || (prefixes & PREFIX_LOCK) + || (s->prefix & PREFIX_LOCK) || s->aflag =3D=3D MO_16) { goto illegal_op; } gen_bndck(env, s, modrm, TCG_COND_LTU, cpu_bndl[reg]); - } else if (prefixes & PREFIX_REPNZ) { + } else if (s->prefix & PREFIX_REPNZ) { /* bndcu */ if (reg >=3D 4 - || (prefixes & PREFIX_LOCK) + || (s->prefix & PREFIX_LOCK) || s->aflag =3D=3D MO_16) { goto illegal_op; } @@ -7838,14 +7839,14 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) tcg_gen_not_i64(notu, cpu_bndu[reg]); gen_bndck(env, s, modrm, TCG_COND_GTU, notu); tcg_temp_free_i64(notu); - } else if (prefixes & PREFIX_DATA) { + } else if (s->prefix & PREFIX_DATA) { /* bndmov -- from reg/mem */ if (reg >=3D 4 || s->aflag =3D=3D MO_16) { goto illegal_op; } if (mod =3D=3D 3) { int reg2 =3D (modrm & 7) | REX_B(s); - if (reg2 >=3D 4 || (prefixes & PREFIX_LOCK)) { + if (reg2 >=3D 4 || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } if (s->flags & HF_MPX_IU_MASK) { @@ -7874,7 +7875,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /* bndldx */ AddressParts a =3D gen_lea_modrm_0(env, s, modrm); if (reg >=3D 4 - || (prefixes & PREFIX_LOCK) + || (s->prefix & PREFIX_LOCK) || s->aflag =3D=3D MO_16 || a.base < -1) { goto illegal_op; @@ -7909,10 +7910,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) if (s->flags & HF_MPX_EN_MASK) { mod =3D (modrm >> 6) & 3; reg =3D ((modrm >> 3) & 7) | REX_R(s); - if (mod !=3D 3 && (prefixes & PREFIX_REPZ)) { + if (mod !=3D 3 && (s->prefix & PREFIX_REPZ)) { /* bndmk */ if (reg >=3D 4 - || (prefixes & PREFIX_LOCK) + || (s->prefix & PREFIX_LOCK) || s->aflag =3D=3D MO_16) { goto illegal_op; } @@ -7937,22 +7938,22 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) /* bnd registers are now in-use */ gen_set_hflag(s, HF_MPX_IU_MASK); break; - } else if (prefixes & PREFIX_REPNZ) { + } else if (s->prefix & PREFIX_REPNZ) { /* bndcn */ if (reg >=3D 4 - || (prefixes & PREFIX_LOCK) + || (s->prefix & PREFIX_LOCK) || s->aflag =3D=3D MO_16) { goto illegal_op; } gen_bndck(env, s, modrm, TCG_COND_GTU, cpu_bndu[reg]); - } else if (prefixes & PREFIX_DATA) { + } else if (s->prefix & PREFIX_DATA) { /* bndmov -- to reg/mem */ if (reg >=3D 4 || s->aflag =3D=3D MO_16) { goto illegal_op; } if (mod =3D=3D 3) { int reg2 =3D (modrm & 7) | REX_B(s); - if (reg2 >=3D 4 || (prefixes & PREFIX_LOCK)) { + if (reg2 >=3D 4 || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } if (s->flags & HF_MPX_IU_MASK) { @@ -7979,7 +7980,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /* bndstx */ AddressParts a =3D gen_lea_modrm_0(env, s, modrm); if (reg >=3D 4 - || (prefixes & PREFIX_LOCK) + || (s->prefix & PREFIX_LOCK) || s->aflag =3D=3D MO_16 || a.base < -1) { goto illegal_op; @@ -8027,7 +8028,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D MO_64; else ot =3D MO_32; - if ((prefixes & PREFIX_LOCK) && (reg =3D=3D 0) && + if ((s->prefix & PREFIX_LOCK) && (reg =3D=3D 0) && (s->cpuid_ext3_features & CPUID_EXT3_CR8LEG)) { reg =3D 8; } @@ -8131,7 +8132,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) switch (modrm) { CASE_MODRM_MEM_OP(0): /* fxsave */ if (!(s->cpuid_features & CPUID_FXSR) - || (prefixes & PREFIX_LOCK)) { + || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } if ((s->flags & HF_EM_MASK) || (s->flags & HF_TS_MASK)) { @@ -8144,7 +8145,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 CASE_MODRM_MEM_OP(1): /* fxrstor */ if (!(s->cpuid_features & CPUID_FXSR) - || (prefixes & PREFIX_LOCK)) { + || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } if ((s->flags & HF_EM_MASK) || (s->flags & HF_TS_MASK)) { @@ -8183,8 +8184,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 CASE_MODRM_MEM_OP(4): /* xsave */ if ((s->cpuid_ext_features & CPUID_EXT_XSAVE) =3D=3D 0 - || (prefixes & (PREFIX_LOCK | PREFIX_DATA - | PREFIX_REPZ | PREFIX_REPNZ))) { + || (s->prefix & (PREFIX_LOCK | PREFIX_DATA + | PREFIX_REPZ | PREFIX_REPNZ))) { goto illegal_op; } gen_lea_modrm(env, s, modrm); @@ -8195,8 +8196,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 CASE_MODRM_MEM_OP(5): /* xrstor */ if ((s->cpuid_ext_features & CPUID_EXT_XSAVE) =3D=3D 0 - || (prefixes & (PREFIX_LOCK | PREFIX_DATA - | PREFIX_REPZ | PREFIX_REPNZ))) { + || (s->prefix & (PREFIX_LOCK | PREFIX_DATA + | PREFIX_REPZ | PREFIX_REPNZ))) { goto illegal_op; } gen_lea_modrm(env, s, modrm); @@ -8211,10 +8212,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) break; =20 CASE_MODRM_MEM_OP(6): /* xsaveopt / clwb */ - if (prefixes & PREFIX_LOCK) { + if (s->prefix & PREFIX_LOCK) { goto illegal_op; } - if (prefixes & PREFIX_DATA) { + if (s->prefix & PREFIX_DATA) { /* clwb */ if (!(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_CLWB)) { goto illegal_op; @@ -8224,7 +8225,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /* xsaveopt */ if ((s->cpuid_ext_features & CPUID_EXT_XSAVE) =3D=3D 0 || (s->cpuid_xsave_features & CPUID_XSAVE_XSAVEOPT) = =3D=3D 0 - || (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))) { + || (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ))) { goto illegal_op; } gen_lea_modrm(env, s, modrm); @@ -8235,10 +8236,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) break; =20 CASE_MODRM_MEM_OP(7): /* clflush / clflushopt */ - if (prefixes & PREFIX_LOCK) { + if (s->prefix & PREFIX_LOCK) { goto illegal_op; } - if (prefixes & PREFIX_DATA) { + if (s->prefix & PREFIX_DATA) { /* clflushopt */ if (!(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_CLFLUSHOPT= )) { goto illegal_op; @@ -8258,8 +8259,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xd0 ... 0xd7: /* wrfsbase (f3 0f ae /2) */ case 0xd8 ... 0xdf: /* wrgsbase (f3 0f ae /3) */ if (CODE64(s) - && (prefixes & PREFIX_REPZ) - && !(prefixes & PREFIX_LOCK) + && (s->prefix & PREFIX_REPZ) + && !(s->prefix & PREFIX_LOCK) && (s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_FSGSBASE)) { TCGv base, treg, src, dst; =20 @@ -8288,10 +8289,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) goto unknown_op; =20 case 0xf8: /* sfence / pcommit */ - if (prefixes & PREFIX_DATA) { + if (s->prefix & PREFIX_DATA) { /* pcommit */ if (!(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_PCOMMIT) - || (prefixes & PREFIX_LOCK)) { + || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } break; @@ -8299,21 +8300,21 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) /* fallthru */ case 0xf9 ... 0xff: /* sfence */ if (!(s->cpuid_features & CPUID_SSE) - || (prefixes & PREFIX_LOCK)) { + || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } tcg_gen_mb(TCG_MO_ST_ST | TCG_BAR_SC); break; case 0xe8 ... 0xef: /* lfence */ if (!(s->cpuid_features & CPUID_SSE) - || (prefixes & PREFIX_LOCK)) { + || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } tcg_gen_mb(TCG_MO_LD_LD | TCG_BAR_SC); break; case 0xf0 ... 0xf7: /* mfence */ if (!(s->cpuid_features & CPUID_SSE2) - || (prefixes & PREFIX_LOCK)) { + || (s->prefix & PREFIX_LOCK)) { goto illegal_op; } tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); @@ -8341,8 +8342,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_eob(s); break; case 0x1b8: /* SSE4.2 popcnt */ - if ((prefixes & (PREFIX_REPZ | PREFIX_LOCK | PREFIX_REPNZ)) !=3D - PREFIX_REPZ) + if ((s->prefix & (PREFIX_REPZ | PREFIX_LOCK | PREFIX_REPNZ)) !=3D + PREFIX_REPZ) goto illegal_op; if (!(s->cpuid_ext_features & CPUID_EXT_POPCNT)) goto illegal_op; --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836001; cv=none; d=zoho.com; s=zohoarc; b=eaPWdqm3Q0DQCx99IvLXedCEncSe5JGkfOQ08mb8ABAgMqpSY/tTMcbb+mcx2YmzdhbK2PmCNnXW5BpNfxvruuK3d7yjrSq6cZiUqzoeCS/GQzCpAqPpk5tclm4JQQUUjspjS9/K7I1DfQpDTu99h64N0a/Auxm026Dst3Gbo+o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836001; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=YM6JnD5zVeDNhUIY5JwD7QUjg+Ky9R6ynEiC0EUrLPE=; b=jgmK7vwRvAv3l/xXfR0WMYo043Wt1CE4HWXqvdH+12vQwGpChzN5g8aooEPblJwtsxWaD4CQORaAww5XbVRNXtHp7QXyl+ECOl/c+HhZ52cL18cM3S6xexd8kGNY0Lh9rl/CvUHtFlfPjNCoKCGvD9deqYGqoJQtnzs0ITrYIlY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836001774740.3897315352757; Wed, 14 Aug 2019 19:26:41 -0700 (PDT) Received: from localhost ([::1]:37492 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5TM-0000dr-2Q for importer@patchew.org; Wed, 14 Aug 2019 22:26:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46642) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DH-0005wo-I3 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DF-0008G7-Ep for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:03 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:43832) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DF-0008Fw-9E for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:01 -0400 Received: by mail-yw1-xc42.google.com with SMTP id n205so286757ywb.10 for ; Wed, 14 Aug 2019 19:10:01 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.09.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YM6JnD5zVeDNhUIY5JwD7QUjg+Ky9R6ynEiC0EUrLPE=; b=qtqpCfpLtKYusVBIzAecZO0eg7fO81vq4IRGj5MsIBsCRreWpK77qv0UYXX24gM455 HArffliqTQcqd00jcYL8yohZViInkaaRB59/UwyJdQz8acjAvHLb6I58UG/n88vVpqh4 kqRxN+VN2YQgYcOEpE8HY9GktH1Svqabro4AwfFueaMKu8W1vtICDInwcOBcXCiJNKbT Ghzcomc0v1nkD4BxFbeSI1CnMOu8AiC/uPjxFC4+tVRBdvXX6SaZIBAJvBmwe6wqLZI1 bXTvNcwHirn0LFMA2YdCplYhri7GYiYVTc7cim9fslYX4c4qtmix/qQfxan+o0sneHFd tjwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YM6JnD5zVeDNhUIY5JwD7QUjg+Ky9R6ynEiC0EUrLPE=; b=c4YKFf6TJcrWMnLO+LP5X5ztDXPkmTdYfDfsmLVXyHiL+e0z/VEcvXwvhTSUFTxn/O rwtLbIM/gpu9h6oNwxe/R57MpB0VS8iBn7D3vQdurffP5cakYTdx+uk3oNQo+KHiKnMR 61TUmWBUFdTzrd9v0TYJx9qiBHXMWSJp7fdoYOnPAuhhptmcQUV841ctH43nuWHXN9Uo iO4YXwSKgVBjpyM5OEnoU6BNKtMbVBPVrBgX4WMiMVRwyyZ8MPPjrGpgcsa0WSOOZ8IQ shU4SIYTGRzXgVESFcya5wE3cl2fEunmeD8ZQAdn4DY41s1UX+JGzXQxueQqTpcmJ+oe cuTQ== X-Gm-Message-State: APjAAAWw9jhRO4CFy55JEvYcJjmx0KPyUj3lKjOnhsRjZi5g/506RYF+ 714aBvY5Rn276WsmoT3Z3o6gOtnP X-Google-Smtp-Source: APXvYqx5Q9wh/2rdgpmVh77Hg7IF7z1Bs/7OGCdc4Wxita0EmN8Xbl7YLm3xAZK9yBQkToL1Q8RIcw== X-Received: by 2002:a81:9c0f:: with SMTP id m15mr1544818ywa.495.1565835000468; Wed, 14 Aug 2019 19:10:00 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:48 -0400 Message-Id: <20190815020928.9679-7-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 06/46] target/i386: Simplify gen_exception arguments X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Richard Henderson We can compute cur_eip from values present within DisasContext. Signed-off-by: Richard Henderson --- target/i386/translate.c | 89 ++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index 40a4844b64..7532d65778 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -1272,10 +1272,10 @@ static void gen_helper_fp_arith_STN_ST0(int op, int= opreg) } } =20 -static void gen_exception(DisasContext *s, int trapno, target_ulong cur_ei= p) +static void gen_exception(DisasContext *s, int trapno) { gen_update_cc_op(s); - gen_jmp_im(s, cur_eip); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_raise_exception(cpu_env, tcg_const_i32(trapno)); s->base.is_jmp =3D DISAS_NORETURN; } @@ -1284,7 +1284,7 @@ static void gen_exception(DisasContext *s, int trapno= , target_ulong cur_eip) the instruction is known, but it isn't allowed in the current cpu mode.= */ static void gen_illegal_opcode(DisasContext *s) { - gen_exception(s, EXCP06_ILLOP, s->pc_start - s->cs_base); + gen_exception(s, EXCP06_ILLOP); } =20 /* if d =3D=3D OR_TMP0, it means memory operand (address in A0) */ @@ -3040,8 +3040,7 @@ static const struct SSEOpHelper_eppi sse_op_table7[25= 6] =3D { [0xdf] =3D AESNI_OP(aeskeygenassist), }; =20 -static void gen_sse(CPUX86State *env, DisasContext *s, int b, - target_ulong pc_start) +static void gen_sse(CPUX86State *env, DisasContext *s, int b) { int b1, op1_offset, op2_offset, is_xmm, val; int modrm, mod, rm, reg; @@ -3076,7 +3075,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s= , int b, } /* simple MMX/SSE operation */ if (s->flags & HF_TS_MASK) { - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); return; } if (s->flags & HF_EM_MASK) { @@ -4515,7 +4514,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) s->vex_l =3D 0; s->vex_v =3D 0; if (sigsetjmp(s->jmpbuf, 0) !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); return s->pc; } =20 @@ -5854,7 +5853,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->flags & (HF_EM_MASK | HF_TS_MASK)) { /* if CR0.EM or CR0.TS are set, generate an FPU exception */ /* XXX: what to do if illegal op ? */ - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); break; } modrm =3D x86_ldub_code(env, s); @@ -6572,7 +6571,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) set_cc_op(s, CC_OP_EFLAGS); } else if (s->vm86) { if (s->iopl !=3D 3) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_helper_iret_real(cpu_env, tcg_const_i32(s->dflag - 1)); set_cc_op(s, CC_OP_EFLAGS); @@ -6694,7 +6693,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x9c: /* pushf */ gen_svm_check_intercept(s, pc_start, SVM_EXIT_PUSHF); if (s->vm86 && s->iopl !=3D 3) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_update_cc_op(s); gen_helper_read_eflags(s->T0, cpu_env); @@ -6704,7 +6703,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x9d: /* popf */ gen_svm_check_intercept(s, pc_start, SVM_EXIT_POPF); if (s->vm86 && s->iopl !=3D 3) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { ot =3D gen_pop_T0(s); if (s->cpl =3D=3D 0) { @@ -7021,7 +7020,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; val =3D x86_ldub_code(env, s); if (val =3D=3D 0) { - gen_exception(s, EXCP00_DIVZ, pc_start - s->cs_base); + gen_exception(s, EXCP00_DIVZ); } else { gen_helper_aam(cpu_env, tcg_const_i32(val)); set_cc_op(s, CC_OP_LOGICB); @@ -7055,7 +7054,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x9b: /* fwait */ if ((s->flags & (HF_MP_MASK | HF_TS_MASK)) =3D=3D (HF_MP_MASK | HF_TS_MASK)) { - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); } else { gen_helper_fwait(cpu_env); } @@ -7066,7 +7065,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xcd: /* int N */ val =3D x86_ldub_code(env, s); if (s->vm86 && s->iopl !=3D 3) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_interrupt(s, val, pc_start - s->cs_base, s->pc - s->cs_bas= e); } @@ -7089,13 +7088,13 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) if (s->cpl <=3D s->iopl) { gen_helper_cli(cpu_env); } else { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } } else { if (s->iopl =3D=3D 3) { gen_helper_cli(cpu_env); } else { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } } break; @@ -7106,7 +7105,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_jmp_im(s, s->pc - s->cs_base); gen_eob_inhibit_irq(s, true); } else { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } break; case 0x62: /* bound */ @@ -7198,7 +7197,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x130: /* wrmsr */ case 0x132: /* rdmsr */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_update_cc_op(s); gen_jmp_im(s, pc_start - s->cs_base); @@ -7231,7 +7230,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (CODE64(s) && env->cpuid_vendor1 !=3D CPUID_VENDOR_INTEL_1) goto illegal_op; if (!s->pe) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_helper_sysenter(cpu_env); gen_eob(s); @@ -7242,7 +7241,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (CODE64(s) && env->cpuid_vendor1 !=3D CPUID_VENDOR_INTEL_1) goto illegal_op; if (!s->pe) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_helper_sysexit(cpu_env, tcg_const_i32(s->dflag - 1)); gen_eob(s); @@ -7261,7 +7260,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x107: /* sysret */ if (!s->pe) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_helper_sysret(cpu_env, tcg_const_i32(s->dflag - 1)); /* condition codes are modified only in long mode */ @@ -7283,7 +7282,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0xf4: /* hlt */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_update_cc_op(s); gen_jmp_im(s, pc_start - s->cs_base); @@ -7309,7 +7308,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (!s->pe || s->vm86) goto illegal_op; if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_svm_check_intercept(s, pc_start, SVM_EXIT_LDTR_WRITE); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); @@ -7330,7 +7329,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (!s->pe || s->vm86) goto illegal_op; if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_svm_check_intercept(s, pc_start, SVM_EXIT_TR_WRITE); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); @@ -7446,7 +7445,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } tcg_gen_concat_tl_i64(s->tmp1_i64, cpu_regs[R_EAX], @@ -7463,7 +7462,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7488,7 +7487,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7501,7 +7500,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7516,7 +7515,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7530,7 +7529,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7554,7 +7553,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7564,7 +7563,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 CASE_MODRM_MEM_OP(2): /* lgdt */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_svm_check_intercept(s, pc_start, SVM_EXIT_GDTR_WRITE); @@ -7581,7 +7580,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 CASE_MODRM_MEM_OP(3): /* lidt */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_svm_check_intercept(s, pc_start, SVM_EXIT_IDTR_WRITE); @@ -7626,7 +7625,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; CASE_MODRM_OP(6): /* lmsw */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_svm_check_intercept(s, pc_start, SVM_EXIT_WRITE_CR0); @@ -7638,7 +7637,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) =20 CASE_MODRM_MEM_OP(7): /* invlpg */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); break; } gen_update_cc_op(s); @@ -7653,7 +7652,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) #ifdef TARGET_X86_64 if (CODE64(s)) { if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { tcg_gen_mov_tl(s->T0, cpu_seg_base[R_GS]); tcg_gen_ld_tl(cpu_seg_base[R_GS], cpu_env, @@ -7690,7 +7689,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x108: /* invd */ case 0x109: /* wbinvd */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_svm_check_intercept(s, pc_start, (b & 2) ? SVM_EXIT_INVD := SVM_EXIT_WBINVD); /* nothing to do */ @@ -8014,7 +8013,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x120: /* mov reg, crN */ case 0x122: /* mov crN, reg */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { modrm =3D x86_ldub_code(env, s); /* Ignore the mod bits (assume (modrm&0xc0)=3D=3D0xc0). @@ -8071,7 +8070,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x121: /* mov reg, drN */ case 0x123: /* mov drN, reg */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { modrm =3D x86_ldub_code(env, s); /* Ignore the mod bits (assume (modrm&0xc0)=3D=3D0xc0). @@ -8105,7 +8104,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x106: /* clts */ if (s->cpl !=3D 0) { - gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); + gen_exception(s, EXCP0D_GPF); } else { gen_svm_check_intercept(s, pc_start, SVM_EXIT_WRITE_CR0); gen_helper_clts(cpu_env); @@ -8136,7 +8135,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if ((s->flags & HF_EM_MASK) || (s->flags & HF_TS_MASK)) { - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); break; } gen_lea_modrm(env, s, modrm); @@ -8149,7 +8148,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if ((s->flags & HF_EM_MASK) || (s->flags & HF_TS_MASK)) { - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); break; } gen_lea_modrm(env, s, modrm); @@ -8161,7 +8160,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->flags & HF_TS_MASK) { - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); break; } gen_lea_modrm(env, s, modrm); @@ -8174,7 +8173,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } if (s->flags & HF_TS_MASK) { - gen_exception(s, EXCP07_PREX, pc_start - s->cs_base); + gen_exception(s, EXCP07_PREX); break; } gen_lea_modrm(env, s, modrm); @@ -8377,7 +8376,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1c2: case 0x1c4 ... 0x1c6: case 0x1d0 ... 0x1fe: - gen_sse(env, s, b, pc_start); + gen_sse(env, s, b); break; default: goto unknown_op; --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835511; cv=none; d=zoho.com; s=zohoarc; b=hZae5b3yp/1V7sxKf6yzayZEThiBtcO5ZRpElLtpKmBA29uQr+gf2waBolYrsN9cGKfBiyPfuBDwde4OyDsgO2b/KHsYLjH1HtTCjnB/KsT8V3pWnypOGvQ9eeqIF0uyKa5SgWh8ZS00527qBoqSe0xsQ/HniLMQREr4iLa+kCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835511; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=8o3k3JHlCkb2YaP3uBSJfjThXJM3PPb/FS5zva4+e9g=; b=NyD+yi46dqmjVmAmxI62knF6iU7gi446y9lv9U55A7ED+RHPrvtfC3Q/1pY5uX/ypP3b0gwiQHp/5xS3Efk/vglz5ze4hj2NEF04As1PQGEm01+yshzZX3zUfQS580QENIDocKgnaUk9IqDXz2tBo1Y6dossA/kWRgDdZ8apVrI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835511716784.3370846796593; Wed, 14 Aug 2019 19:18:31 -0700 (PDT) Received: from localhost ([::1]:37416 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5LP-00077Y-Va for importer@patchew.org; Wed, 14 Aug 2019 22:18:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46667) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DI-0005ys-TI for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DG-0008Gc-7J for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:04 -0400 Received: from mail-yb1-xb43.google.com ([2607:f8b0:4864:20::b43]:36580) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DG-0008GL-1K for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:02 -0400 Received: by mail-yb1-xb43.google.com with SMTP id m9so406862ybm.3 for ; Wed, 14 Aug 2019 19:10:02 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8o3k3JHlCkb2YaP3uBSJfjThXJM3PPb/FS5zva4+e9g=; b=Q4M32+lMspDbRHEd4ghI+KCc6mzDhseDslddvzF6hnFf9cbRg2JvYdbpwNaC7dHYWF +33TxhH06S+hCleBDAX2bQA77MHSvlJTex579uL3Z56Bxs1irOXAXjsp+LHWZp6cDKt+ gHWrlJBK/Btgv2CCLfiaHXxuRIJZt2irvZZXVDYlqdBdNdR3mfPPKBhKQKVaK+X8rl6z JILVZHcsek6fNgANQp4pKPNOJnjx6gZXwq7U6TQM0vHPRsBOTvMmvWSNUt0nAQbHf+8v LQXA+MB3VU9575nDhHwCXb534PFqRCl6dRRe7X7RSJwE81ZR1AmeTMdZxaS+c9ydaann MiHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8o3k3JHlCkb2YaP3uBSJfjThXJM3PPb/FS5zva4+e9g=; b=r2K+aHnKAmV1OoAgp16czYxNlZqdgeUFnSjD7pdveFolV1Gks37bxRj5sh43hOxRnx 4PqfzpRkiS6XRLmFL7dE6KWLbN/HifULOx0ExOuPK10igkj3ZA35m3QdEma96vQK13qA CkF7T5anASEFwePv/elqkiwGw1QLRbPMzXnM75wyVRqrBFiGnrhJiAYXn9p34vmco2cV Ap94h/VSS2iLM9w7mc59Ve66VEMM0rlSQL7ad9rss1lCk0VdZNfGVNneYLyXkBoNiyGn Kgp+qd9AN6ZpMgb6KuE1iMTvZpPU0vM2Q8ygeQsk5RgLM9xcwKC+0rcYSdZjyu4LVhry Pc+Q== X-Gm-Message-State: APjAAAU36FKfqpY1/GxL8aEBDhY5jH0DWPCK7qzTugPRSKxkfkJKbZzb +7cd6b5MZueX3M5kGReMB45Sen2d X-Google-Smtp-Source: APXvYqxCdq7gGbkof+/3F2qjnOLZwx4TZHclG7SY5o7v2tLZQqiW/ylkpdQXV4lAMVoOuhOMxmJAbA== X-Received: by 2002:a25:f205:: with SMTP id i5mr1944910ybe.520.1565835001040; Wed, 14 Aug 2019 19:10:01 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:49 -0400 Message-Id: <20190815020928.9679-8-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b43 Subject: [Qemu-devel] [RFC PATCH v3 07/46] target/i386: use pc_start from DisasContext X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The variable pc_start is already a member of DisasContext. Remove the superfluous local variable. Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 131 ++++++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index 7532d65778..b1ba2fc3e5 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4495,13 +4495,12 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) TCGMemOp ot; int modrm, reg, rm, mod, op, opreg, val; target_ulong next_eip, tval; - target_ulong pc_start =3D s->base.pc_next; =20 { int prefixes; TCGMemOp aflag, dflag; =20 - s->pc_start =3D s->pc =3D pc_start; + s->pc_start =3D s->pc =3D s->base.pc_next; s->override =3D -1; #ifdef TARGET_X86_64 s->rex_x =3D 0; @@ -6357,7 +6356,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xa5: ot =3D mo_b_d(b, s->dflag); if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { - gen_repz_movs(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); + gen_repz_movs(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase); } else { gen_movs(s, ot); } @@ -6367,7 +6366,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xab: ot =3D mo_b_d(b, s->dflag); if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { - gen_repz_stos(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); + gen_repz_stos(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase); } else { gen_stos(s, ot); } @@ -6376,7 +6375,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xad: ot =3D mo_b_d(b, s->dflag); if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { - gen_repz_lods(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); + gen_repz_lods(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase); } else { gen_lods(s, ot); } @@ -6385,9 +6384,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xaf: ot =3D mo_b_d(b, s->dflag); if (s->prefix & PREFIX_REPNZ) { - gen_repz_scas(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 1); + gen_repz_scas(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase, 1); } else if (s->prefix & PREFIX_REPZ) { - gen_repz_scas(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 0); + gen_repz_scas(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase, 0); } else { gen_scas(s, ot); } @@ -6397,9 +6396,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xa7: ot =3D mo_b_d(b, s->dflag); if (s->prefix & PREFIX_REPNZ) { - gen_repz_cmps(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 1); + gen_repz_cmps(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase, 1); } else if (s->prefix & PREFIX_REPZ) { - gen_repz_cmps(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= , 0); + gen_repz_cmps(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase, 0); } else { gen_cmps(s, ot); } @@ -6408,10 +6407,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) case 0x6d: ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); - gen_check_io(s, ot, pc_start - s->cs_base,=20 + gen_check_io(s, ot, s->pc_start - s->cs_base, SVM_IOIO_TYPE_MASK | svm_is_rep(s->prefix) | 4); if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { - gen_repz_ins(s, ot, pc_start - s->cs_base, s->pc - s->cs_base); + gen_repz_ins(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_ba= se); } else { gen_ins(s, ot); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { @@ -6423,10 +6422,10 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) case 0x6f: ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); - gen_check_io(s, ot, pc_start - s->cs_base, + gen_check_io(s, ot, s->pc_start - s->cs_base, svm_is_rep(s->prefix) | 4); if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) { - gen_repz_outs(s, ot, pc_start - s->cs_base, s->pc - s->cs_base= ); + gen_repz_outs(s, ot, s->pc_start - s->cs_base, s->pc - s->cs_b= ase); } else { gen_outs(s, ot); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { @@ -6443,7 +6442,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d32(b, s->dflag); val =3D x86_ldub_code(env, s); tcg_gen_movi_tl(s->T0, val); - gen_check_io(s, ot, pc_start - s->cs_base, + gen_check_io(s, ot, s->pc_start - s->cs_base, SVM_IOIO_TYPE_MASK | svm_is_rep(s->prefix)); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); @@ -6462,7 +6461,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) ot =3D mo_b_d32(b, s->dflag); val =3D x86_ldub_code(env, s); tcg_gen_movi_tl(s->T0, val); - gen_check_io(s, ot, pc_start - s->cs_base, + gen_check_io(s, ot, s->pc_start - s->cs_base, svm_is_rep(s->prefix)); gen_op_mov_v_reg(s, ot, s->T1, R_EAX); =20 @@ -6482,7 +6481,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xed: ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); - gen_check_io(s, ot, pc_start - s->cs_base, + gen_check_io(s, ot, s->pc_start - s->cs_base, SVM_IOIO_TYPE_MASK | svm_is_rep(s->prefix)); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); @@ -6500,7 +6499,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0xef: ot =3D mo_b_d32(b, s->dflag); tcg_gen_ext16u_tl(s->T0, cpu_regs[R_EDX]); - gen_check_io(s, ot, pc_start - s->cs_base, + gen_check_io(s, ot, s->pc_start - s->cs_base, svm_is_rep(s->prefix)); gen_op_mov_v_reg(s, ot, s->T1, R_EAX); =20 @@ -6541,7 +6540,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) do_lret: if (s->pe && !s->vm86) { gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_lret_protected(cpu_env, tcg_const_i32(s->dflag - 1), tcg_const_i32(val)); } else { @@ -6564,7 +6563,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) val =3D 0; goto do_lret; case 0xcf: /* iret */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_IRET); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_IRET); if (!s->pe) { /* real mode */ gen_helper_iret_real(cpu_env, tcg_const_i32(s->dflag - 1)); @@ -6691,7 +6690,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) /************************/ /* flags */ case 0x9c: /* pushf */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_PUSHF); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_PUSHF); if (s->vm86 && s->iopl !=3D 3) { gen_exception(s, EXCP0D_GPF); } else { @@ -6701,7 +6700,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } break; case 0x9d: /* popf */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_POPF); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_POPF); if (s->vm86 && s->iopl !=3D 3) { gen_exception(s, EXCP0D_GPF); } else { @@ -7046,8 +7045,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) } if (s->prefix & PREFIX_REPZ) { gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); - gen_helper_pause(cpu_env, tcg_const_i32(s->pc - pc_start)); + gen_jmp_im(s, s->pc_start - s->cs_base); + gen_helper_pause(cpu_env, tcg_const_i32(s->pc - s->pc_start)); s->base.is_jmp =3D DISAS_NORETURN; } break; @@ -7060,27 +7059,27 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) } break; case 0xcc: /* int3 */ - gen_interrupt(s, EXCP03_INT3, pc_start - s->cs_base, s->pc - s->cs= _base); + gen_interrupt(s, EXCP03_INT3, s->pc_start - s->cs_base, s->pc - s-= >cs_base); break; case 0xcd: /* int N */ val =3D x86_ldub_code(env, s); if (s->vm86 && s->iopl !=3D 3) { gen_exception(s, EXCP0D_GPF); } else { - gen_interrupt(s, val, pc_start - s->cs_base, s->pc - s->cs_bas= e); + gen_interrupt(s, val, s->pc_start - s->cs_base, s->pc - s->cs_= base); } break; case 0xce: /* into */ if (CODE64(s)) goto illegal_op; gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); - gen_helper_into(cpu_env, tcg_const_i32(s->pc - pc_start)); + gen_jmp_im(s, s->pc_start - s->cs_base); + gen_helper_into(cpu_env, tcg_const_i32(s->pc - s->pc_start)); break; #ifdef WANT_ICEBP case 0xf1: /* icebp (undocumented, exits to external debugger) */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_ICEBP); - gen_debug(s, pc_start - s->cs_base); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_ICEBP); + gen_debug(s, s->pc_start - s->cs_base); break; #endif case 0xfa: /* cli */ @@ -7200,7 +7199,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_exception(s, EXCP0D_GPF); } else { gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); if (b & 2) { gen_helper_rdmsr(cpu_env); } else { @@ -7210,7 +7209,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x131: /* rdtsc */ gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); } @@ -7222,7 +7221,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; case 0x133: /* rdpmc */ gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_rdpmc(cpu_env); break; case 0x134: /* sysenter */ @@ -7251,8 +7250,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x105: /* syscall */ /* XXX: is it usable in real mode ? */ gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); - gen_helper_syscall(cpu_env, tcg_const_i32(s->pc - pc_start)); + gen_jmp_im(s, s->pc_start - s->cs_base); + gen_helper_syscall(cpu_env, tcg_const_i32(s->pc - s->pc_start)); /* TF handling for the syscall insn is different. The TF bit is c= hecked after the syscall insn completes. This allows #DB to not be generated after one has entered CPL0 if TF is set in FMASK. */ @@ -7277,7 +7276,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) #endif case 0x1a2: /* cpuid */ gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_cpuid(cpu_env); break; case 0xf4: /* hlt */ @@ -7285,8 +7284,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_exception(s, EXCP0D_GPF); } else { gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); - gen_helper_hlt(cpu_env, tcg_const_i32(s->pc - pc_start)); + gen_jmp_im(s, s->pc_start - s->cs_base); + gen_helper_hlt(cpu_env, tcg_const_i32(s->pc - s->pc_start)); s->base.is_jmp =3D DISAS_NORETURN; } break; @@ -7298,7 +7297,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0: /* sldt */ if (!s->pe || s->vm86) goto illegal_op; - gen_svm_check_intercept(s, pc_start, SVM_EXIT_LDTR_READ); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_LDTR_READ); tcg_gen_ld32u_tl(s->T0, cpu_env, offsetof(CPUX86State, ldt.selector)); ot =3D mod =3D=3D 3 ? s->dflag : MO_16; @@ -7310,7 +7309,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->cpl !=3D 0) { gen_exception(s, EXCP0D_GPF); } else { - gen_svm_check_intercept(s, pc_start, SVM_EXIT_LDTR_WRITE); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_LDTR_WRIT= E); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); gen_helper_lldt(cpu_env, s->tmp2_i32); @@ -7319,7 +7318,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 1: /* str */ if (!s->pe || s->vm86) goto illegal_op; - gen_svm_check_intercept(s, pc_start, SVM_EXIT_TR_READ); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_TR_READ); tcg_gen_ld32u_tl(s->T0, cpu_env, offsetof(CPUX86State, tr.selector)); ot =3D mod =3D=3D 3 ? s->dflag : MO_16; @@ -7331,7 +7330,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->cpl !=3D 0) { gen_exception(s, EXCP0D_GPF); } else { - gen_svm_check_intercept(s, pc_start, SVM_EXIT_TR_WRITE); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_TR_WRITE); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); gen_helper_ltr(cpu_env, s->tmp2_i32); @@ -7359,7 +7358,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) modrm =3D x86_ldub_code(env, s); switch (modrm) { CASE_MODRM_MEM_OP(0): /* sgdt */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_GDTR_READ); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_GDTR_READ); gen_lea_modrm(env, s, modrm); tcg_gen_ld32u_tl(s->T0, cpu_env, offsetof(CPUX86State, gdt.limit)); @@ -7377,7 +7376,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); tcg_gen_mov_tl(s->A0, cpu_regs[R_EAX]); gen_extu(s->aflag, s->A0); gen_add_A0_ds_seg(s); @@ -7389,8 +7388,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); - gen_helper_mwait(cpu_env, tcg_const_i32(s->pc - pc_start)); + gen_jmp_im(s, s->pc_start - s->cs_base); + gen_helper_mwait(cpu_env, tcg_const_i32(s->pc - s->pc_start)); gen_eob(s); break; =20 @@ -7415,7 +7414,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; =20 CASE_MODRM_MEM_OP(1): /* sidt */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_IDTR_READ); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_IDTR_READ); gen_lea_modrm(env, s, modrm); tcg_gen_ld32u_tl(s->T0, cpu_env, offsetof(CPUX86State, idt.lim= it)); gen_op_st_v(s, MO_16, s->T0, s->A0); @@ -7466,9 +7465,9 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_vmrun(cpu_env, tcg_const_i32(s->aflag - 1), - tcg_const_i32(s->pc - pc_start)); + tcg_const_i32(s->pc - s->pc_start)); tcg_gen_exit_tb(NULL, 0); s->base.is_jmp =3D DISAS_NORETURN; break; @@ -7478,7 +7477,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_vmmcall(cpu_env); break; =20 @@ -7491,7 +7490,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_vmload(cpu_env, tcg_const_i32(s->aflag - 1)); break; =20 @@ -7504,7 +7503,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_vmsave(cpu_env, tcg_const_i32(s->aflag - 1)); break; =20 @@ -7533,7 +7532,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_clgi(cpu_env); break; =20 @@ -7544,7 +7543,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_skinit(cpu_env); break; =20 @@ -7557,7 +7556,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_helper_invlpga(cpu_env, tcg_const_i32(s->aflag - 1)); break; =20 @@ -7566,7 +7565,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_exception(s, EXCP0D_GPF); break; } - gen_svm_check_intercept(s, pc_start, SVM_EXIT_GDTR_WRITE); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_GDTR_WRITE); gen_lea_modrm(env, s, modrm); gen_op_ld_v(s, MO_16, s->T1, s->A0); gen_add_A0_im(s, 2); @@ -7583,7 +7582,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_exception(s, EXCP0D_GPF); break; } - gen_svm_check_intercept(s, pc_start, SVM_EXIT_IDTR_WRITE); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_IDTR_WRITE); gen_lea_modrm(env, s, modrm); gen_op_ld_v(s, MO_16, s->T1, s->A0); gen_add_A0_im(s, 2); @@ -7596,7 +7595,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; =20 CASE_MODRM_OP(4): /* smsw */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_READ_CR0); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_READ_CR0); tcg_gen_ld_tl(s->T0, cpu_env, offsetof(CPUX86State, cr[0])); if (CODE64(s)) { mod =3D (modrm >> 6) & 3; @@ -7628,7 +7627,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_exception(s, EXCP0D_GPF); break; } - gen_svm_check_intercept(s, pc_start, SVM_EXIT_WRITE_CR0); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_WRITE_CR0); gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0); gen_helper_lmsw(cpu_env, s->T0); gen_jmp_im(s, s->pc - s->cs_base); @@ -7641,7 +7640,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) break; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); gen_lea_modrm(env, s, modrm); gen_helper_invlpg(cpu_env, s->A0); gen_jmp_im(s, s->pc - s->cs_base); @@ -7670,7 +7669,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) goto illegal_op; } gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); } @@ -7691,7 +7690,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->cpl !=3D 0) { gen_exception(s, EXCP0D_GPF); } else { - gen_svm_check_intercept(s, pc_start, (b & 2) ? SVM_EXIT_INVD := SVM_EXIT_WBINVD); + gen_svm_check_intercept(s, s->pc_start, (b & 2) ? SVM_EXIT_INV= D : SVM_EXIT_WBINVD); /* nothing to do */ } break; @@ -8038,7 +8037,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 4: case 8: gen_update_cc_op(s); - gen_jmp_im(s, pc_start - s->cs_base); + gen_jmp_im(s, s->pc_start - s->cs_base); if (b & 2) { if (tb_cflags(s->base.tb) & CF_USE_ICOUNT) { gen_io_start(); @@ -8088,14 +8087,14 @@ static target_ulong disas_insn(DisasContext *s, CPU= State *cpu) goto illegal_op; } if (b & 2) { - gen_svm_check_intercept(s, pc_start, SVM_EXIT_WRITE_DR0 + = reg); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_WRITE_DR0= + reg); gen_op_mov_v_reg(s, ot, s->T0, rm); tcg_gen_movi_i32(s->tmp2_i32, reg); gen_helper_set_dr(cpu_env, s->tmp2_i32, s->T0); gen_jmp_im(s, s->pc - s->cs_base); gen_eob(s); } else { - gen_svm_check_intercept(s, pc_start, SVM_EXIT_READ_DR0 + r= eg); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_READ_DR0 = + reg); tcg_gen_movi_i32(s->tmp2_i32, reg); gen_helper_get_dr(s->T0, cpu_env, s->tmp2_i32); gen_op_mov_reg_v(s, ot, rm, s->T0); @@ -8106,7 +8105,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) if (s->cpl !=3D 0) { gen_exception(s, EXCP0D_GPF); } else { - gen_svm_check_intercept(s, pc_start, SVM_EXIT_WRITE_CR0); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_WRITE_CR0); gen_helper_clts(cpu_env); /* abort block because static cpu state changed */ gen_jmp_im(s, s->pc - s->cs_base); @@ -8332,7 +8331,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) gen_nop_modrm(env, s, modrm); break; case 0x1aa: /* rsm */ - gen_svm_check_intercept(s, pc_start, SVM_EXIT_RSM); + gen_svm_check_intercept(s, s->pc_start, SVM_EXIT_RSM); if (!(s->flags & HF_SMM_MASK)) goto illegal_op; gen_update_cc_op(s); --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835460; cv=none; d=zoho.com; s=zohoarc; b=YylW8RbWxIcoaQ6/Jl3neLB3llnSZtuunFiBwFVsoXzF/WQ/PSrrDOafVDfy1T14VXoeh73i62jbGuoZcaIR8i4e+MESIC4Q1Rdm9iXnqO83RaHxqHCxoABY53qUSsO57KWJa0lGEXYg1X3JWbzOhHTmop8vAgjnbM9gn7LL3+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835460; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=BWSlg2XWPB5KNiph56wA0+SaeyPUczXhg2Xv+22oFtY=; b=agRM2MaJ4+cETlMAhRH/mLjvyKE4fhBQnD0C7B97561CUFbF5FkRC2ZQQEJ/W/iFmpoQWRiVvR/fZOTGywGdXQ2P1wOTbkjx1/ct+b7gv+XsbMYDTlAidlYhf7dfP9YmL185BJRJ+VJ331XXuI93VvrtZ5RafdToT/lPC3eV2FI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15658354609241003.6536060923601; Wed, 14 Aug 2019 19:17:40 -0700 (PDT) Received: from localhost ([::1]:37410 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5KY-0006MF-Oj for importer@patchew.org; Wed, 14 Aug 2019 22:17:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46647) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DH-0005x6-Q9 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DG-0008Gu-IS for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:03 -0400 Received: from mail-yb1-xb43.google.com ([2607:f8b0:4864:20::b43]:44674) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DG-0008Ge-Dr for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:02 -0400 Received: by mail-yb1-xb43.google.com with SMTP id y21so390995ybi.11 for ; Wed, 14 Aug 2019 19:10:02 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BWSlg2XWPB5KNiph56wA0+SaeyPUczXhg2Xv+22oFtY=; b=dfpkyiMWtkCg/fE5DbKa65sf9ecrbEg9OmZM3+hEdam7y/hkneYRXMAMDVr6wfj/lN ViPpOXk5CJD7bCeZXHxy/twqfkozOIUCCtHcVEPgsg34we2itkAe7tmkKDt1eqMIysxs mb6BliU8w3ajXgeEjtGjdXqE6Vx7Jk5Suo+b5IHP8iyQrgQvRpzUwBnFdVFu/YGp3yeq Y+kRTbkCvBvyQZNLmj7nsCKLWKDGO+Or9xyKAhsc0KVtuEntEQEhGqfz2pKt9fdPwvEW 5eMazjbUAs4Q7hQEyydQ+UGE8BubEMB96dEncmwdpX26+B5lsUTDT+UmgPNWKwy4gGHz oW/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BWSlg2XWPB5KNiph56wA0+SaeyPUczXhg2Xv+22oFtY=; b=NA0ivrspCd07Gmz01DcVqbhyastaLj8I5lrh6pjW7FOtshb+5J3FculAjjIpjGvSY3 zwGVQ6D2s5Cdb9uQ0IV/T2qNXMvoE5LMXTuRBWeCM5aN6ZUzFsw8r2vWWqAOz/xlaiz2 JW7E42Uwv9VEgICwjB/q7773I6NWvGh5bRqYicnnIrW/5H0/wE0Y9FWO3s7wYjTZbfNZ i22H6AT2YEv7aqzXN75vGG/E0vJq89hp3/dw3oVXkmV5AS0lI9tkgV3b81E9qnqY9IE7 z0STA4vFOqTxNKM4VMURlSSuDKOL9R4bbHKqiiSrycRFU1bGb/jrsVCJC1mm9340US1Z 7u3w== X-Gm-Message-State: APjAAAVCp9lkNc5wmaYzfZd++R8keH72D6bUzKL4ueySAAehG4Z5vmdU 6aN3lu46DoSEf5LgVLroQ3KRIrZs X-Google-Smtp-Source: APXvYqxGvSNCenwBvsYGq/FTMtLTQ96oaC0D/tkhrVh3eqZnYKiIm2000z0uw02zP7VpPkyK9vszEw== X-Received: by 2002:a25:6302:: with SMTP id x2mr2049397ybb.6.1565835001834; Wed, 14 Aug 2019 19:10:01 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:50 -0400 Message-Id: <20190815020928.9679-9-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b43 Subject: [Qemu-devel] [RFC PATCH v3 08/46] target/i386: make variable b1 const X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The variable b1 does not change value once assigned. Make this fact explicit by marking it const. Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index b1ba2fc3e5..8bf39b73c4 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -3042,7 +3042,7 @@ static const struct SSEOpHelper_eppi sse_op_table7[25= 6] =3D { =20 static void gen_sse(CPUX86State *env, DisasContext *s, int b) { - int b1, op1_offset, op2_offset, is_xmm, val; + int op1_offset, op2_offset, is_xmm, val; int modrm, mod, rm, reg; SSEFunc_0_epp sse_fn_epp; SSEFunc_0_eppi sse_fn_eppi; @@ -3051,14 +3051,11 @@ static void gen_sse(CPUX86State *env, DisasContext = *s, int b) TCGMemOp ot; =20 b &=3D 0xff; - if (s->prefix & PREFIX_DATA) - b1 =3D 1; - else if (s->prefix & PREFIX_REPZ) - b1 =3D 2; - else if (s->prefix & PREFIX_REPNZ) - b1 =3D 3; - else - b1 =3D 0; + const int b1 =3D + s->prefix & PREFIX_DATA ? 1 + : s->prefix & PREFIX_REPZ ? 2 + : s->prefix & PREFIX_REPNZ ? 3 + : 0; sse_fn_epp =3D sse_op_table1[b][b1]; if (!sse_fn_epp) { goto unknown_op; --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835660; cv=none; d=zoho.com; s=zohoarc; b=lTmgmweLwefXWOGriw/SH356db1rNeva42BtE4QG4yHTSFB+W+eR+Hr5ehFMBlhoMV6vohV4W/Z6k3d6+yRPNnfwb/i6fXvxB0v/Q9etghp6274Vt5wGJTkWvNH6xA8tq1T2r6gzTWjpF73qQKkQvQ3QpIfd0R6svfhhyo7dxY8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835660; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=4CK+/tqFumu5cqD2bCvSyCvaayre0ms7vwE+gEz3afc=; b=HPz6yNf0O9ovyzIDDHB2WVdJPJLJj6bZV5CmiDl32QnrWFgCh5WvkNPBIFfWvlAWdSSUeuBDo68AKPMLf1YporZQiaQ9E/t5dz4HSeRSkZDjH/o4rtVa0G/2RVPUAmjEeY5rMDgnEABaZ/NhgshEX7lMb8eNTw0aZLfwC4wmY6A= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835660057248.54112966821333; Wed, 14 Aug 2019 19:21:00 -0700 (PDT) Received: from localhost ([::1]:37434 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Nq-0001g3-Bl for importer@patchew.org; Wed, 14 Aug 2019 22:20:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46664) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DI-0005ya-Mn for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DH-0008HV-Cr for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:04 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:37210) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DH-0008HA-8h for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:03 -0400 Received: by mail-yw1-xc43.google.com with SMTP id u141so299416ywe.4 for ; Wed, 14 Aug 2019 19:10:03 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4CK+/tqFumu5cqD2bCvSyCvaayre0ms7vwE+gEz3afc=; b=bUVVcO4BbhajbYsOArvKeLcSUIANzCUfg+z360t/iFZ2u/lr6eFBInBIs5ujnLBaZ2 at0fZywJ+RyYRDEkPzRz+BCHcEW9T9qyGYqrvTwZ26lnLClOTFZ/Gve0pf5UUsXpdzd8 4UYAS90q1VJAMTs7v6XRUFs21gp/uY37It8D513jjZ03Z5MwXBhelbqMBDTDUXIEKTjY n8ableGWHLPDCXVjrHROgnGrVRHZ/VinpVJlj8zrxqugKMQS4767+yR/r0Cce5e1UPh/ He8WtEwOEFpCbEYiFDFF1YansmdJYwv7jX8PnGVMYCHT2bbQXlc0jaP9jiO/feWa3Ghx wAQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4CK+/tqFumu5cqD2bCvSyCvaayre0ms7vwE+gEz3afc=; b=tN/F8jDtphe7Mg6WSqhP4leRz3bzwr20dEt18/tiHowOFWHStkyyjmDdiN08lqy53U vWRhEBn4kbl/k6050i0WzJM3GPB4fUkQgRbALowIAmLYJ0bUgtqY77KWLDJr0TkgZSts aSQ3g7P5odxXB4ARWFUxY1CnUkY3MRPWDpWMBDMQQX//sQaCT0K7pQWh4wcmGTck1HPM WmSXatwZ8UFQoyilL2zSwL5gSppWG6t8o3mb1slU/bPmy0CB7CYYvRQ+NERbcPQDzjxX 9jzwmakWHlj+AKxh0+2SKnZRrxL3zs303sndgvMUvmkzYBSYyJw1w630uCjw0FO9xLtz OI/w== X-Gm-Message-State: APjAAAUruU05Bo/6TjsuEDWL/q8LpYxxCRao62ujeNjZhnu7YBnxy/LO ZlTJr0mIX/gjme/6vwqsbgiFu6ck X-Google-Smtp-Source: APXvYqz/eH5YQG0BoT5m6syGo9Nmwaa7ClZTRTjE7VqncjOol9+wF3e3sIGnpMwjqQX1OkyKbvuvJg== X-Received: by 2002:a81:aa50:: with SMTP id z16mr1524522ywk.278.1565835002571; Wed, 14 Aug 2019 19:10:02 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:51 -0400 Message-Id: <20190815020928.9679-10-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 09/46] target/i386: make variable is_xmm const X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The variable is_xmm does not change value after assignment, so make this fact explicit by marking it const. Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index 8bf39b73c4..c5ec309fe2 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -3042,7 +3042,7 @@ static const struct SSEOpHelper_eppi sse_op_table7[25= 6] =3D { =20 static void gen_sse(CPUX86State *env, DisasContext *s, int b) { - int op1_offset, op2_offset, is_xmm, val; + int op1_offset, op2_offset, val; int modrm, mod, rm, reg; SSEFunc_0_epp sse_fn_epp; SSEFunc_0_eppi sse_fn_eppi; @@ -3056,20 +3056,15 @@ static void gen_sse(CPUX86State *env, DisasContext = *s, int b) : s->prefix & PREFIX_REPZ ? 2 : s->prefix & PREFIX_REPNZ ? 3 : 0; + const int is_xmm =3D + (0x10 <=3D b && b <=3D 0x5f) + || b =3D=3D 0xc6 + || b =3D=3D 0xc2 + || !!b1; sse_fn_epp =3D sse_op_table1[b][b1]; if (!sse_fn_epp) { goto unknown_op; } - if ((b <=3D 0x5f && b >=3D 0x10) || b =3D=3D 0xc6 || b =3D=3D 0xc2) { - is_xmm =3D 1; - } else { - if (b1 =3D=3D 0) { - /* MMX case */ - is_xmm =3D 0; - } else { - is_xmm =3D 1; - } - } /* simple MMX/SSE operation */ if (s->flags & HF_TS_MASK) { gen_exception(s, EXCP07_PREX); --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835127; cv=none; d=zoho.com; s=zohoarc; b=YYU8nOmJUiLAc/PcTKYBDs78ZpjqTzhJGd0I2Ubfwa8FhrNOY5QXRBbA16vTlQhUKPj+B6MkcZEHI2cGLbw7b1kWZQOYn0nNt43vkU2ppqjpbrZ2lH92uObOLpeESWiR60kzM6ptnX2fmiBhLLq+qioSE8UEtCWYD11+uEQGOP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835127; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=UnCpLXb0Tm7zqYonWzBKX7Cm2ohAULA3NbEvcZesBtY=; b=iJrMlbyBJ8FXyhlZVtex0vGCkdqGK1VKT8jsKSo4GoyUNx4Z6w0/A2rQvZVVQt3yE+wc7TfKwsL4Q4TFYSIB5/35e9Pp6JFL442jUUBtvfPT/0gjAiHall7mbB03uErkLFPrYb0yS9xYjydO5XOmyYyeBS84liSeV+mzDynCl48= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835127924799.0879372949637; Wed, 14 Aug 2019 19:12:07 -0700 (PDT) Received: from localhost ([::1]:37354 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5FG-0007zq-6Y for importer@patchew.org; Wed, 14 Aug 2019 22:12:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46676) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DJ-0005zV-7N for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DI-0008IF-5y for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:05 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:46813) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DI-0008I3-1z for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:04 -0400 Received: by mail-yb1-xb42.google.com with SMTP id x10so387950ybs.13 for ; Wed, 14 Aug 2019 19:10:04 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UnCpLXb0Tm7zqYonWzBKX7Cm2ohAULA3NbEvcZesBtY=; b=cmlfkw+UxmYB1eg4pqaJTwt1AQnN36XCNcOlyEaACq/B0RtErY0DXwfT1W8rcwgtAF TrsCzp25aZNj6nuMChk71L9uyETY6mH8lNNzujcJv8MBwTz6TanxYX2QVXSFIpepexl5 FHrPbInMPu4SK25Ola+znUBiTxgq+HBFNB+vLZQJhdIxdvtnfYUsGatHKj6F7Xdcphvk Pi8WYh2f893nHs3+YvcTSxS99lA8FfkbAZEnMe4iTvZl26GPr5+BBWfO/ZokBRGvH22H pHdp+XXUzGsbCaXQ1jqeBFy+HaM0fvZRQ++l7vLG74OIchZlGT+5+5HHVV9ipEwuG3xr CIIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UnCpLXb0Tm7zqYonWzBKX7Cm2ohAULA3NbEvcZesBtY=; b=dmcxPGu5GOPPdDyhjzLKYj8KlAvt2YJiFPpwJ7unu7gUTnLcRtRHWvHFfY/JpGZ5Hd APJY6Fl3l+cGXmlthH8ZvK9ib09yIkthdVbvdmbaG43kqORgXvhIZeCGLjv+/6/eXE4s Gv9lIfUdNjL0jZVnOdtSJki09zs28o/lWdgu+jnyNqlurkOkUWUAeon9G/Rb5zros/9+ x5mQGOPG6kbj2rja0lIxUIRHWnu8yVihZrUNW4pkHwRBWQKfWeLSbbmQyaBcpksYwvH4 4YXoAbGxbD59CUFJ3xRzcRo7oUAcd66sU+foj1sjPTkpzU0J581H9X8ujNt4OU1mSCH+ /plQ== X-Gm-Message-State: APjAAAXS5DdE1R5Jf8MQ5ZaUMWWKmfZ2WMjBEYl3Voh+U+zLgiLO62IN iJh4JhxMK2nrPSyLICTGQtsmUsc+ X-Google-Smtp-Source: APXvYqw1nJML7gWX3bDJQiG/VM9+Xd81sza3z6nUwPvGjRpiW5OXuN0j9+xSPvSna1S2a8yCBZAnZg== X-Received: by 2002:a25:24e:: with SMTP id 75mr1832900ybc.357.1565835003408; Wed, 14 Aug 2019 19:10:03 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:52 -0400 Message-Id: <20190815020928.9679-11-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b42 Subject: [Qemu-devel] [RFC PATCH v3 10/46] target/i386: add vector register file alignment constraints X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" gvec operations require that all vectors be aligned on 16-byte boundary; make sure the MM/XMM/YMM/ZMM register file is aligned as neccessary. Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/cpu.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 8b3dc5533e..cb407b86ba 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1199,9 +1199,9 @@ typedef struct CPUX86State { float_status mmx_status; /* for 3DNow! float ops */ float_status sse_status; uint32_t mxcsr; - ZMMReg xmm_regs[CPU_NB_REGS =3D=3D 8 ? 8 : 32]; - ZMMReg xmm_t0; - MMXReg mmx_t0; + ZMMReg xmm_regs[CPU_NB_REGS =3D=3D 8 ? 8 : 32] QEMU_ALIGNED(16); + ZMMReg xmm_t0 QEMU_ALIGNED(16); + MMXReg mmx_t0 QEMU_ALIGNED(8); =20 XMMReg ymmh_regs[CPU_NB_REGS]; =20 --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835698; cv=none; d=zoho.com; s=zohoarc; b=Lg3z0L04v48OQQI6egY7Ys+U2pPbc5eslTdEvRDorDEtPYJvBg44Nu4fcA4tRi7TlSooG7C4GsaYIp39r0y0i33GvxJLbAAEbttjAVL9MecAeSwFDHwmDS2AgZy8K7n4Km7D7KONR0bf6mM4z4IlEgXouiebC6yEJ18W2af1Qp8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835698; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=cyegfqQ66vBczNAfRKb53VrlCHN8G52UPrZRGksak8s=; b=B7T7YQ1+6IBpLh8ejCRXg9LwW2iCNEupSoPGTxaeIs2aZAoIgUDayIZud7lQ5VRtupvVS2UZcaCbqQM0ISmW3JLG9lOh8OAvbTb7ZLqhLGtgAykaCl4JFm1qm9Gd8EhoRBq/bBc09S/Ut1YKtP/hyjYG/UuA2rih79xvOLRqr70= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835698964548.5440262176503; Wed, 14 Aug 2019 19:21:38 -0700 (PDT) Received: from localhost ([::1]:37440 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5OT-0002SA-4D for importer@patchew.org; Wed, 14 Aug 2019 22:21:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46705) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DK-00061S-JC for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DJ-0008JA-F3 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:06 -0400 Received: from mail-yb1-xb44.google.com ([2607:f8b0:4864:20::b44]:34784) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DJ-0008Ir-Av for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:05 -0400 Received: by mail-yb1-xb44.google.com with SMTP id q5so410892ybp.1 for ; Wed, 14 Aug 2019 19:10:05 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cyegfqQ66vBczNAfRKb53VrlCHN8G52UPrZRGksak8s=; b=Ax3FMlcQ3g0lEpaB+kMd1sXkssslXecIEK/Oe99/4mQT77YFSXD7GVRRIIFWheSgfX Pw/A08TGyRJybPRWGQzx1KbUohOeRZlbA134gJFLa5+s81KNltYgBIgaH5vaH459aykm MpiFaCNXoqlKSAEaAufif7sdsGJAIXiSpRG+IhJx2w4fIBqPrnQ1DFwbyMEue3f7GtDq PxyywUgzHo5C7s24U5Hulj1Q/gThyIIWz221OtMkq9sK8gBCx9w1+e3pse+VYLhh/j5C u6LqTtaLfbytgbzf+8d92WtmnyQEE5Gpyfl4hwVxaAkT3bEXo2Wz1FwgO3R2y9Jdg+sh qG6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cyegfqQ66vBczNAfRKb53VrlCHN8G52UPrZRGksak8s=; b=p8zhQnom/PbHcqiQrXMzzgjxAW4PE/KeC546C2JApf3E7eaBRwAgip+BnsmlTWnAQ2 EeJoopqxzkusdPlR7Jwb7g9+fk+ay2bI8clV6jS4+9fYsBxmTMBYsnwKIgrUy5su2U7c YobSQZGjKUJiXfI5cgS5TPzm2UKQ4b9Ux9QHJFXke12jJprFb4MyUSLYD8wKRQdeVZC7 zgo8Nrk93Cno2ZwV2AC25BgdzAa3jQ8sXtgSVGY8TlL/d9oPE0n6e5uWQ0GqMnaCN1li 81fNiYdaOi/FE1wM06VACPFEHRGqtDy50VVwKwuhcLO/hDtCGQ/a/Pqnj0BjtPVDBm8f QcuQ== X-Gm-Message-State: APjAAAXsuMdgnznzg0g6q2dFRyCcBitkYhoIEZVlzAtdeWPw6cTcm1la JaOfhTuZiRNfAcj9UB++2YaUzSy5 X-Google-Smtp-Source: APXvYqxdcei3XxSvO+ysY7mDmf+cycYP+OEY0v6vvLfK/C9RDhHYbwGYWDB+56lj149TXvrFQN0x1Q== X-Received: by 2002:a25:8285:: with SMTP id r5mr1886591ybk.268.1565835004638; Wed, 14 Aug 2019 19:10:04 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:53 -0400 Message-Id: <20190815020928.9679-12-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b44 Subject: [Qemu-devel] [RFC PATCH v3 11/46] target/i386: introduce gen_(ld, st)d_env_A0 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Similar in spirit to the already present gen_(ld,st)(q,o)_env_A0, it will prove useful in later commits for smaller-sized vector loads. Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index c5ec309fe2..258351fce3 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -2652,6 +2652,18 @@ static void gen_jmp(DisasContext *s, target_ulong ei= p) gen_jmp_tb(s, eip, 0); } =20 +static inline void gen_ldd_env_A0(DisasContext *s, int offset) +{ + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, s->mem_index, MO_LEUL); + tcg_gen_st_i32(s->tmp2_i32, cpu_env, offset); +} + +static inline void gen_std_env_A0(DisasContext *s, int offset) +{ + tcg_gen_ld_i32(s->tmp2_i32, cpu_env, offset); + tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, s->mem_index, MO_LEUL); +} + static inline void gen_ldq_env_A0(DisasContext *s, int offset) { tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEQ); --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835268; cv=none; d=zoho.com; s=zohoarc; b=fHczjQXUr+O1ywN4cwg0zZJvnNb+P27vMpIgMRS6lsSgt/tqtliqZZ5KEu1mcFsCLTbSILhnT6Swrcco2MR6Ec9jvJnsSDt0wCkRmMA/b7sElCi7+Xs672yghXvo4hbX2gmd5TZLead42y6R8XX2MWTT/kGoXESnu281NQDWxxc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835268; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=CUdq+ci8qtMI41tslb9dsvKvnSE5fapv8uANUHJ6jPI=; b=nYSLPe+0DQXNTv68wSbsF2YuBGGeIuW4vOVCqvFufWy3r/WRtY0w7+9uwa67LpGeS+dTzn6h3FLA6cVOA0rqIqwI5ji3TRUGtlWsxwLE+fLbjfoaNekxT+eYyRO+FoC2zX3i6XvmfwCaUDgx1rdr66OfoLH9gW5x4n2quzkfg0Q= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835268584437.69752243591654; Wed, 14 Aug 2019 19:14:28 -0700 (PDT) Received: from localhost ([::1]:37378 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5HW-00033b-Lc for importer@patchew.org; Wed, 14 Aug 2019 22:14:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46721) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DL-00062b-DL for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DK-0008Jk-2F for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:07 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:45766) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DJ-0008JZ-UK for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:06 -0400 Received: by mail-yw1-xc44.google.com with SMTP id n69so283280ywd.12 for ; Wed, 14 Aug 2019 19:10:05 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CUdq+ci8qtMI41tslb9dsvKvnSE5fapv8uANUHJ6jPI=; b=Im6dYTWZEpyaRqYVMjOVZgY2wklNfEWqdNCUgAbJuImjXq881Fpp/z6cp2X4zMtbGQ U5C5/kMl1o7w5nUhVjnhyfQNf/SoZ5lWS4FERKAu5IlmHph0ZJGNVNn/42l4bxuS8LKe Kd/K0bL2g890Wy7Mq1msHDobTKwiScI+QeRcvm9S+spM9J7vN7bW9CVXyM3085/OmxDI 4ZCKscJHpvw6jh54oWEdWmVjnq0Y54MWmp4dfNSV0V+PXzutL4uauEEjg0gxGI0tlten KQCxshx0COtyjVxvCR29+PANC7jgxkHUydLABTNO/Ab8pUIcQ8/N8JCz5gzbhwVPBqPP bvRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CUdq+ci8qtMI41tslb9dsvKvnSE5fapv8uANUHJ6jPI=; b=BWRmXCY4phg1vN8+O3LquvXoMC2T0A5O07pVHBp7+w2f0HkFrQDdxUoTUCDmMKl6ro /V+EsWdOTLq777tLlGKR3gUdWEG/yLLqakcfUBMeH3IPj8mvV5ZlbC8P3mzW2zmXzzVy E8xQ6kMcjBO6eHy98c9fb3TistUefO4i3fDVWg7flgGqI7bl0G/bkp8ECWXa8v4SVkii dYVMoZzdwDgDedpqyCRoYL1hRJWgj8SoOl2jeCBiSdbSe2vvqhy10fqu+sxUyiAsG3TB xSF7wKJdXrCkUywvffziqU81zSMCtS1OzFENO118dhU01TWi4fbYdCtdVj0YeXgpbwxp xcgA== X-Gm-Message-State: APjAAAXVyZ6+p4orVARcR2d72A64jkVaRHQKOVYUOKPKAOTrSaVy4Gdw h7rrZQSQlpiJ0d6BvIxJDMZMl82e X-Google-Smtp-Source: APXvYqyAR8xWLv59dwwUaO9m1luSWIkeIuZNLHMqOS+jhpGprrwscXxTqITkcvE+tt4+k3cSP5mCuQ== X-Received: by 2002:a81:79d2:: with SMTP id u201mr1466682ywc.457.1565835005347; Wed, 14 Aug 2019 19:10:05 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:54 -0400 Message-Id: <20190815020928.9679-13-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c44 Subject: [Qemu-devel] [RFC PATCH v3 12/46] target/i386: introduce gen_sse_ng X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This function serves as the point-of-intercept for all newly implemented instructions. If no new implementation exists, fall back to gen_sse. Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index 258351fce3..fdc7cb0054 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4489,6 +4489,33 @@ static void gen_sse(CPUX86State *env, DisasContext *= s, int b) } } =20 +static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) +{ + enum { + P_NP =3D 0, + P_66 =3D 1 << (0 + 8), + P_F3 =3D 1 << (1 + 8), + P_F2 =3D 1 << (2 + 8), + W_0 =3D 0 << (3 + 8), + W_1 =3D 1 << (3 + 8), + M_NA =3D 0, + M_0F =3D 1 << (4 + 8), + }; + + switch ((b & 0xff) | M_0F + | (s->prefix & PREFIX_DATA ? P_66 : 0) + | (s->prefix & PREFIX_REPZ ? P_F3 : 0) + | (s->prefix & PREFIX_REPNZ ? P_F2 : 0) + | (REX_W(s) > 0 ? W_1 : W_0)) { + + default: + gen_sse(env, s, b); + return; + } + + g_assert_not_reached(); +} + /* convert one instruction. s->base.is_jmp is set if the translation must be stopped. Return the next pc value */ static target_ulong disas_insn(DisasContext *s, CPUState *cpu) @@ -8379,7 +8406,7 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) case 0x1c2: case 0x1c4 ... 0x1c6: case 0x1d0 ... 0x1fe: - gen_sse(env, s, b); + gen_sse_ng(env, s, b); break; default: goto unknown_op; --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835268; cv=none; d=zoho.com; s=zohoarc; b=QZzOvI7gxZVQGYdyH76Fsg3bV7lquacncFwuW4ormr33P3VPJQW/T4/x7IZtylGY/9qsJY3VvVHHDh0RJkyTsqFqXE2n/jb9yKXre35SdoMC/9Y8OGnx/8sXuu1i4DStH7NezYm1/+sQXcVCeqah15PRFzg2SX9NXPXyWSEd9z4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835268; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=8aF01SLckOj3fHneThtSLSdq9Zx3ryEqfOh/qRUz9m0=; b=euJ3QWidmYs6MTEFF22k+EKmWe8xH5VR+Qwogu6zV68QyPElpWzIgbU4EwjJjORPAkSHdZR7+mQxzrhnuudNLAyxi0asKRb0XrodZEo5pSqT8bIP3jj6v1DiPEpzu24NbnTD7H8X4nwBcH0893Yi7wD/cNWVr1BUlG7RVuTqyAQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835268735768.489195389923; Wed, 14 Aug 2019 19:14:28 -0700 (PDT) Received: from localhost ([::1]:37376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5HW-000310-SA for importer@patchew.org; Wed, 14 Aug 2019 22:14:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46730) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DM-00063g-5T for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DK-0008KH-Sl for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:08 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:38761) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DK-0008K1-Ns for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:06 -0400 Received: by mail-yw1-xc44.google.com with SMTP id f187so297256ywa.5 for ; Wed, 14 Aug 2019 19:10:06 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8aF01SLckOj3fHneThtSLSdq9Zx3ryEqfOh/qRUz9m0=; b=pCI/xOyBw0y12tr9rayCmTWHyfGtVlLnSTrbXRfUugmFqPDIqCF+5FYmuQNJ3uQFIh KarA4XYljcOKXs0wLhuqC4N4CKM119r797NG6T3vYxHu9TnRqjLqduD1EvUx9syNp9Wv gxa7RrrxA6V1UdI3hq+NtvoP01+3xjpzdleqVhHcS02Dh2dRE78AAELAMkWgode4+lAm /b/7+mplKA7X2bD2vRLdtH9aLMbQYKL3SZY+lUaWYrGzl+KUv77sHfZSxjTAbpzLLjxI K9DNDvpqW8iudhv6TrCYk3GWGQYmuXwodYOryN8hqbPtnuOUS0Y2dh/4AjT+3YasSKv8 2jFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8aF01SLckOj3fHneThtSLSdq9Zx3ryEqfOh/qRUz9m0=; b=jh2JhPLmqQaikY+ORUR++eXWES/TbcuPfwkRVhGM0HUL4/XggQRf3mJ8Ft2328YV2x P+tB8pXQnjqY0SfKFffpbkn46KH+Wf1Upc8FXJUnGqUpJMnjpDZQr7MaPX2fD24T8d7H LyIx8yQrsheqdUUBTWSfrnO69GYMpnfYPrfDd2ElmvWjsbEupOb+1SvtWaDCbVf3fzxy 9ONRrl8W1rO5Ufp7cyFNL7JVeSseqyiahs1SJUrXVHEJvT+CU+ah8/ufshw4CTBSiIPG 6lZfQdJemLcAqGPvCXrFByD1xHAYpsURmZrqQtRlwnObDU3UqubkNxfmK733cEpAnzjp eKxQ== X-Gm-Message-State: APjAAAXd1kpAke85vcBEpvgSOPxulnLsqb1m989etsAnbx7b7pAxvB9F QfS3+QB9eWjM9J2DSV1UlIODtF1X X-Google-Smtp-Source: APXvYqw/iPIWFdaClbSyGhf2E0JAvbexZE/yH2JcEONGUKWPKQuRZN/d+Ay52BQG3xDa/f/xGg5CFw== X-Received: by 2002:a0d:c044:: with SMTP id b65mr1559992ywd.273.1565835006114; Wed, 14 Aug 2019 19:10:06 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:55 -0400 Message-Id: <20190815020928.9679-14-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c44 Subject: [Qemu-devel] [RFC PATCH v3 13/46] target/i386: disable unused function warning temporarily X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Some functions added later are generated by preprocessor macros and end up being unused (e.g. not all operands can serve as a destination operand). Disable unused function warnings for the new code until I figure out how I want to solve this particular issue. Note: This changeset is intended for development only and shall not be included in the final patch series. Signed-off-by: Jan Bobek --- target/i386/translate.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index fdc7cb0054..e9741cd7f7 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4489,6 +4489,10 @@ static void gen_sse(CPUX86State *env, DisasContext *= s, int b) } } =20 +/* XXX TODO get rid of this eventually */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { @@ -4515,6 +4519,7 @@ static void gen_sse_ng(CPUX86State *env, DisasContext= *s, int b) =20 g_assert_not_reached(); } +#pragma GCC diagnostic pop =20 /* convert one instruction. s->base.is_jmp is set if the translation must be stopped. Return the next pc value */ --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835482; cv=none; d=zoho.com; s=zohoarc; b=fW7G5zZYeJf9uOrxdud/cXIT9EUY9h5r6ZbRssvqm7UPTluSdGNZZR5nCqa88osRubxQe8hHz69J2inenk8pombW1Z8xmfLUaFUTEuRvF/ZeBn2QYdz84CENqQGuioVdyM9THltMgnMUST407gMr/9oM1GjOaENUOemSTejgdko= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835482; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=kaNCwyHpMkNqwSgvSmZLjSKWRlicmlM9lWRJ1+7uU/s=; b=K0koMHAda5M7IOh+CcHAHxvJoGY1mgDn3KkWdZZ2gznedx4B9ApeC4bYGIFXaKzS6wKW45yxLAIDI6Ovn1YVr53sQdCBrCxOXAY/wNt5J4/EPmZZGW5+NKCe0ANiRKqHjf7FjA0ozSzARrXGtRo5wqOfAjdf8ylOyCiuT2aBwOI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835482970951.7011252700713; Wed, 14 Aug 2019 19:18:02 -0700 (PDT) Received: from localhost ([::1]:37412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Kw-0006fG-29 for importer@patchew.org; Wed, 14 Aug 2019 22:17:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46752) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DO-000641-8Z for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DM-0008LQ-F1 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:10 -0400 Received: from mail-yw1-xc41.google.com ([2607:f8b0:4864:20::c41]:38759) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DM-0008L2-7E for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:08 -0400 Received: by mail-yw1-xc41.google.com with SMTP id f187so297266ywa.5 for ; Wed, 14 Aug 2019 19:10:08 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kaNCwyHpMkNqwSgvSmZLjSKWRlicmlM9lWRJ1+7uU/s=; b=i18PKs9kAB+aesQk/ykKmHNkcijYR0HggrGlzPjb+F8SlNkNb3uie4EjTh604BFd/H zaAYJhD25d+Byz8LbivmmDWVn4bx3IulpsXLiJLt8xKvr+X90P0aRPzzXqLtRcQq4Gnt Ki4VmkCNOJCLh12qw3ySoW6Anm/oHybfwP2Rh2YX+GGHPoxmv1XkAMunpkukY3zv0NFR tmAISwofY0AhA6yYBsxIIeo4nU9dRkzddc+q5OeG6VKSGjn5ECn7QbhQc39hbm3yZnTv gS0j5tEAB6MKccHH61678NfUohbw6sPMrSEeZKoCQHG51h2D17ke4w5xJKRxRE6RGbnk Ug+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kaNCwyHpMkNqwSgvSmZLjSKWRlicmlM9lWRJ1+7uU/s=; b=UAVH0oMY5PRYSO8XPi1EMGH0jYcJpDGpNRdfALrew73ZzX7jWHumUKGJpcygheGEsM V1h8k89i28kAyt3o6tXnRDdrRYAIQtoucy7OMOTXdBA2m8Y5EgP7CyA2zzTuW3vKLzxx NFIBkhbKPAQpb2LrytcQLrGtjQ+pRd+NJb6ayVHvKRpwoPirgQGc6yYIk2xdeN3hohge TiE8+m3Wzwo/dLl1iJgWW+ie1PpKStQVjTQDlfdm987QvDsnfIzrlGdvrXNifX3JRl2r EbrG+GN7yEz5tKdE9s/PM7Whx7plPRzRQJ9eqa4XrQFmhsyI4/p4JNcCuljheVXzKczv SlFw== X-Gm-Message-State: APjAAAVfbAstsNkKxpke9GJXH4YcSCjWBY2kZ0gY1CbYYZ7pbAE/LD/6 6zPKtQ2NaxULhjkssW97qTThNelJ X-Google-Smtp-Source: APXvYqxlPh6VMLgXUn/k7xDuIJIEz9lLTjXo+8PRoBCHryw5NjVgH8u64+y0m4JIRaqRFVOLlsQOIg== X-Received: by 2002:a81:7dc3:: with SMTP id y186mr1557771ywc.223.1565835007594; Wed, 14 Aug 2019 19:10:07 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:56 -0400 Message-Id: <20190815020928.9679-15-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c41 Subject: [Qemu-devel] [RFC PATCH v3 14/46] target/i386: introduce mnemonic aliases for several gvec operations X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" It is helpful to introduce aliases for some general gvec operations as it makes a couple of instruction code generators simpler (added later). Reviewed-by: Richard Henderson Signed-off-by: Jan Bobek --- target/i386/translate.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index e9741cd7f7..6296a02991 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4493,6 +4493,13 @@ static void gen_sse(CPUX86State *env, DisasContext *= s, int b) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" =20 +#define tcg_gen_gvec_andn(vece, dofs, aofs, bofs, oprsz, maxsz) \ + tcg_gen_gvec_andc(vece, dofs, bofs, aofs, oprsz, maxsz) +#define tcg_gen_gvec_cmpeq(vece, dofs, aofs, bofs, oprsz, maxsz) \ + tcg_gen_gvec_cmp(TCG_COND_EQ, vece, dofs, aofs, bofs, oprsz, maxsz) +#define tcg_gen_gvec_cmpgt(vece, dofs, aofs, bofs, oprsz, maxsz) \ + tcg_gen_gvec_cmp(TCG_COND_GT, vece, dofs, aofs, bofs, oprsz, maxsz) + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835922; cv=none; d=zoho.com; s=zohoarc; b=JlKM/mx9wjg0HeXXGmzE0+kYAHTtmej1CugGT5rZAi8SPpu2H/AXYgNvIMfM+mnHYjzsBjt9AlRXl8OynRzUE3L0ECQRwYG9Bsi9NLmrl7DdFSVgAL3IeeMIJQ4XcWVMqQfRo7E8awvQ8++mFwwt0F94jroO/CGO3xL6sIBg0NA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835922; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=FGM8eT13pPvn1x4FTXreLbDofICNdY8w6Z3TGTQoeOg=; b=LfjubG343G4TuaD3pe1Njt4iBSy+sy9826NvaHe/5s5WLvIhH8Dl9bGJWk+vnx6INYiKHL3YQdwGx8qMapuPOZvsEd7pELVmaxA80xmbFWbkw5TRJ5YAiyR+7Q0UI2MMmTr08AW17WjgHsdRaHs+QwaNaQ599NLRSJofXg2FHRo= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835922893678.2041175299017; Wed, 14 Aug 2019 19:25:22 -0700 (PDT) Received: from localhost ([::1]:37476 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5S4-0007AO-SP for importer@patchew.org; Wed, 14 Aug 2019 22:25:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46753) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DO-000642-89 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DN-0008M6-40 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:10 -0400 Received: from mail-yw1-xc41.google.com ([2607:f8b0:4864:20::c41]:37209) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DM-0008Lc-WB for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:09 -0400 Received: by mail-yw1-xc41.google.com with SMTP id u141so299473ywe.4 for ; Wed, 14 Aug 2019 19:10:08 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FGM8eT13pPvn1x4FTXreLbDofICNdY8w6Z3TGTQoeOg=; b=VzVioL2CPY4MkLbj0A6n5toJsIfwtgeTuPU9tupBey8tzHrUagYXX8OY4lIciW/XQL LZRuMchMJi8x+BVravAIqtXbrgiW+g7uDu7cNN7iQY8AIZFQFRScEQh9bG+37U8Clszz zvNaF9QbIG0hf15QcSEE7PoHwVkt0ebeDbqUdMxFrm0TT7bCtku6wdjF64x+L0n5hWoM HfcH5Nh6DKvfhP3kjYMQ73UQnF5OZYczaHPmmuFTxZyIR5XL3AIdRipvlV42tP3dKTrc OFj6fclAIxRxBrEHFXAtJf3DLoHLlawc15/vkoY5eLE0dSFc9rmIDBi3jXtJ0sQuLDUH 4RNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FGM8eT13pPvn1x4FTXreLbDofICNdY8w6Z3TGTQoeOg=; b=rzaBT5YyULNz6drijE0TRwgk7yOxmB98SqROtq6YwpKXygBioTGQXCYAoQjQqZYA3y SARBW8DkpPXWeYPslEb59svHb0KLhBb4H1FXLfUHvg75mmQBaQXm/Qur9ydzlTnBzf9a 9nqBnfYe5GQlO9XM7rYR+eo4njinNu2p5By+RZS0/T0yZCFcj0i7zHD3qbIiX1y70OxG 0g+48BnbmYEfRlZtLPzI6+hyxpI3gzv7HHaScisxNaH+MfMSxCk0tu2m09eCTLlu2i+d /14PBoH3D6C9oABto0e5giRuUe5iaco3e7VG31k/TfmgbUP/mpOIvifNju4Q1iVwB0Ex fEFA== X-Gm-Message-State: APjAAAWXkglj0bisz60iDWhVEev/DhGvqJBRgMMta3e9+zBD2J3ZCGnR lDYLJJ8edrQm0lIKyHgQhjQ+StWM X-Google-Smtp-Source: APXvYqwJtwHKwj9CfQ6A0wXDRKvLyibzb5QuAxa31mdKAXTNaDia8Lsul0j+HRlaBL53ai0F1UqcdA== X-Received: by 2002:a81:a705:: with SMTP id e5mr1568738ywh.445.1565835008326; Wed, 14 Aug 2019 19:10:08 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:57 -0400 Message-Id: <20190815020928.9679-16-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c41 Subject: [Qemu-devel] [RFC PATCH v3 15/46] target/i386: introduce function ck_cpuid X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Introduce a helper function to take care of instruction CPUID checks. Signed-off-by: Jan Bobek --- target/i386/translate.c | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 6296a02991..0cffa2226b 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4500,6 +4500,54 @@ static void gen_sse(CPUX86State *env, DisasContext *= s, int b) #define tcg_gen_gvec_cmpgt(vece, dofs, aofs, bofs, oprsz, maxsz) \ tcg_gen_gvec_cmp(TCG_COND_GT, vece, dofs, aofs, bofs, oprsz, maxsz) =20 +typedef enum { + CK_CPUID_MMX =3D 1, + CK_CPUID_3DNOW, + CK_CPUID_SSE, + CK_CPUID_SSE2, + CK_CPUID_CLFLUSH, + CK_CPUID_SSE3, + CK_CPUID_SSSE3, + CK_CPUID_SSE4_1, + CK_CPUID_SSE4_2, + CK_CPUID_SSE4A, + CK_CPUID_AVX, + CK_CPUID_AVX2, +} CkCpuidFeat; + +static int ck_cpuid(CPUX86State *env, DisasContext *s, CkCpuidFeat feat) +{ + switch (feat) { + case CK_CPUID_MMX: + return !(s->cpuid_features & CPUID_MMX) + || !(s->cpuid_ext2_features & CPUID_EXT2_MMX); + case CK_CPUID_3DNOW: + return !(s->cpuid_ext2_features & CPUID_EXT2_3DNOW); + case CK_CPUID_SSE: + return !(s->cpuid_features & CPUID_SSE); + case CK_CPUID_SSE2: + return !(s->cpuid_features & CPUID_SSE2); + case CK_CPUID_CLFLUSH: + return !(s->cpuid_features & CPUID_CLFLUSH); + case CK_CPUID_SSE3: + return !(s->cpuid_ext_features & CPUID_EXT_SSE3); + case CK_CPUID_SSSE3: + return !(s->cpuid_ext_features & CPUID_EXT_SSSE3); + case CK_CPUID_SSE4_1: + return !(s->cpuid_ext_features & CPUID_EXT_SSE41); + case CK_CPUID_SSE4_2: + return !(s->cpuid_ext_features & CPUID_EXT_SSE42); + case CK_CPUID_SSE4A: + return !(s->cpuid_ext3_features & CPUID_EXT3_SSE4A); + case CK_CPUID_AVX: + return !(s->cpuid_ext_features & CPUID_EXT_AVX); + case CK_CPUID_AVX2: + return !(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_AVX2); + default: + g_assert_not_reached(); + } +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836199; cv=none; d=zoho.com; s=zohoarc; b=W0JtqDCEdNPWU1LFz+i0FGiq4J60QUUZ859t9fGUDmtiz1OZWTkTEAg53xOOrdbJnww0sr6u5BZ4YXIXztwkWAQ7Jzr+2vC8soGA4yDoEMzuhUXdDLrk4Kqzl1Yd3BHLr+JeMenuW+Si8aGxp4q1Yzykd9+slZDXuGsn4aD8Tp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836199; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=8wDdpNnOpBiBo+lSxDp9N9yHcPIqinmnQJDNUxxNJsk=; b=SVgyF0FcAxocP6dOkvZuzuZjP37lgM3Ox8BeA11sq5/L1vq/p7GJbihMCKDXUaQyArIYkzSO5VI04oLDCGjKvU7zpGLS1wNH5P6js7N9ah5wntVK0k1RBxmB75z11k7WwbP7n4Y3mf85/uWouuWza2T5koP3eYHdW4C4fdFZPhc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836199568663.2146704385505; Wed, 14 Aug 2019 19:29:59 -0700 (PDT) Received: from localhost ([::1]:37530 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5WR-0004E8-Mx for importer@patchew.org; Wed, 14 Aug 2019 22:29:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46782) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DQ-00066k-TO for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DP-0008NP-0M for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:12 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:45960) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DO-0008MY-SC for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:10 -0400 Received: by mail-yb1-xb41.google.com with SMTP id u32so388321ybi.12 for ; Wed, 14 Aug 2019 19:10:09 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8wDdpNnOpBiBo+lSxDp9N9yHcPIqinmnQJDNUxxNJsk=; b=B+LR7gzXiDcLruANd0sQMWx7C+AHdIynhqxVGnwz45WhMbi2dNlNga2mB0SAqpswDw P/vFZEKj/ctDH0MwwNpYzfWGOt3cDqnQAUWgYLkoKU40HqQuws2oRQ54+s1Gd3lTaniB 6DR+EGPqz/9vtu33MdUqT5Vc3h3POiLQooNLBcoIyz2rzLjlivWUfzJ/5F+KI1N6tmOL Hq0Ovy3kt26ADJ1OxqFG2DeB1ZFyjsv5Q6X6WKZOZJQ117RiIJDHPMJGwfjgQIusHBsL NNQlWZV0Lwzb6OOtx54pO5YLvwAAsXWjgny4p7V3B79OnoJg6LqgfXOvwF1rUWk6Iy/+ 3bfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8wDdpNnOpBiBo+lSxDp9N9yHcPIqinmnQJDNUxxNJsk=; b=Z6xsn4+8knUzGhfziEdYXCPALPMNs8rLNoinOMe0cEIbWYCHqQ29lWs4t9r7oRjorg pUph1t7qPmPV36pK3RIm59SyoVCXgnJC+P9iviUu2tgvQXlzHMngwho3MX2NYxIDxjLF URkh+2COOrRp6i9OLCU8xQJFOl/0xskLrEs+2AXiH6daf5ynDHw7d4mK76v3js3n6APj OJURxz+OAr64dY+uTvzc3OyoLohdws7xgV+WAeG/RGNZk1dKQ6/WLbVhKVjgzSd0SvRn 2d9mnI+k5nJ7LLKl3rElyZ9UPJcZJcG2GWEDz5M8qppPeap45MySWHKN3lv0zH85l7HP 7OMw== X-Gm-Message-State: APjAAAULlDV8AOQmPAb2239k+a8w/T3K68dWGbBEfi4ZPvvr83mKmh83 fYiF5gE1swG8VIwsPpt4uFn4pJkK X-Google-Smtp-Source: APXvYqx2nvM/xyHQHg/604RIs6tMoS2D/H/SxQ0eFAfhCCV4UaarB2WvfL1RRnQMqeq9eS1iFIuG7A== X-Received: by 2002:a25:9012:: with SMTP id s18mr1959286ybl.474.1565835009305; Wed, 14 Aug 2019 19:10:09 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:58 -0400 Message-Id: <20190815020928.9679-17-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b41 Subject: [Qemu-devel] [RFC PATCH v3 16/46] target/i386: introduce instruction operand infrastructure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" insnop_arg_t, insnop_ctxt_t and init, prepare and finalize functions form the basis of instruction operand decoding. Introduce macros for defining a generic instruction operand; use cases for operand decoding will be introduced later. Signed-off-by: Jan Bobek --- target/i386/translate.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 0cffa2226b..9d00b36406 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4548,6 +4548,34 @@ static int ck_cpuid(CPUX86State *env, DisasContext *= s, CkCpuidFeat feat) } } =20 +/* + * Instruction operand + */ +#define insnop_arg_t(opT) insnop_ ## opT ## _arg_t +#define insnop_ctxt_t(opT) insnop_ ## opT ## _ctxt_t +#define insnop_init(opT) insnop_ ## opT ## _init +#define insnop_prepare(opT) insnop_ ## opT ## _prepare +#define insnop_finalize(opT) insnop_ ## opT ## _finalize + +#define INSNOP_INIT(opT) \ + static int insnop_init(opT)(insnop_ctxt_t(opT) *ctxt, \ + CPUX86State *env, \ + DisasContext *s, \ + int modrm, bool is_write) + +#define INSNOP_PREPARE(opT) \ + static insnop_arg_t(opT) insnop_prepare(opT)(insnop_ctxt_t(opT) *ctxt,= \ + CPUX86State *env, \ + DisasContext *s, \ + int modrm, bool is_write) + +#define INSNOP_FINALIZE(opT) \ + static void insnop_finalize(opT)(insnop_ctxt_t(opT) *ctxt, \ + CPUX86State *env, \ + DisasContext *s, \ + int modrm, bool is_write, \ + insnop_arg_t(opT) arg) + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835674; cv=none; d=zoho.com; s=zohoarc; b=oJFaUg09tXavCCnmks2AsGe2sGIIeZiSsb/JS6u/wYeI7KFJL5fTyFAuIpAkrfBsWvxizBVtHMl/4ZqHq7OxbowNC9EOvF3QXIwsHm6bubttw80gPiCCfW/L/fTG5x4YUfHFaWRYPexlAW/1YZ8Le/DIseHYzbZJgwj9Z79ubNM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835674; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=9601ErWO7zgsMa+wbbKQmtGl/jKL1D9g8CD0vQWqE9E=; b=eQ+MUqBiZeDj7uLlp1zRr6ULYi98tlL/jsKuc2NdaAIiceSU+9en37qbX3Octy9aQStOpHPIlirO0ELQk9lqaU8p9w+Gq1B99Q0WXagTCnwR4j/MSYPu6DDbO+3BGeuCeadBbNZCLmaiaseFZ5Mi5XjiCr1ZAMgsmpEt8FrMb2c= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835674874401.5764933985296; Wed, 14 Aug 2019 19:21:14 -0700 (PDT) Received: from localhost ([::1]:37438 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5O5-00020B-Ju for importer@patchew.org; Wed, 14 Aug 2019 22:21:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46781) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DQ-00066j-TH for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DP-0008NX-1g for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:12 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:41222) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DO-0008N7-T6 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:10 -0400 Received: by mail-yw1-xc43.google.com with SMTP id i138so291818ywg.8 for ; Wed, 14 Aug 2019 19:10:10 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9601ErWO7zgsMa+wbbKQmtGl/jKL1D9g8CD0vQWqE9E=; b=iNhcdwqqaExZxJiPGrqQyHrClhTFZJNpX/mbXbnosTy9oiDYRbpAsIl+AHxxdx60Ol aRPaESzyfwKTcJdT60GO91hh4NGfKi8qaB+Qv0Y4lnQCVV76D4mxRZ346QEYygSNGetS qJIiWrG2Kd281uZjCIgENkiS0fNYlKK8omNWVthF06RUllOJqkEiDw5+pC8l3MjeOMiR UCt4AJYmCodXWlWthHk9hB08nAND0uUszAJkGeqcEDHxv/FAWpzGupXPkdzkUrZ1tsY3 HBc3Blvc5+8nWOZnXDTbiI5BUXp0yluePXg2pM5b2ORASHVVZxp9FV+QcTmRkqeaVGIP Rilg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9601ErWO7zgsMa+wbbKQmtGl/jKL1D9g8CD0vQWqE9E=; b=Dw3I10lODpebiziL/RiRFXIBXIHSxSZawgN+siDNP83K89tztiNIALnssfsQjb3oGh WjaIF5BOx6BXaf1vLKyRVG3h/h8IY/RXOAaF/H31QqoUQuzVmXR46bkC9wk/n+P5T0KU evHawYIvefVZb1aXvX7i7b9XJCU4chZ/e6SUfHLby70nCBWo7adeL+ac0JYKf/dn5C3O 9DBVrJlc8AeAiPFFZnnT57s+PjvY0uDD1rUa34RD6cOy9vnLaNm4Y2W6Z3R2boxynUIW 8tD+EKxdxTUq+EXOE9b2/g7xLmTt07FmrmiezWnnRKXU/qm+dP9972s3wC/ov1J630zL lzYA== X-Gm-Message-State: APjAAAVlKPrDUcT2BXOR2Nw77KsbFWUl2ROYCA2m3XLlwqLFM+8PdDYF yQEdbxmC1oLLEUhRiIKc0T3EOMav X-Google-Smtp-Source: APXvYqwHdHY++d1KD7W3zCEVotPiMi/DyEU2xRFwg0KW5omu8cBPQKoTmAPxc2PQe74UTt1m+I/NHg== X-Received: by 2002:a0d:f2c4:: with SMTP id b187mr1616819ywf.103.1565835010255; Wed, 14 Aug 2019 19:10:10 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:08:59 -0400 Message-Id: <20190815020928.9679-18-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 17/46] target/i386: introduce generic operand alias X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" It turns out it is useful to be able to declare operand name aliases. Introduce a macro to capture this functionality. Signed-off-by: Jan Bobek --- target/i386/translate.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 9d00b36406..8989e6504c 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4576,6 +4576,26 @@ static int ck_cpuid(CPUX86State *env, DisasContext *= s, CkCpuidFeat feat) int modrm, bool is_write, \ insnop_arg_t(opT) arg) =20 +/* + * Operand alias + */ +#define DEF_INSNOP_ALIAS(opT, opT2) \ + typedef insnop_arg_t(opT2) insnop_arg_t(opT); \ + typedef insnop_ctxt_t(opT2) insnop_ctxt_t(opT); \ + \ + INSNOP_INIT(opT) \ + { \ + return insnop_init(opT2)(ctxt, env, s, modrm, is_write); \ + } \ + INSNOP_PREPARE(opT) \ + { \ + return insnop_prepare(opT2)(ctxt, env, s, modrm, is_write); \ + } \ + INSNOP_FINALIZE(opT) \ + { \ + insnop_finalize(opT2)(ctxt, env, s, modrm, is_write, arg); \ + } + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836096; cv=none; d=zoho.com; s=zohoarc; b=VmB2oDwCdCZ1lxjMyltASniWTLGkNmqYogYnIc9cI+sQpjJAbZQ++g9XmXOoG9oCeY65MbYuWIUV55veVP+tKmfpwhwEyMOXUE/0tkUwdZuyc6K0Lwtza3/va7dZEU7FD5dWQ2K2b+O1qUMhsHkW1pNOLHZdu62IoZBYYWJsmuk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836096; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=zP6GTQGfujsY6bqhJL3wQyBHXL9hxwznzMfUQ8cbGjY=; b=bGUZ8medCnrB2gtRbLxgKM5ZYpBQx7CgfjVzXpL6LG9F9KA600DqJ0R7MRsWAN+lXTpt3QSHIA58y6s1ttsw3TjLTCFlZSUg+tYQVqA9QEbBCSH4rbbfCjDQAUc8EWjELXumzbIsdAVVK2esFv/ZBkvwGziL/xUd7FtGRI3zeK0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156583609609970.57757348433734; Wed, 14 Aug 2019 19:28:16 -0700 (PDT) Received: from localhost ([::1]:37508 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Us-0002Lr-2L for importer@patchew.org; Wed, 14 Aug 2019 22:28:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46805) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DS-00067y-Qb for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DQ-0008P0-V4 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:14 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:32933) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DQ-0008O1-Qz for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:12 -0400 Received: by mail-yb1-xb41.google.com with SMTP id b16so413811ybq.0 for ; Wed, 14 Aug 2019 19:10:11 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zP6GTQGfujsY6bqhJL3wQyBHXL9hxwznzMfUQ8cbGjY=; b=PciCaGFt/gJiUY2imck1zro8OnscZvJKLk91e3A64pwV1Q1yubSY+jzy8w/s1165Kc 6AvsKsPjX/li71KCf3dniDYKv+dJRczk7jfPJ90ybPpCD/IAEo7iR6Q6TR777JtSrjil Qu7F7/FcBTEvGrQYfHe1FuBuhAmaDcmo2h2bR2F5z6czdpe2BNF/LTFEODj+PEmx0RXA 1+HepDOiKMEKOiHHI8NGu2G8E9/7xKqCRStY6xE8NC+WHJ17tbBtdrZxObCgK4f8WDvt wJVmMGgjEi/zcI/eaESkFlXZaEGfuHya8sPq642aFm6vYq7ot7A+LkMz9l/P9j4DslU5 IlvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zP6GTQGfujsY6bqhJL3wQyBHXL9hxwznzMfUQ8cbGjY=; b=eoHaf/T8nDew14hkd1CJS0/wNP7V36qA1NJj99skwwJjIKJUQ6FFASexiI0lSG+8YF hhlkWAPcsHtQZYPxIUhjfLEUvcG3BKxUU+8DrGY5io0D+xlSFt3YaeEKyvBZ0bMO4D2Z RZyVvjPzIENIhT7rCzfRDCCkeJXK79iiKEDmBTimj/6ktUPhoPf3S40dEdUU48QdgBad 2chYYeT7BCbEFPuWgc26YBdsGdw3ril43dOPch9sga0MYrxhKnGdaa7n2wLXxhoWtUgq qa4z0wUWgk+XQXTsowQ1spdFhj19B1F2f/ZNlNFmMCFnMi4hClfiySGAdUH696vepg6q zNrA== X-Gm-Message-State: APjAAAXsAeI/Q5ciE2xzwVfsXKqFMymibVw/3MRHhrjb+tS6j6XRF0dS V/ZtK4DcOT/E7dSeqSbulOdCs/6u X-Google-Smtp-Source: APXvYqxD5c1SlOM35fhS4ZgPTcnqDdXn8BqzUeJaDHdpUV2rDR7otHR7A0Yk6cELEyfY2U+kh4ecEA== X-Received: by 2002:a25:c3:: with SMTP id 186mr2085522yba.417.1565835011295; Wed, 14 Aug 2019 19:10:11 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:00 -0400 Message-Id: <20190815020928.9679-19-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b41 Subject: [Qemu-devel] [RFC PATCH v3 18/46] target/i386: introduce generic either-or operand X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The either-or operand attempts to decode one operand, and if it fails, it falls back to a second operand. It is unifying, meaning that insnop_arg_t of the second operand must be implicitly castable to insnop_arg_t of the first operand. Signed-off-by: Jan Bobek --- target/i386/translate.c | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 8989e6504c..a0b883c680 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4596,6 +4596,52 @@ static int ck_cpuid(CPUX86State *env, DisasContext *= s, CkCpuidFeat feat) insnop_finalize(opT2)(ctxt, env, s, modrm, is_write, arg); \ } =20 +/* + * Generic unifying either-or operand + */ +#define DEF_INSNOP_EITHER(opT, opT1, opT2) \ + typedef insnop_arg_t(opT1) insnop_arg_t(opT); \ + typedef struct { \ + bool is_ ## opT1; \ + union { \ + insnop_ctxt_t(opT1) ctxt_ ## opT1; \ + insnop_ctxt_t(opT2) ctxt_ ## opT2; \ + }; \ + } insnop_ctxt_t(opT); \ + \ + INSNOP_INIT(opT) \ + { \ + int ret =3D insnop_init(opT1)(&ctxt->ctxt_ ## opT1, \ + env, s, modrm, is_write); \ + if (!ret) { \ + ctxt->is_ ## opT1 =3D 1; \ + return 0; \ + } \ + ret =3D insnop_init(opT2)(&ctxt->ctxt_ ## opT2, \ + env, s, modrm, is_write); \ + if (!ret) { \ + ctxt->is_ ## opT1 =3D 0; \ + return 0; \ + } \ + return ret; \ + } \ + INSNOP_PREPARE(opT) \ + { \ + return (ctxt->is_ ## opT1 \ + ? insnop_prepare(opT1)(&ctxt->ctxt_ ## opT1, \ + env, s, modrm, is_write) \ + : insnop_prepare(opT2)(&ctxt->ctxt_ ## opT2, \ + env, s, modrm, is_write)); \ + } \ + INSNOP_FINALIZE(opT) \ + { \ + (ctxt->is_ ## opT1 \ + ? insnop_finalize(opT1)(&ctxt->ctxt_ ## opT1, \ + env, s, modrm, is_write, arg) \ + : insnop_finalize(opT2)(&ctxt->ctxt_ ## opT2, \ + env, s, modrm, is_write, arg)); \ + } + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836395; cv=none; d=zoho.com; s=zohoarc; b=bbpfBr3L5Jfa7LeMg1/u1aecCSk7EgWBkNas2TGgR2njDKa89nSJ4p+Tyvvra1o6irmWJFO8GPthSQzBT8Jbp/MPPWqiPZz1FFxDL3Ucx3L+2yfqj79JzIRRxGqzE1hwuqr+s8Bqrlts+QnBCuZa7EWbwBIQpu8oMsZDLu1jSDs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836395; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Dl8bYnb0udmn0qx43U7Smy53dg0Al6b+NL/33M408sA=; b=bduYB8oDxq0lftPzkq5OjOeLTVdT8cbzKLB/OVUbx0vZbvf/jQCYUz4GJawvFoUIE9BrYgv7r++UIopC9iWp+E/6XGxhOwTQtGlLgWJqRT7g00rPmffBp8OMSR9LZdw5PD/xjQuQs1NwuNzKf4MKbdlp6P6dconLPHHBRemzZMU= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836395286273.0532456104704; Wed, 14 Aug 2019 19:33:15 -0700 (PDT) Received: from localhost ([::1]:37578 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Zh-0007xN-PH for importer@patchew.org; Wed, 14 Aug 2019 22:33:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46833) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DU-00069h-UK for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DS-0008Qa-Lq for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:16 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:44238) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DR-0008Ob-1S for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:13 -0400 Received: by mail-yw1-xc44.google.com with SMTP id l79so286292ywe.11 for ; Wed, 14 Aug 2019 19:10:12 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Dl8bYnb0udmn0qx43U7Smy53dg0Al6b+NL/33M408sA=; b=dha9cR2TPgyGZWAykDdhOIz2SBCbV+XqlGBsd6MJw0FwFjQICs2htrVPhrnT4AGvj/ CflOKsE67JiCmhHWNsgjj9r9kesr+S4EdiM6m/c+d2pJ9mMM3c5ZXr9bC5HkaQi4gi1C +ow9e+bk1GSITSm6Lbz7n3FB0FTEaNoqVyndv4ip2HTFhe9ZakqNvQwftxpGHqG9Zukx P+cDLru/ydFhEVyggTgyLTXkrDkQjcediBdKfM1x7IQLOBm7BjPC9fTAjgaIiVYuYk8F TMiF9OY79SUBxd6xFtN7L2YicO+x7vmgmezttS0+hNVtYw/SXJbLmS6UoatEacARgeAo IWqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Dl8bYnb0udmn0qx43U7Smy53dg0Al6b+NL/33M408sA=; b=VIeCFLM/9+2y0icdXzfzCdUzkHJR8rk8gkJKfu/NOl9J+jXl07Do0/Jra05lIbXoW7 n78QFhC1dw3mnYFGszB66gTxbVSuKkqYCgF7Wrw3WIWTHeE1y8dvqCd7sgSN8rkmkXGe /n8mzkqt0xdpda+sNMzJFRlKVq9FvzW0401X06WNUe0aYeU42ygvNXoVffLLspjetGIj OBSzTG60AonWyrGq/nmXKemF/Xwqi5fy0xq0QfKBDHN5kXAIoWtJrvZ7gcoWj1sTtF3x CxlB+GXPYkMljlRXGltfaM0JiGIwj/6OBXDMc4UaB7tZWV0xjFLVq/rJ66NFqoirTYtV tqcA== X-Gm-Message-State: APjAAAUK6FVWj9IMlQ3LH541R2Vv6xWzPFvjhYR3nzN6wIi+7IyS0ep5 1ALCrdSQ3Va58vO57vgIBIkbaSyO X-Google-Smtp-Source: APXvYqyh58TKjwViBS5L+7g+o/wt0EAnCTT5KvrNoaHtJ+lblJxOjnZ8buTQdDYWY3z1anv6Dk10CQ== X-Received: by 2002:a81:9889:: with SMTP id p131mr1559360ywg.127.1565835012370; Wed, 14 Aug 2019 19:10:12 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:01 -0400 Message-Id: <20190815020928.9679-20-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c44 Subject: [Qemu-devel] [RFC PATCH v3 19/46] target/i386: introduce generic load-store operand X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This operand attempts to capture the "indirect" or "memory" operand in a generic way. It significatly reduces the amount code that needs to be written in order to read operands from memory to temporary storage and write them back. Signed-off-by: Jan Bobek --- target/i386/translate.c | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index a0b883c680..99f46be34e 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4642,6 +4642,60 @@ static int ck_cpuid(CPUX86State *env, DisasContext *= s, CkCpuidFeat feat) env, s, modrm, is_write, arg)); \ } =20 +/* + * Generic load-store operand + */ +#define insnop_ldst(opTarg, opTptr) \ + insnop_ldst_ ## opTarg ## opTptr + +#define INSNOP_LDST(opTarg, opTptr) \ + static void insnop_ldst(opTarg, opTptr)(CPUX86State *env, \ + DisasContext *s, \ + int modrm, bool is_write, \ + insnop_arg_t(opTarg) arg, \ + insnop_arg_t(opTptr) ptr) + +#define DEF_INSNOP_LDST(opT, opTarg, opTptr) \ + typedef insnop_arg_t(opTarg) insnop_arg_t(opT); \ + typedef struct { \ + insnop_ctxt_t(opTarg) arg; \ + insnop_ctxt_t(opTptr) ptr; \ + } insnop_ctxt_t(opT); \ + \ + /* forward declaration */ \ + INSNOP_LDST(opTarg, opTptr); \ + \ + INSNOP_INIT(opT) \ + { \ + int ret =3D insnop_init(opTarg)(&ctxt->arg, env, s, modrm, is_writ= e); \ + if (!ret) { \ + ret =3D insnop_init(opTptr)(&ctxt->ptr, env, s, modrm, is_writ= e); \ + } \ + return ret; \ + } \ + INSNOP_PREPARE(opT) \ + { \ + const insnop_arg_t(opTarg) arg =3D \ + insnop_prepare(opTarg)(&ctxt->arg, env, s, modrm, is_write); \ + if (!is_write) { \ + const insnop_arg_t(opTptr) ptr =3D \ + insnop_prepare(opTptr)(&ctxt->ptr, env, s, modrm, is_write= ); \ + insnop_ldst(opTarg, opTptr)(env, s, modrm, is_write, arg, ptr)= ; \ + insnop_finalize(opTptr)(&ctxt->ptr, env, s, modrm, is_write, p= tr); \ + } \ + return arg; \ + } \ + INSNOP_FINALIZE(opT) \ + { \ + if (is_write) { \ + const insnop_arg_t(opTptr) ptr =3D \ + insnop_prepare(opTptr)(&ctxt->ptr, env, s, modrm, is_write= ); \ + insnop_ldst(opTarg, opTptr)(env, s, modrm, is_write, arg, ptr)= ; \ + insnop_finalize(opTptr)(&ctxt->ptr, env, s, modrm, is_write, p= tr); \ + } \ + insnop_finalize(opTarg)(&ctxt->arg, env, s, modrm, is_write, arg);= \ + } + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835849; cv=none; d=zoho.com; s=zohoarc; b=l9ZsQ1S2JfWzceBIwcbSvXgYBkb8R/Om0Oep2H3CmMHlkLEa3LkUSjAb4bY9qCXikhvsik6C9UGdI0ZiTFgzHUM/u7VpblZ4xiGymGCho9dZhFKcnKo8EyFKaHeO42MW3nTgmw9ooJz0LRrs58zYkn3Iui1WRNmHL5j150f2bWE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835849; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=hfIo3JgpILVtL9GqBEDfiaysShRSn0Njr8MBfKy2z7w=; b=EL4fjMbw5bvzfq+xY7le5HndK4f17cfGpapUO7kZ1Z94sItBRNb2A49ftClVJnlTH0rQ+Beu/SDujZytXie1xGoG9a21+6EFP7FaNVELSWInpq2PEnlKKKjKzcsr6vjvKWMa3avW3YlcWf4ITSLXqzz0VmOwJT7PJM1P0QaSExg= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835849743987.1350634814125; Wed, 14 Aug 2019 19:24:09 -0700 (PDT) Received: from localhost ([::1]:37471 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Qs-0005bh-9B for importer@patchew.org; Wed, 14 Aug 2019 22:24:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46831) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DU-00069f-T5 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DS-0008R4-Rc for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:16 -0400 Received: from mail-yb1-xb44.google.com ([2607:f8b0:4864:20::b44]:44675) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DS-0008PW-NQ for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:14 -0400 Received: by mail-yb1-xb44.google.com with SMTP id y21so391113ybi.11 for ; Wed, 14 Aug 2019 19:10:13 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hfIo3JgpILVtL9GqBEDfiaysShRSn0Njr8MBfKy2z7w=; b=gQ/PILdy4WOD/YPAieUzLawGhkZR1vtSlT4smA3HFjM+mqLOoUO3ocICp2ToyI0Hk9 19hphV4eoxKtIPyW1Sgj8qDnlCGdOCkmUATumtMKgkYF/MwhWc/9uKeeFiJKjS+AS6hf aRShwduWLiRRsk0f5S9PsYJwO6gO9awYSzZSyB3iYxzfeVGy8EkYwBRlFdYf6P8TCi4V sIgjM/kmwulzurJV4G1Hy4ANsZIa30ffhEB/bipH556gJA4lu9/VCYYxTggl88Hjti4X Hs6d+G5kzYMSQzn+8+065+QgouHKUNL2m1XOo4NMJQDhgvUlqp+rSOUtLv9h72k+1PPv 9brg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hfIo3JgpILVtL9GqBEDfiaysShRSn0Njr8MBfKy2z7w=; b=IUY3qpzgYGxLEyqVAFhVzgnYubVi2IsDsGZmilaewb+Xou5sebS0ceoeFkUQkiv17+ 8rEErlCHCTNVM+eYcWiPZ8CPDd1d8S0iRNJwPQAMWJ27ZOj/G3ULFltCQXTgBMyowXd7 u6qExEhUwds+5FLWiwip24QtB1B46ymNVCBys9E1w84C+VVrnCFgbLQGxs7cRjkNUkeI hUvC0e/f7JSbrvAp4CDQB0KuOFhALVIJVtdJka+h2Rs6NDkDjcur+7wKWPwabZ0DSUWo BbAQkxQ9f2qjd9eDYkQ78g/HMqf7jo4spZL4UYd7eg3o3DCpnX9YQDkqyQsxWkaPydAr 7U8Q== X-Gm-Message-State: APjAAAXzXUgmzUF48u1bCEPM7v/fZqZn68cRkzeElFAkAjE7Ea56mz/Q lql/eoMAw8JgM+VRyJjtW+gt97Wx X-Google-Smtp-Source: APXvYqx03VZyp5nFdegY7i3oV+8OGVu/Pb7M8dRb7xTm3BgB0nzeG/LBo4yqoG2lETntduMm8DSMKQ== X-Received: by 2002:a25:5e55:: with SMTP id s82mr1914416ybb.343.1565835013106; Wed, 14 Aug 2019 19:10:13 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:02 -0400 Message-Id: <20190815020928.9679-21-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b44 Subject: [Qemu-devel] [RFC PATCH v3 20/46] target/i386: introduce tcg_temp operands X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" TCG temporary operands allocate a 32-bit or 64-bit TCG temporary, and later automatically free it. Signed-off-by: Jan Bobek --- target/i386/translate.c | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 99f46be34e..7fc5149d29 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4696,6 +4696,50 @@ static int ck_cpuid(CPUX86State *env, DisasContext *= s, CkCpuidFeat feat) insnop_finalize(opTarg)(&ctxt->arg, env, s, modrm, is_write, arg);= \ } =20 +/* + * tcg_temp_i32 + * + * Operand which allocates a 32-bit TCG temporary and frees it + * automatically after use. + */ +typedef TCGv_i32 insnop_arg_t(tcg_temp_i32); +typedef struct {} insnop_ctxt_t(tcg_temp_i32); + +INSNOP_INIT(tcg_temp_i32) +{ + return 0; +} +INSNOP_PREPARE(tcg_temp_i32) +{ + return tcg_temp_new_i32(); +} +INSNOP_FINALIZE(tcg_temp_i32) +{ + tcg_temp_free_i32(arg); +} + +/* + * tcg_temp_i64 + * + * Operand which allocates a 64-bit TCG temporary and frees it + * automatically after use. + */ +typedef TCGv_i64 insnop_arg_t(tcg_temp_i64); +typedef struct {} insnop_ctxt_t(tcg_temp_i64); + +INSNOP_INIT(tcg_temp_i64) +{ + return 0; +} +INSNOP_PREPARE(tcg_temp_i64) +{ + return tcg_temp_new_i64(); +} +INSNOP_FINALIZE(tcg_temp_i64) +{ + tcg_temp_free_i64(arg); +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836009; cv=none; d=zoho.com; s=zohoarc; b=EXr/cRQ3taQ+m9y67373Yvax0NlvbQMHTzCbYTHJVpd2i05goCuaFyWOZgjQzlngTHLMw0bH9LLDLG/EMFWw4YZVJhAdvGw7Z0fULZ8PL6J3DmzMolCD4zUlYh+rFNd0D01BUv/3vWxtE+t+42VxTJOdtFpIWO/wYatpsd+0SG4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836009; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=sUUjkxC3I+DZZwP1yONXtBqBNrGY63NYaaa32AfTnHI=; b=Y+P/ZX4L7W8JGYtLbJ+VdDOo+bOqaP7clHIxQcL7meRtD6BHveywO0Er2kb0nwtQpnSx63ToFXYwva8xHE6k+jVsdRiR7fcmt2U9OiE9NfdxdhsAKNwwFATJmjk5ej0H8GwyhTKsTI5DqC3NaJUjrVttvbeaHLNEXuKE8ZXtBZo= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836009031301.67390196186045; Wed, 14 Aug 2019 19:26:49 -0700 (PDT) Received: from localhost ([::1]:37502 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5TT-0000s7-D4 for importer@patchew.org; Wed, 14 Aug 2019 22:26:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46832) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DU-00069g-SB for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DS-0008RD-T9 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:16 -0400 Received: from mail-yw1-xc41.google.com ([2607:f8b0:4864:20::c41]:42193) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DS-0008QH-OX for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:14 -0400 Received: by mail-yw1-xc41.google.com with SMTP id z63so290561ywz.9 for ; Wed, 14 Aug 2019 19:10:14 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sUUjkxC3I+DZZwP1yONXtBqBNrGY63NYaaa32AfTnHI=; b=c+bwkMhrBHZ/W42ETJF3fbyQVWvEoLsGl5w9HaVSJ9sCPLF/wMF7HEenhsk4B+5OMt jQRnSV3QgCPZP3jgmNXKXjXgAEeCcrVpBbz11thdyzj3D2AD0jXJnR3+ALAYd5T+Aisb 5G4uw7ZOmOcYQTd8TPGNkAkhr5cdMczzbBmjxqPCVKyuJf+Oy2A3LPc9kof0GCxNEAcI ZKDpELVPV4iZ/BlNq85fTrVGr28EDhL2BUiZho+iPxf2YHgUm7idMfwOeq9tfID9k2iT xR48Vi1Pd7pAB1Nu9UM8RlY4htSHVZGAXKHSofjKXm5JBScnoo7Nk8e1/j3EG50PJukc ibfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sUUjkxC3I+DZZwP1yONXtBqBNrGY63NYaaa32AfTnHI=; b=lJOlgiDZRS1AsOIyFRn55uwjFo6DBA4GOb6+Xd20MC2Bs0VYL2wzuV6k6HOgOhPMzd 3QudvMGOzpFaofIjDwdIvUK1yQ8nwucLoj+SHrkRk82/bRj1b1XONaCA+7Bhw3zBW/JR rMRU3F+6sdCSJg15TvWZ8mJrS9OS4wrN235dAETxGQuK+AW/DAHgb1hj8xZp18aBve61 TwtGp83QgDiCtSd0e/WDqR1twOSp19dxAKcrswCwi1TKqC/Tha+mfXhe1WtPS/N9ldjZ GZemgKyyd13posBCroBY+XQFBmHyUcfeKpFjcRTlqgv0HNtSmvqQmP2drQEuIPg45p+Q j6gQ== X-Gm-Message-State: APjAAAWMqUHrpAl+dv6FeFI760k/Q7iI+wAxMLLzI6ajVM5L85LHF1vR V6EJ+N5Y9CxiAnn1RIuzdWnWaUQK X-Google-Smtp-Source: APXvYqxrXtft73coq7oUmnbHv95uxESVjtI3RrYexsfj4BSkKYFoinJSfebzlm3foCuYH5yPvK8bnw== X-Received: by 2002:a81:2492:: with SMTP id k140mr1559567ywk.138.1565835013959; Wed, 14 Aug 2019 19:10:13 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:03 -0400 Message-Id: <20190815020928.9679-22-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c41 Subject: [Qemu-devel] [RFC PATCH v3 21/46] target/i386: introduce modrm operand X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This permits the ModR/M byte to be passed raw into the code generator, effectively allowing to short-circuit the operand decoding mechanism and do the decoding work manually in the code generator. Signed-off-by: Jan Bobek --- target/i386/translate.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 7fc5149d29..25c25a30fb 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4740,6 +4740,26 @@ INSNOP_FINALIZE(tcg_temp_i64) tcg_temp_free_i64(arg); } =20 +/* + * modrm + * + * Operand whose value is the ModR/M byte. + */ +typedef int insnop_arg_t(modrm); +typedef struct {} insnop_ctxt_t(modrm); + +INSNOP_INIT(modrm) +{ + return 0; +} +INSNOP_PREPARE(modrm) +{ + return modrm; +} +INSNOP_FINALIZE(modrm) +{ +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835480; cv=none; d=zoho.com; s=zohoarc; b=oLSVPYo/G3SGkc3KAIH5ppPxCy5NKrAa0f5j6vtQ7ZEs3a7RPP8wN9H7RnZIzfOq1afOGT0orl89EboFszmDSrdurqCmSqV9Ss0j3LUZvG4wgGtBQuBmScY71gsnhM4BvAnLllIuRl/eXjEB/jbQsCh0Hj4BQDdCKV+9dqCYQ2o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835480; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=aji6f42Pqo1laNwakKXwsr+VmwLnCcurcKsMvdCVjcw=; b=P3STuCHYEsvr5V1F/7Yl4reMENs90XiQDzq+FT2cigehxrtwiYlp4WcrIH93TH6rtU06Y4d4sxbvPjcmWHQcoXdUyWDwmbeak2ofoJKLZkabvihf2EJIMISuRv+NrHFpLtUzuBBs454WfXe6uFQMEsoMr9FzzE56ctMiyouSe7I= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835480254580.9771112129665; Wed, 14 Aug 2019 19:18:00 -0700 (PDT) Received: from localhost ([::1]:37414 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Kr-0006gY-ON for importer@patchew.org; Wed, 14 Aug 2019 22:17:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46865) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DX-0006Ba-Aj for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DV-0008Vg-8U for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:45961) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DV-0008S5-4F for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:17 -0400 Received: by mail-yb1-xb42.google.com with SMTP id u32so388382ybi.12 for ; Wed, 14 Aug 2019 19:10:15 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aji6f42Pqo1laNwakKXwsr+VmwLnCcurcKsMvdCVjcw=; b=ZkuDXAAqe9iGdX+lqbUGSqoU6JpHSBfNxV8J8llQJHt7/UD9CduwzV4ITo9iCImT7M gdwnL7mHSag65jlGZ5rLSj3l5MGeXQv6yatdK7Bth/kkXZ93HBT1p72lXYsRE/h3SmRp hI93KcOHzxvFA4l9GgeTywWRUz6jjr6RGuQXgRytodmbrtrgv7ZndFc24VgWmy4kZQbw NoEidRUyXFRP84/uEEEL7QaiKOIyGsHDgWgBGeSQfVa4fFZRKqiResNrzdA1OcoZnIj3 87mQaI0LRMfY/Wx7/4gmiJiTdY9RWIwGP6h8BrJ+7FUIQrX3GbBqbMIx9d5lYL89Gn1k 3c9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aji6f42Pqo1laNwakKXwsr+VmwLnCcurcKsMvdCVjcw=; b=IzQc6AS30Tw0LkjPBCzeXYk4ezNG7KhNdF1gW9OZkMUQUOCT7nsNoTrPsxRLP8ux6X +8m7eXEcO0x0jdI40+DKvvqwpOW6/cXuNDi021RKi61cWSY31U+Azpq3FgIO+mTxxs66 RKYnbRVT3GaD/VyTZJ4IqzMqZOHeEjN0itr833JcqPrRysch+Sc4HInJZpBHoALLBKtk LhwiBMNYVjeuBe1+ASy6GrCrlySPmaU+rQ44IfujDTrLQ8hyl0tT3EE2uxdVQ2TPKdpI krLPafZ/DiysvQ6qIvU9ez95ABGtd70Dhi1ML+CYY2pawdWAJeLAQAvuI5RYDIkIfSwy nfFw== X-Gm-Message-State: APjAAAXK6WkhAN8Ztd6NWevgeX4EQZXiUyuOfojxPZ48oANt4JgVLBYB NRduXC3U31teVCGJQAs7iJ9eoDW4 X-Google-Smtp-Source: APXvYqzBy5nDIj0GpEbjrj9z6rx6ql0Xew8ZwlXsw3Rn3HBj/1nQzgoas+xDtK/vF6c6c9iGnUDCLQ== X-Received: by 2002:a5b:e87:: with SMTP id z7mr1918014ybr.5.1565835015043; Wed, 14 Aug 2019 19:10:15 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:04 -0400 Message-Id: <20190815020928.9679-23-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b42 Subject: [Qemu-devel] [RFC PATCH v3 22/46] target/i386: introduce operands for decoding modrm fields X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The old code uses bitshifts and bitwise-and all over the place for decoding ModR/M fields. Avoid doing that by introducing proper decoding operands. Signed-off-by: Jan Bobek --- target/i386/translate.c | 62 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 25c25a30fb..e4515e81df 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4760,6 +4760,68 @@ INSNOP_FINALIZE(modrm) { } =20 +/* + * modrm_mod + * + * Operand whose value is the MOD field of the ModR/M byte. + */ +typedef int insnop_arg_t(modrm_mod); +typedef struct {} insnop_ctxt_t(modrm_mod); + +INSNOP_INIT(modrm_mod) +{ + return 0; +} +INSNOP_PREPARE(modrm_mod) +{ + return (modrm >> 6) & 3; +} +INSNOP_FINALIZE(modrm_mod) +{ +} + +/* + * modrm_reg + * + * Operand whose value is the REG field of the ModR/M byte, extended + * with the REX.R bit if REX prefix is present. + */ +typedef int insnop_arg_t(modrm_reg); +typedef struct {} insnop_ctxt_t(modrm_reg); + +INSNOP_INIT(modrm_reg) +{ + return 0; +} +INSNOP_PREPARE(modrm_reg) +{ + return ((modrm >> 3) & 7) | REX_R(s); +} +INSNOP_FINALIZE(modrm_reg) +{ +} + +/* + * modrm_rm + * + * Operand whose value is the RM field of the ModR/M byte, extended + * with the REX.B bit if REX prefix is present. + */ +typedef int insnop_arg_t(modrm_rm); +typedef struct {} insnop_ctxt_t(modrm_rm); + +INSNOP_INIT(modrm_rm) +{ + return 0; +} +INSNOP_PREPARE(modrm_rm) +{ + return (modrm & 7) | REX_B(s); +} +INSNOP_FINALIZE(modrm_rm) +{ +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836201; cv=none; d=zoho.com; s=zohoarc; b=c1oCTuedQoK37HLUHD/74ffZ/RNWTkwqvau+OKn606ycEvXNhYzJY+e+3X/8vnjbBOwAuwIKi46tIPZ9kP1NaAf5rr9F0gGqCGjnWvyyE1u3ZXFtWOgenHs68dsH+yWKMaY0nfxYzMiY81YyalaYQiph4swbaZJEuJKX1yqof7w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836201; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=tLijPMcyDKCXtSPHRwSPvNlWAMP/Ey57t/uYlG4MOwo=; b=GkTglCAiBRFXsyARhDGiUsXBso5+TusvMFEw+vz/nHN4rZV4gPReqtUA9TQFnUU/Qm2/IcJIdcW+IxfTZ9JlTGawaKWNNUxPbJWeq6rLb7L289mveV08pMvNynJ3imdCJ1LYragHJRshmHmruAutt+cjZ1oOOmbxIx93z32S7jg= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836201867583.2830841984527; Wed, 14 Aug 2019 19:30:01 -0700 (PDT) Received: from localhost ([::1]:37538 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5WX-0004NA-Ti for importer@patchew.org; Wed, 14 Aug 2019 22:29:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46867) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DX-0006Bd-Bn for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DV-0008Vm-9C for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:37211) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DV-0008U1-57 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:17 -0400 Received: by mail-yw1-xc43.google.com with SMTP id u141so299548ywe.4 for ; Wed, 14 Aug 2019 19:10:16 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tLijPMcyDKCXtSPHRwSPvNlWAMP/Ey57t/uYlG4MOwo=; b=dvrtecTta0z8RAk/Zg8eJJ8ifb2gIy8mYuCupOf2gyGCIaoJ0awt5m+IfRJvXNWkgF 8kiSHid+ZOJp8yZJQh3iLivoFllWx4c4EyTGqmSru6Ek7ie8ZOav8EOh0WuMsirSm96P oW7L6JFi8shDoMceVNmG+PXVa1rhuBducKzmpzfWCrY05dyzaSHWzJ+y3gman1PHb9w6 5YnM8UbdLCGGhoAZa51VWNfwDIiyv/0QsZF8bbmrkaAANfhC4EfZa7aWNuhLrGlki7O3 TEz94M7Qg1BtUkQSNNuR+wYHPJRHRwkN4ltfxfxkRye2GHpe+QttMng0xILWZOh9doL8 2slw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tLijPMcyDKCXtSPHRwSPvNlWAMP/Ey57t/uYlG4MOwo=; b=EUE76LDyOuKJtRWtqDntoCi8vijo4MV6afQQdUx+Lwly5dKFo0ESGGepaGt6mehRsV aLUVbxyQjz7OP9TaMprzVOs7VBDnWpgPetBAJuh7VpblwRBKL7JjAoMI3fC+LFSu6S/K E7n83kI3NMNeVIM3ihpyDa1q4tlFa9D4eDtijqQspovGXzhq75MAUhQZpo4eItJDVJXr Ju1iwS8My31KD9URypnm0Uj3LHGhb0aO09biSe0kQErt7ikbuzwvrMV9be0ixCQzM9qq tSzdlqUZ0EC3FBqAlgYKgDMBz4ZhzYGwgrWoTkqmGK+9BAYdQ/svR/PJXJxdxbvBrnr+ vakA== X-Gm-Message-State: APjAAAVYUoK9eeboNDmJycof2BQkHH6tmuxwVRDc60i1y2wN8kf3E245 W8jfA255IJRA0cKnSrmzBy9CSsbJ X-Google-Smtp-Source: APXvYqw5hCsJn0Ixs9REUtc9WkQKfsZDzq9kAN7507w90OC/wS6NLzkJn19++gHjlNPOcqSU/R7kLw== X-Received: by 2002:a81:2948:: with SMTP id p69mr1731436ywp.264.1565835015997; Wed, 14 Aug 2019 19:10:15 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:05 -0400 Message-Id: <20190815020928.9679-24-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 23/46] target/i386: introduce operand for direct-only r/m field X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Many operands can only decode successfully if the ModR/M byte has the direct form (i.e. MOD=3D3). Capture this common aspect by introducing a special direct-only r/m field operand. Signed-off-by: Jan Bobek --- target/i386/translate.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index e4515e81df..c918065b96 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4822,6 +4822,43 @@ INSNOP_FINALIZE(modrm_rm) { } =20 +/* + * modrm_rm_direct + * + * Equivalent of modrm_rm, but only decodes successfully if + * the ModR/M byte has the direct form (i.e. MOD=3D3). + */ +typedef insnop_arg_t(modrm_rm) insnop_arg_t(modrm_rm_direct); +typedef struct { + insnop_ctxt_t(modrm_rm) rm; +} insnop_ctxt_t(modrm_rm_direct); + +INSNOP_INIT(modrm_rm_direct) +{ + int ret; + insnop_ctxt_t(modrm_mod) modctxt; + + ret =3D insnop_init(modrm_mod)(&modctxt, env, s, modrm, 0); + if (!ret) { + const int mod =3D insnop_prepare(modrm_mod)(&modctxt, env, s, modr= m, 0); + if (mod =3D=3D 3) { + ret =3D insnop_init(modrm_rm)(&ctxt->rm, env, s, modrm, is_wri= te); + } else { + ret =3D 1; + } + insnop_finalize(modrm_mod)(&modctxt, env, s, modrm, 0, mod); + } + return ret; +} +INSNOP_PREPARE(modrm_rm_direct) +{ + return insnop_prepare(modrm_rm)(&ctxt->rm, env, s, modrm, is_write); +} +INSNOP_FINALIZE(modrm_rm_direct) +{ + insnop_finalize(modrm_rm)(&ctxt->rm, env, s, modrm, is_write, arg); +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836307; cv=none; d=zoho.com; s=zohoarc; b=VlXBkUXJB8HyrnPNkZ3EJQ+lO4P1YnWdxxAHznbWRFI5VFOQwPaX/AcU6QxntxbriBdw2gv2iWzqWnnRxQ0KYbhHihop+2e7FnkIC/fp3wRxPwOOe18xOD9VLaVnS+YJMmv2ZYdHL6e61zahpYF7sUGmdLv9cepxKVA8kDSv35o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836307; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=48lyFWBj0n/nrnlkJTcKCrCMcCKDd/O/WUATIxnd1g8=; b=dq92T2HIOfM/YTUQ0ttSYxU5hfN/WlYKmbZ7EYiA4VK238OWTSZyaXkx047o6VY1TyxI2vuV8l5wb6D9tj5piHy63dfwBhviHWfRklLKrvemNslWxIXeGhbVgE77IALxk8+4Ol6YI+29UMs5XpeItIjtQQ1pQpf2RAAZD1aquok= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836307410552.5581726528666; Wed, 14 Aug 2019 19:31:47 -0700 (PDT) Received: from localhost ([::1]:37550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5YH-00064Z-LB for importer@patchew.org; Wed, 14 Aug 2019 22:31:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46888) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DZ-0006Fn-Do for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DX-00007p-B0 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:44237) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DX-0008VY-5u for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: by mail-yw1-xc42.google.com with SMTP id l79so286360ywe.11 for ; Wed, 14 Aug 2019 19:10:17 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=48lyFWBj0n/nrnlkJTcKCrCMcCKDd/O/WUATIxnd1g8=; b=l/QAwii/y6cdjQiOeT/luoMnLgIh3nie71xIUpMXlSRzgjR5909r7TSHK3GxhPHh+5 P2dIg17/VYN+2mH/cvypV9BqAgATzdCumuzvzUlhZEMG3UCGLhzXoUraUey8oYug3ntN IykxcGVI8H/I6umHEhD6468Bpl3df0/mshl9rD2tJRi0TbLbrzY/gCfE4oY+VXG2gUbS TRg8P1kw7TfDruUAfRMhyzxTm8/ao+t5pMHVK0yydDLd93UX4gfNW02JBUQU3uJtiVZK JEyKc5ReUypn5f1IYBcM0vHjGP3X3jmGH40IoBy1k/P7OaOsJKMMgzEoV94nv51oS4Ip Y/kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=48lyFWBj0n/nrnlkJTcKCrCMcCKDd/O/WUATIxnd1g8=; b=S1ea6ssxR4JdB/skZXq8uz8GkF8NVzfoyROq85I809nPm8IMRADVGxuK42YYkf2mcQ TlDjHGaU8WvA0ooLiJeo45MRK2g/rhBcmmJNHERuc9HkM/QqKIP6iiuieWjK1F3odANj OGKcwjj5YjbCRFVxUDEbLnNehNg/tVYBoivQAFBU/1ixe3CADzbfvHCoa4m2teo58kc6 MLiH6KjobGhJTMFFWvPEUIe6J1rTaEcENRWCH0CLDObjM+mEeK9Hok0moEZDWclAO+FK EeZO6nEL5WnfOJoS5JENYSHD6w6eVWTPn7Xs1dHpsXVlbm/zPdkgJSV5uMjE4ri9rHKY sz8A== X-Gm-Message-State: APjAAAUXcjK9p17EiocniLw/NCY4I096lV6NSFghkRYw+MZDV05BYr1b /kH4uk5t3kfTTC+yTnz9COhg45Rv X-Google-Smtp-Source: APXvYqw0iYU+mEN8TVWhYWs6Q7LI4ym0aqr98KcdZ2Bv+8rV5BNz0wfXVakdmfhauPW6U34xJCrRwA== X-Received: by 2002:a81:99d2:: with SMTP id q201mr1541318ywg.461.1565835016829; Wed, 14 Aug 2019 19:10:16 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:06 -0400 Message-Id: <20190815020928.9679-25-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 24/46] target/i386: introduce operand vex_v X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This operand yields value of the VEX.vvvv field. Signed-off-by: Jan Bobek --- target/i386/translate.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index c918065b96..4562a097fa 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4859,6 +4859,26 @@ INSNOP_FINALIZE(modrm_rm_direct) insnop_finalize(modrm_rm)(&ctxt->rm, env, s, modrm, is_write, arg); } =20 +/* + * vex_v + * + * Operand whose value is the VVVV field of the VEX prefix. + */ +typedef int insnop_arg_t(vex_v); +typedef struct {} insnop_ctxt_t(vex_v); + +INSNOP_INIT(vex_v) +{ + return !(s->prefix & PREFIX_VEX); +} +INSNOP_PREPARE(vex_v) +{ + return s->vex_v; +} +INSNOP_FINALIZE(vex_v) +{ +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836400; cv=none; d=zoho.com; s=zohoarc; b=TIXvLty3/LTOostZoLiJIOq4eZvl/N/vq0IZrQ07wWZu7LaHpRkUhi460yh2gvZXuToLFFFO9YF3BvmM4HW791FSO3N+oR1BpJvOYVZu6WBJvdwM2ASS7wswhKZ5OjMCUInLC2rhwokyqpVhwiCD4ezamSVVIxttbnq3pBCITII= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836400; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=qlGfxL9SikyisQtWpLQeFtSP20Q8WGkN4u4QmTWngOA=; b=ERUYkL0Aq26n0ZLr/ZJxs0YVv4BW9TTXYBz15wempsvgGV41RnJ6Ru7OsDibdt527DK6KgtxfY/922Cr1kWepwvIwlfE1o5z8OJcR7/2EeXwtIuzDziXX9I/W7NHyfuYKhGzrOlHsidXCqcaekAiuBPyiqZN9qTmNTcn4IWkIpY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836399993133.33693846988854; Wed, 14 Aug 2019 19:33:19 -0700 (PDT) Received: from localhost ([::1]:37580 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Zm-00085t-5G for importer@patchew.org; Wed, 14 Aug 2019 22:33:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46889) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5DZ-0006Fo-Dg for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DX-00007x-BJ for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:33200) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DX-00005W-6i for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:19 -0400 Received: by mail-yw1-xc42.google.com with SMTP id e65so307104ywh.0 for ; Wed, 14 Aug 2019 19:10:18 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qlGfxL9SikyisQtWpLQeFtSP20Q8WGkN4u4QmTWngOA=; b=ENNmd74uxUtS/bnKqnqsldFjx3FB6/KkZKiukEzG+VOqLXfLq4a8gbHZ/FxO3yL6Ir UVuhIioqAe1PJnqxEl+LngDVXtxUf6489g9ieTmCY1wJBtH/c6dqKP9nDZIcHPlNrIaA n2IKFwsZviMdUhctw65owb8CErWbUvAggHz1+IrkMIC6oREvC4TkWCvCz8Q2qIPTlDQd Wkdb+397oifKFBMlMwd/tnBsxaBmPYd0CpdiQxFJ80hD9329V1BMGeX4p3YNx0HH5E6U C9mSPKWs2WhZ91ndkB2sR1ZDdQApJLWM9m86jOwD6IYAo0tgZ5OHhaPO/gLbrSqDSFjw xgRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qlGfxL9SikyisQtWpLQeFtSP20Q8WGkN4u4QmTWngOA=; b=s8/DHnhrSoNL5zd8yxgIz0TxH5Bdd/bMuyqpIQAxYmG+TkzIhoh5Np3xNGaEWaUn3b xxktTkOow9NkGbDFRwGDl6J5c7JBaepykYf/zX8rUilEeyL6lxx0EOF6Difl8v2g6mjc lx1+wwQ3b97TYjwcXj6+tNwEe492nI/IBq5KjwtbzyTOjRnGoOb5WV5kvHImGP/j+afE AgkMw/qxR3BJOjs36KmgAgMSUIzOo829lwpNLDpISxRUYhf+Ov8f8mJ2yVVRIuIfE+nQ 1i1G9/N0IdL3pUJdm3UPW40RNIY/eKZaq0GaPXRYP4gNk0ta14QmUumBZAdzT9Fgnv3O Q+tA== X-Gm-Message-State: APjAAAWgg7RI/WjH5MMwz2TRkiEyi24Ywx29zTb9x+aNUQN+yA369mXG vZnQSMgDd1VEhhsjKS2X+ZoUMZVp X-Google-Smtp-Source: APXvYqxZL1rrEan71b3D86M6P1PJVhlqVZPOzqGGMiKQ8vIzEDChoMjy4w5LEw1CKtyl4c6SyuFQNA== X-Received: by 2002:a81:9bca:: with SMTP id s193mr1602510ywg.316.1565835017960; Wed, 14 Aug 2019 19:10:17 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:07 -0400 Message-Id: <20190815020928.9679-26-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 25/46] target/i386: introduce Ib (immediate) operand X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Introduce the immediate-byte operand, which loads a byte from the instruction stream and passes its value as the operand. Signed-off-by: Jan Bobek --- target/i386/translate.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 4562a097fa..78e8f7a212 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4879,6 +4879,24 @@ INSNOP_FINALIZE(vex_v) { } =20 +/* + * Immediate operand + */ +typedef uint8_t insnop_arg_t(Ib); +typedef struct {} insnop_ctxt_t(Ib); + +INSNOP_INIT(Ib) +{ + return 0; +} +INSNOP_PREPARE(Ib) +{ + return x86_ldub_code(env, s); +} +INSNOP_FINALIZE(Ib) +{ +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836571; cv=none; d=zoho.com; s=zohoarc; b=Bt6BS0Atj1pVxZUMAoj3lLs6LM3c04hiqX6ZVuTUJMBS6Qlo4j8rw0qvh+3UW7TtLEN+1Mfliw6c32Xe/Pt+BdD4zeybHao27jzbUrdXZ/oyTNRHlOOPCgOb7Y1DRZAVcUCmb9ukznAkDD5DaqYUFLaRYLP6lSyp/sdBUOy3AiQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836571; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=aKh00eIYWVxWWAJICSDb8BanWXW1Kn9B7TLnmofwb5c=; b=KgLqG8gDiUioQppjyP9F3FYm9fgyB5yYhJAfxJvrkiuk/6P3flwANI3pqQ0C0LG86aX8o1jMlotWcx8+Q341FQ3l5Ldri4nTBBBk/7o8jZOdpwK93+t5cMZCruvq0Kuq6J1e+dHhfo4hFR+hQ+ecqLb16rZ2njA/pKvDSCs9b2w= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836571033627.08965075517; Wed, 14 Aug 2019 19:36:11 -0700 (PDT) Received: from localhost ([::1]:37610 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5cX-0003J6-5l for importer@patchew.org; Wed, 14 Aug 2019 22:36:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46927) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dd-0006HR-2e for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5DZ-0000Ap-Qp for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:24 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:44674) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DX-00007R-GA for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: by mail-yb1-xb42.google.com with SMTP id y21so391166ybi.11 for ; Wed, 14 Aug 2019 19:10:19 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aKh00eIYWVxWWAJICSDb8BanWXW1Kn9B7TLnmofwb5c=; b=q2fUmJwNjUpaliFpK8lcfZLH12AcNUbzif4r87i+zSir4+vjhDG/PLnxBDX3xcDOdm fkeAx9kiJQuemHTBP2OJ/9rHHoAovK8Np8y3Ll/Izoc4xRI8WEf3oBiyFmxkkaix3Aed fAzx0l9PlCk2CGUUk1gKTDnBmT6/oGuoz9XBqgkCQ9Bzf8biHivjwz0xrELqEoNT/EZH 9xF+n3COX56CTU6yWTW4OMjY0zmTrAMCuIbn8odW8H+rD1HqR5Tzn3AM1pIt1e6RBqlq ogkq+zJoVIfGKxkamZtjZ9yQUx+1s53TTXaG+MieOJI9aQYuRbVh0lj03dVIhWW4MGst ea+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aKh00eIYWVxWWAJICSDb8BanWXW1Kn9B7TLnmofwb5c=; b=mi2mAzUtYFyS+BObtPu8GoEhF28fsQzYcIISbpfxtIAWNFR/Y1wtPul9vtEtjemIrl 95yem7BW3EUTJp+1sT35R+WIwH9ujdfseul70VKT//XV8Pc2WESY1dtk6L4jbyLl7Kqw Erzu28l95EJlQMnmBT880fIniKfFGI4fry0jBRI4KRiXQaXaTE7MiMVGKQLH44aWVXc1 7Jcu34Rx2MVJgcW++wDr6WMSetSPIH1qh5JMR3olIurshXK1CcXQ4s6xpenV59AbN2fN orWIiuApqK+Lx8jg0N3RUZiPnCA5HF11fbgByqMMdMP3Q4JN8C0sgpRAhUKMDCXgQ/N0 EzJQ== X-Gm-Message-State: APjAAAX2cQWk/x+gkVOgQ8KidN5buM1p+kFBFVz3e8BT1Y0SvlJpfXn9 Lc8Str4szDtE49F2+Rj9VQvL+L8U X-Google-Smtp-Source: APXvYqzwWq0lOwyan/eYFONhaCl7piG4dHNpyssB1gNr0BXEjBG/flhXi57d3M+mZYlMlChgi3vqbQ== X-Received: by 2002:a25:340c:: with SMTP id b12mr2062929yba.190.1565835018739; Wed, 14 Aug 2019 19:10:18 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:08 -0400 Message-Id: <20190815020928.9679-27-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b42 Subject: [Qemu-devel] [RFC PATCH v3 26/46] target/i386: introduce M* (memptr) operands X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The memory-pointer operand decodes the indirect form of ModR/M byte, loads the effective address into a register and passes that register as the operand. Signed-off-by: Jan Bobek --- target/i386/translate.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 78e8f7a212..2374876b38 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4897,6 +4897,42 @@ INSNOP_FINALIZE(Ib) { } =20 +/* + * Memory-pointer operand + */ +typedef TCGv insnop_arg_t(M); +typedef struct {} insnop_ctxt_t(M); + +INSNOP_INIT(M) +{ + int ret; + insnop_ctxt_t(modrm_mod) modctxt; + + ret =3D insnop_init(modrm_mod)(&modctxt, env, s, modrm, is_write); + if (!ret) { + const int mod =3D + insnop_prepare(modrm_mod)(&modctxt, env, s, modrm, is_write); + ret =3D !(mod !=3D 3); + insnop_finalize(modrm_mod)(&modctxt, env, s, modrm, is_write, mod); + } + return ret; +} +INSNOP_PREPARE(M) +{ + gen_lea_modrm(env, s, modrm); + return s->A0; +} +INSNOP_FINALIZE(M) +{ +} + +DEF_INSNOP_ALIAS(Mb, M) +DEF_INSNOP_ALIAS(Mw, M) +DEF_INSNOP_ALIAS(Md, M) +DEF_INSNOP_ALIAS(Mq, M) +DEF_INSNOP_ALIAS(Mdq, M) +DEF_INSNOP_ALIAS(Mqq, M) + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836563; cv=none; d=zoho.com; s=zohoarc; b=norNTo7oYAWFpmKkq7RFFia1WKkq1bfVfyTR6t743LP9z7RRyOYPwJqgyD3gc11SltSlbd7zHYwEsujr9IG3Q349C+9QkoQoYGivSnUuXpb2d8B5dXx7S4SxMnjDgAm+Yay9ifyGOBwiNKTisHKYOzJ6JqZKCsBtZesxKXh7Z2Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836563; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=N7ct2S1EUw6i0gNejU7gxLZfhyQRJ8jeuhEiYT8J/DA=; b=KlHprMaTyMVqmMq3RKqkVp8drWRRByphqF0JGe9cjpkZ/oCt7Cc2B2l2Cs35WpQqw0DtGrpRpOjj5YoKzR2dC7+lSJMlJcEp8O4o+f/q0wwYwr2FzjBhh6oA8O0DEs7MXgDrwJBrXXUELtld3t6TMS42uNadXVLVlLPVqMbGDE4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836563797291.415790919762; Wed, 14 Aug 2019 19:36:03 -0700 (PDT) Received: from localhost ([::1]:37608 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5cQ-0003Bd-1p for importer@patchew.org; Wed, 14 Aug 2019 22:36:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46928) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dd-0006HU-3Z for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Db-0000C4-2N for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:24 -0400 Received: from mail-yw1-xc41.google.com ([2607:f8b0:4864:20::c41]:46377) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DZ-00008f-4l for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: by mail-yw1-xc41.google.com with SMTP id w10so281790ywa.13 for ; Wed, 14 Aug 2019 19:10:20 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N7ct2S1EUw6i0gNejU7gxLZfhyQRJ8jeuhEiYT8J/DA=; b=n43rhKr3GD9IGgRwIIUR5lTOHc6YjNkYr3sKl1jdA0KovphV0j/6nSXaolP2WHGe9z tfOSmm9p4q/Rf+SUcluTrHLM6ZOru4itrglgOMpNeIGX70JPCIxGDcFXuseVfjoGldZq H+8+WYTtOOZLWCNMsXJ3OTBeFewzhqoQUuDeeFJul6nvwYA+XnB47fb8Hx6npyjelFzV H7t9Y7fUa4zfYExtQ+YBpc2L0wh+RqGmJZJUoDOL3uhQ2Og6PPC8w2IV9BChSKMbkNNu V7HUuwcCanXXumNQA3dID5jk2vSo09tYg+P8NzbfDwzkn/hMmaEbUIgmrUwVy2XX+xGf iEnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N7ct2S1EUw6i0gNejU7gxLZfhyQRJ8jeuhEiYT8J/DA=; b=F+MWRiABv1bFx5DE949o5oVQU0MaYvSGTvTrAT7prL9TbQsa7mKcHIe3YfRbXuYwYg ht/SuEjkt5d/mMQ1G1DlUojqc5jD6lYIXrv910J9hwd4RHLMtqbnJ5+wzEzPRB3WCnDF B7N9gNpbQiy94+7EMOTf6VoLSIKyNz5TXyWmWg8+X4ODSiFVEMK6LWNrrHLTs8NnHb3I HrWiCC1s+TgsA9Xmh4nkifATasV2bsJ0ENTzPztOzc391lMgewtZ4A8b2oWxshr9aB39 5lbrPAun6kdd8En2wPZSEaISGfEEKVzqUpFyhxZSW9DytLQqPX6DSs90vjsdL5qw7NsU rf5A== X-Gm-Message-State: APjAAAUFx2N/X7WY3FisKxeguxm+rDrGAeCS6+EEi36MjG5XIiF5E72h LwDwL978J1PSRJ9fgfIhTjaS1jf7 X-Google-Smtp-Source: APXvYqyTXnXSQyEuOghehO33gpqmQCAstMOZbKS5DesecJRC2XISaaP1oZT23deH7CyNwdxqV1ubYQ== X-Received: by 2002:a81:4b17:: with SMTP id y23mr1568169ywa.240.1565835019577; Wed, 14 Aug 2019 19:10:19 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:09 -0400 Message-Id: <20190815020928.9679-28-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c41 Subject: [Qemu-devel] [RFC PATCH v3 27/46] target/i386: introduce G*, R*, E* (general register) operands X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These address the general-purpose register file. The corresponding 32-bit or 64-bit register is passed as the operand value. Signed-off-by: Jan Bobek --- target/i386/translate.c | 78 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 2374876b38..779b692942 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4933,6 +4933,84 @@ DEF_INSNOP_ALIAS(Mq, M) DEF_INSNOP_ALIAS(Mdq, M) DEF_INSNOP_ALIAS(Mqq, M) =20 +/* + * 32-bit general register operands + */ +DEF_INSNOP_LDST(Gd, tcg_temp_i32, modrm_reg) +DEF_INSNOP_LDST(Rd, tcg_temp_i32, modrm_rm_direct) + +INSNOP_LDST(tcg_temp_i32, modrm_reg) +{ + assert(0 <=3D ptr && ptr < CPU_NB_REGS); + if (is_write) { + tcg_gen_extu_i32_tl(cpu_regs[ptr], arg); + } else { + tcg_gen_trunc_tl_i32(arg, cpu_regs[ptr]); + } +} +INSNOP_LDST(tcg_temp_i32, modrm_rm_direct) +{ + insnop_ldst(tcg_temp_i32, modrm_reg)(env, s, modrm, is_write, arg, ptr= ); +} + +DEF_INSNOP_LDST(MEd, tcg_temp_i32, Md) +DEF_INSNOP_EITHER(Ed, Rd, MEd) +DEF_INSNOP_LDST(MRdMw, tcg_temp_i32, Mw) +DEF_INSNOP_EITHER(RdMw, Rd, MRdMw) + +INSNOP_LDST(tcg_temp_i32, Md) +{ + if (is_write) { + tcg_gen_qemu_st_i32(arg, ptr, s->mem_index, MO_LEUL); + } else { + tcg_gen_qemu_ld_i32(arg, ptr, s->mem_index, MO_LEUL); + } +} +INSNOP_LDST(tcg_temp_i32, Mw) +{ + if (is_write) { + tcg_gen_qemu_st_i32(arg, ptr, s->mem_index, MO_LEUW); + } else { + tcg_gen_qemu_ld_i32(arg, ptr, s->mem_index, MO_LEUW); + } +} + +/* + * 64-bit general register operands + */ +DEF_INSNOP_LDST(Gq, tcg_temp_i64, modrm_reg) +DEF_INSNOP_LDST(Rq, tcg_temp_i64, modrm_rm_direct) + +INSNOP_LDST(tcg_temp_i64, modrm_reg) +{ +#ifdef TARGET_X86_64 + assert(0 <=3D ptr && ptr < CPU_NB_REGS); + if (is_write) { + tcg_gen_mov_i64(cpu_regs[ptr], arg); + } else { + tcg_gen_mov_i64(arg, cpu_regs[ptr]); + } +#else /* !TARGET_X86_64 */ + g_assert_not_reached(); +#endif /* !TARGET_X86_64 */ +} +INSNOP_LDST(tcg_temp_i64, modrm_rm_direct) +{ + insnop_ldst(tcg_temp_i64, modrm_reg)(env, s, modrm, is_write, arg, ptr= ); +} + +DEF_INSNOP_LDST(MEq, tcg_temp_i64, Mq) +DEF_INSNOP_EITHER(Eq, Rq, MEq) + +INSNOP_LDST(tcg_temp_i64, Mq) +{ + if (is_write) { + tcg_gen_qemu_st_i64(arg, ptr, s->mem_index, MO_LEQ); + } else { + tcg_gen_qemu_ld_i64(arg, ptr, s->mem_index, MO_LEQ); + } +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836756; cv=none; d=zoho.com; s=zohoarc; b=lnpKrvGSaAx6yPf88xP0n0vIAfuaIR/hz9gHewJowU0Xp0ymdVWH0w1Vs1l8fNyj3nw4bWubDLqHVd75dEdVDh7JrwrX/SO4c7oABU0U42IvHyGRs72I4107bEolWFILcfpGcKDHujrZKFSPv3QRfWdqlnXOHMJ6btMbvFVp1LE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836756; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=KTZS4tJ/LSxPvJ6feZUj0bPHzSOsx4OeZQC9Z8aW7OI=; b=cs4XC5kvb9DX4MC6zC+fCHqucs8b6L5ZIo+7xDscXlkpHVIRh5g+/zFgQRCJkUdz96WX8ngnNciaRfqQevDuyR+PglckmBYFXnlVhm0gQzqoU+5/x286w6FZbypYijGcEcpz7KazKlbqWP0Lm5CwBYHybpcpFmiFcQNgVUbp3VI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836756869958.3915871410254; Wed, 14 Aug 2019 19:39:16 -0700 (PDT) Received: from localhost ([::1]:37644 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5fV-0008Hp-Kd for importer@patchew.org; Wed, 14 Aug 2019 22:39:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46929) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dd-0006HV-0r for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Db-0000CA-33 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:24 -0400 Received: from mail-yb1-xb43.google.com ([2607:f8b0:4864:20::b43]:46815) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5DZ-00009Z-5W for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:21 -0400 Received: by mail-yb1-xb43.google.com with SMTP id x10so388132ybs.13 for ; Wed, 14 Aug 2019 19:10:20 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KTZS4tJ/LSxPvJ6feZUj0bPHzSOsx4OeZQC9Z8aW7OI=; b=s/JjnCGu7gTqBtb8b9W5KNiFaJ8lDMBoYNolIyiCDx4ECgyerucFHVKSmPKYiw4JRW hnVJHR4tSZe/VuMaEOrC8QvACDx5Q1+3RlapamAbpHCc3U6f3BKNxcO/c/EDeV1j/qRi g5Sd5hvO/phf+HuM+Ar04lRnUzOWHuX3va3ulYzV24Cb6hTJAPZbfiRaQyyJpYaeYVLE c7/bDTxVojEuLkgUPPF49n+Jv61v+h+nnKMUfswQ90L9n079aFt69ZuQQSWChF46D4KO KjlnVUtdGNtoBtzNnSLAgZwsDmRasOJwkJUfo3Nha3wTCMH4ui9MGNorFhSGRHVLutRC DmcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KTZS4tJ/LSxPvJ6feZUj0bPHzSOsx4OeZQC9Z8aW7OI=; b=gvmG/0wB9/M7u6KGMlDNWbj8pMxnhyFNLhHBkMI2xRTnvWYpol5/PtuhCrRnlZvlko BhHYK0pIEHIoOsEFfb7LzdFje4wUmSN6LrJt9RTsUaYG/FkYXkwTKEX53gkGTJcQwHct ZLmdKdtJTSwd1AMO0jxOJy8pOaziXcpCUJEvWrWmzhTpu+gTjrO62GVIseEjfZEyV7g7 gVCdNAbcRvPMAbVlWGBWDhjyLB1jhL1Cn0cP4GpY0RqsJRdTv7g3fETc6d7IfESH/6D7 GoyZuJH+qe9NbYgP/hVxrDKySTDJ4lyigd9lCH6AfJ4gDd/nPi3Hc0GQYDy2VtqxgQwT 04Wg== X-Gm-Message-State: APjAAAWx+evZ+rFr3SMCl7gtO6RlfUwflCfyBTPDVwdy0o3J8HrUwLMz Gshnua+MwR+F/I72NAxnbmeiysxd X-Google-Smtp-Source: APXvYqyWdLgsGoSKBSLs0/fiRBsVYDjbcZNnvIhxHsY8u9bxNHNjn60uYKS2EOqlIUpzv/FOlKd1jQ== X-Received: by 2002:a5b:642:: with SMTP id o2mr2107309ybq.70.1565835020296; Wed, 14 Aug 2019 19:10:20 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:10 -0400 Message-Id: <20190815020928.9679-29-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b43 Subject: [Qemu-devel] [RFC PATCH v3 28/46] target/i386: introduce P*, N*, Q* (MMX) operands X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These address the MMX-technology register file; the corresponding cpu_env offset is passed as the operand value. Notably, offset of the entire register is pased at all times, regardless of the operand-size suffix. Signed-off-by: Jan Bobek --- target/i386/translate.c | 79 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 779b692942..bd3c7f9356 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5011,6 +5011,85 @@ INSNOP_LDST(tcg_temp_i64, Mq) } } =20 +/* + * MMX-technology register operands + */ +#define DEF_INSNOP_MM(opT, opTmmid) \ + typedef unsigned int insnop_arg_t(opT); \ + typedef struct { \ + insnop_ctxt_t(opTmmid) mmid; \ + } insnop_ctxt_t(opT); \ + \ + INSNOP_INIT(opT) \ + { \ + return insnop_init(opTmmid)(&ctxt->mmid, env, s, modrm, is_write);= \ + } \ + INSNOP_PREPARE(opT) \ + { \ + const insnop_arg_t(opTmmid) mmid =3D \ + insnop_prepare(opTmmid)(&ctxt->mmid, env, s, modrm, is_write);= \ + const insnop_arg_t(opT) arg =3D \ + offsetof(CPUX86State, fpregs[mmid & 7].mmx); \ + insnop_finalize(opTmmid)(&ctxt->mmid, env, s, modrm, is_write, mmi= d); \ + return arg; \ + } \ + INSNOP_FINALIZE(opT) \ + { \ + } + +typedef unsigned int insnop_arg_t(mm_t0); +typedef struct {} insnop_ctxt_t(mm_t0); + +INSNOP_INIT(mm_t0) +{ + return 0; +} +INSNOP_PREPARE(mm_t0) +{ + return offsetof(CPUX86State, mmx_t0); +} +INSNOP_FINALIZE(mm_t0) +{ +} + +DEF_INSNOP_MM(P, modrm_reg) +DEF_INSNOP_ALIAS(Pd, P) +DEF_INSNOP_ALIAS(Pq, P) + +DEF_INSNOP_MM(N, modrm_rm_direct) +DEF_INSNOP_ALIAS(Nd, N) +DEF_INSNOP_ALIAS(Nq, N) + +DEF_INSNOP_LDST(MQd, mm_t0, Md) +DEF_INSNOP_LDST(MQq, mm_t0, Mq) +DEF_INSNOP_EITHER(Qd, Nd, MQd) +DEF_INSNOP_EITHER(Qq, Nq, MQq) + +INSNOP_LDST(mm_t0, Md) +{ + const insnop_arg_t(mm_t0) ofs =3D + offsetof(MMXReg, MMX_L(0)); + + assert(ptr =3D=3D s->A0); + if (is_write) { + gen_std_env_A0(s, arg + ofs); + } else { + gen_ldd_env_A0(s, arg + ofs); + } +} +INSNOP_LDST(mm_t0, Mq) +{ + const insnop_arg_t(mm_t0) ofs =3D + offsetof(MMXReg, MMX_Q(0)); + + assert(ptr =3D=3D s->A0); + if (is_write) { + gen_stq_env_A0(s, arg + ofs); + } else { + gen_ldq_env_A0(s, arg + ofs); + } +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836622; cv=none; d=zoho.com; s=zohoarc; b=OvG63oo5wueRpPf8gTe6BkxV5U9jKo9xyihcJ7rO/N/95MXQ3KgKIRlXgU1KLR6AtIE8wTvz+k2y0feFgUyizsmPsCtMaYJKZdId+T7dQofzpW1wsWyovX+jmf5rlNFNB70exwbCiUA9yc9Rbi9BMOxfIrv1uNria6uYXpfvhXU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836622; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=1bzHpiZ6FFENFVSOkmr62QPa02e2ssd1mMO1ztS9NeI=; b=lnTDMPYGTG2qNGVDyBvK2s8N4R1Gnlakwh9rKIvHbuuQX9PpHbIU7ZiBUkQ23jZcMOSmEAZwD2tzOWZ8fMmpq0teZCO6J0iAQuEFz3tm2M4tQFrr86ywn96HgE1QSbLOXCuL3DEY6BAzPE/G3KHAIWzHF9Jo+UZde2xnH84TstI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836622670906.8447115328406; Wed, 14 Aug 2019 19:37:02 -0700 (PDT) Received: from localhost ([::1]:37616 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5dM-0004k7-Un for importer@patchew.org; Wed, 14 Aug 2019 22:37:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46930) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dd-0006HW-3q for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Db-0000D4-Os for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:24 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:34554) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Db-0000Ae-2D for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:23 -0400 Received: by mail-yw1-xc43.google.com with SMTP id n126so305402ywf.1 for ; Wed, 14 Aug 2019 19:10:21 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1bzHpiZ6FFENFVSOkmr62QPa02e2ssd1mMO1ztS9NeI=; b=QaJwSGhRzeOR7h3B8V+6WbA0rM1/GzSwpdVLvhKS8/eikRAzm9qo9oiRg0iA65aQ9n lOGU+2MpeI3u2h4SBZl5AfIomUMxL11oQjri49Ew64gauYeq1ZGPtGbszQOTCXodG6W8 juMRWEE/CfQGEWBccSeYGEAqZAvLIpafM74ua2UnmtBn0DTppCxi3LrU+XEotm5MAF4U 2KTdKpB0RSxFBBEa+4g+ie8DOihlXSgbr3c2yeAm2X1qLeX0ebiOjDzz/Km7u5ac0OB/ N8OSTyip4xicrdlC3kmasgq5DDGnhPS8HzUBJIaiFZtN7Wcsc/nFhntk8d4eQOJBmw17 4TWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1bzHpiZ6FFENFVSOkmr62QPa02e2ssd1mMO1ztS9NeI=; b=kxGheIjSoreh1q529xSykc3xmFD6lubLC0PJhHtvZR9hbMspL9HBz1Nq3HhU25zDP1 MYadDindWjXTOnO7SSbBopbyMZjh5bgOjHlQmanxYwLpaDEIJ3L2MrLsEABWcgEFJMZU UUvpJedd4kviANunFR+Pwbd0tGqIFPeBiW2Rq8ElOqSM+8Fe7Gfdop1dALjXnmfyHaAu 22ETByh2kfQXjyt366FTLfuf4xm+pxt4amp2oi5OOfysx+umcElnluMD376LeQQ2/ZRx AqcUU54/TP6utfte2NF7c4UQVgu7Zt1gV4b8ZASIbK2KOTkVkSmnXpWWGWp89ECQYfVI KoVw== X-Gm-Message-State: APjAAAV2bIktJxVf3RdWkOIA7OApBwI1gBtVbaGRMXe3iUiSrelDWi6r AWxb7XgK3ZXd08dGhjalN4m0aMk4 X-Google-Smtp-Source: APXvYqz4sBlcJ/p1qHmii0+QgxRlqM5BbZZvaCoObx5jd/QuUeAmxKn1cQM0/awX0irBYkmkOK3s3A== X-Received: by 2002:a81:31cc:: with SMTP id x195mr1571820ywx.390.1565835021226; Wed, 14 Aug 2019 19:10:21 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:11 -0400 Message-Id: <20190815020928.9679-30-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 29/46] target/i386: introduce H*, V*, U*, W* (SSE/AVX) operands X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These address the SSE/AVX-technology register file. Offset of the entire corresponding register is passed as the operand value, regardless of operand-size suffix. Signed-off-by: Jan Bobek --- target/i386/translate.c | 117 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index bd3c7f9356..69233fd0f8 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4930,6 +4930,7 @@ DEF_INSNOP_ALIAS(Mb, M) DEF_INSNOP_ALIAS(Mw, M) DEF_INSNOP_ALIAS(Md, M) DEF_INSNOP_ALIAS(Mq, M) +DEF_INSNOP_ALIAS(Mhq, M) DEF_INSNOP_ALIAS(Mdq, M) DEF_INSNOP_ALIAS(Mqq, M) =20 @@ -5090,6 +5091,122 @@ INSNOP_LDST(mm_t0, Mq) } } =20 +/* + * SSE/AVX-technology registers + */ +#define DEF_INSNOP_XMM(opT, opTxmmid) \ + typedef unsigned int insnop_arg_t(opT); \ + typedef struct { \ + insnop_ctxt_t(opTxmmid) xmmid; \ + } insnop_ctxt_t(opT); \ + \ + INSNOP_INIT(opT) \ + { \ + return insnop_init(opTxmmid)(&ctxt->xmmid, env, s, modrm, is_write= ); \ + } \ + INSNOP_PREPARE(opT) \ + { \ + const insnop_arg_t(opTxmmid) xmmid =3D \ + insnop_prepare(opTxmmid)(&ctxt->xmmid, env, s, modrm, is_write= ); \ + const insnop_arg_t(opT) arg =3D \ + offsetof(CPUX86State, xmm_regs[xmmid]); \ + insnop_finalize(opTxmmid)(&ctxt->xmmid, env, s, \ + modrm, is_write, xmmid); \ + return arg; \ + } \ + INSNOP_FINALIZE(opT) \ + { \ + } + +typedef unsigned int insnop_arg_t(xmm_t0); +typedef struct {} insnop_ctxt_t(xmm_t0); + +INSNOP_INIT(xmm_t0) +{ + return 0; +} +INSNOP_PREPARE(xmm_t0) +{ + return offsetof(CPUX86State, xmm_t0); +} +INSNOP_FINALIZE(xmm_t0) +{ +} + +DEF_INSNOP_XMM(V, modrm_reg) +DEF_INSNOP_ALIAS(Vd, V) +DEF_INSNOP_ALIAS(Vq, V) +DEF_INSNOP_ALIAS(Vdq, V) +DEF_INSNOP_ALIAS(Vqq, V) + +DEF_INSNOP_XMM(U, modrm_rm_direct) +DEF_INSNOP_ALIAS(Ud, U) +DEF_INSNOP_ALIAS(Uq, U) +DEF_INSNOP_ALIAS(Udq, U) +DEF_INSNOP_ALIAS(Uqq, U) + +DEF_INSNOP_XMM(H, vex_v) +DEF_INSNOP_ALIAS(Hd, H) +DEF_INSNOP_ALIAS(Hq, H) +DEF_INSNOP_ALIAS(Hdq, H) +DEF_INSNOP_ALIAS(Hqq, H) + +DEF_INSNOP_LDST(MUd, xmm_t0, Md) +DEF_INSNOP_LDST(MUq, xmm_t0, Mq) +DEF_INSNOP_LDST(MWdq, xmm_t0, Mdq) +DEF_INSNOP_LDST(MUdqMhq, xmm_t0, Mhq) +DEF_INSNOP_EITHER(Wd, Ud, MUd) +DEF_INSNOP_EITHER(Wq, Uq, MUq) +DEF_INSNOP_EITHER(Wdq, Udq, MWdq) +DEF_INSNOP_EITHER(UdqMq, Udq, MUq) +DEF_INSNOP_EITHER(UdqMhq, Udq, MUdqMhq) + +INSNOP_LDST(xmm_t0, Md) +{ + const insnop_arg_t(xmm_t0) ofs =3D + offsetof(ZMMReg, ZMM_L(0)); + + assert(ptr =3D=3D s->A0); + if (is_write) { + gen_std_env_A0(s, arg + ofs); + } else { + gen_ldd_env_A0(s, arg + ofs); + } +} +INSNOP_LDST(xmm_t0, Mq) +{ + const insnop_arg_t(xmm_t0) ofs =3D + offsetof(ZMMReg, ZMM_Q(0)); + + assert(ptr =3D=3D s->A0); + if (is_write) { + gen_stq_env_A0(s, arg + ofs); + } else { + gen_ldq_env_A0(s, arg + ofs); + } +} +INSNOP_LDST(xmm_t0, Mdq) +{ + assert(ptr =3D=3D s->A0); + if (is_write) { + gen_sto_env_A0(s, arg); + } else { + gen_ldo_env_A0(s, arg); + } +} +INSNOP_LDST(xmm_t0, Mhq) +{ + const insnop_arg_t(xmm_t0) ofs =3D + offsetof(ZMMReg, ZMM_Q(1)); + + assert(ptr =3D=3D s->A0); + if (is_write) { + gen_stq_env_A0(s, arg + ofs); + } else { + gen_ldq_env_A0(s, arg + ofs); + } +} + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836488; cv=none; d=zoho.com; s=zohoarc; b=kmWCDZJu1/TxlBz1nK3SlHkG1yhfKIlL1RjsDBzxGHVDNgtIanmzhLOoz9P/9GUtkExBOlGYZvFEAfy/y0nxAQ5qiIdrq2TEVWe2MPVV5hB/eYu0dtyrzVLIxQC6rJNXIQQHi+BHn0CdcAm1N5hcNMI5IqeBBUswJxJmTh0gNN0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836488; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=BIVLjBZ4EhE+MzFCNvDW3yPbuhtWbciOLVJl7OstUps=; b=FDiOmfOn7ecUdqGtPZTPwpyCkzpgawbXRfM8DZDZvOb1fj7rrGG54yeZIEaRneaLRBqCDTrnGdaSM4urQuLsI3Nm6hfwX+1iONm5cDB3A5O9KQRP0ZC+jTYmvoK7xn0Mi9M6mIri4mteAXp1ImcaQhwhqVktqaPUcict5WAR0S8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836488344526.5522580307868; Wed, 14 Aug 2019 19:34:48 -0700 (PDT) Received: from localhost ([::1]:37588 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5bC-0001G1-Ov for importer@patchew.org; Wed, 14 Aug 2019 22:34:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46931) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dd-0006HX-15 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Db-0000DA-PF for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:24 -0400 Received: from mail-yb1-xb44.google.com ([2607:f8b0:4864:20::b44]:45964) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Db-0000BQ-2g for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:23 -0400 Received: by mail-yb1-xb44.google.com with SMTP id u32so388453ybi.12 for ; Wed, 14 Aug 2019 19:10:22 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BIVLjBZ4EhE+MzFCNvDW3yPbuhtWbciOLVJl7OstUps=; b=k2Onn4NhqdtoXPAfgYt+WUWQhyu0qngo4it5N9DIC7oZRg+KprcOjC7PCoOMl/PCh4 fcp0c1rfx+aRIFKKpw4EG6IpsjIZVC9S/0zfP1cQgpMw5A2h4wXEDvgfbBRGAdyrNft3 9YhegKk2smr1QKqlulXu5PX4ZajczNZQBzh8YUB3qhWRGzd1jpWbLFM8B/OI3dmTffhT q7ObpkHmE94rcrIkWu4QG825vQll9BiM/vJNH1KPwFH3chNye1RDIkoF/wjnGvaUaXx6 wf3OQwE0j8Z2tOd0Y3yTZXstQttLcURKCQEwkBp6X4++bniallDBf6b8rRoABlRkMeaF hjcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BIVLjBZ4EhE+MzFCNvDW3yPbuhtWbciOLVJl7OstUps=; b=OzdHDzvy4R2iO05DmsEUEzwkd2eMu75dJhSqSpvcMavg+Vc0pnm7mXgkM7LcllgtW1 /dS/vSbgMHr2aK9AfUOO4NQfzlZPdVEuZxnYcEyugtdgC5dHNcJ8oI07GgfmPGAAcmrU hhriLdMNLbEVeoIGvuen9ZSPHXqD6c12N/eMGRtJXe/l6SrBgdkIqDjJ6Ki4yf0WxDn6 1jIPK9RgwaojmjJszi+y0ir/3fuFDBOmU5Bh/2g/gblHtL2HimMH0TBWAtfnMrCXMUu7 +TsSqUoXgV/uAZ8itgHFvdwYhViWxQgSVOAAHaEE1nHbbInj+XxZwT+pszJSiDB7KHJJ GCJg== X-Gm-Message-State: APjAAAVo5GglSW3kSUF0DRm1Xh90t5SMm7/h76UYtnbnoD2XhsPM+Bxo S7FYiwS8mOJdYrSUXlagrBPHFjvQ X-Google-Smtp-Source: APXvYqwTiWfSAl5/RiWBZUJUklY3ikhvh7560VxxoN0PtZ1GPSvEmAV7hEjCONp0RlbGtCfC2W2tAQ== X-Received: by 2002:a25:6646:: with SMTP id z6mr60318ybm.67.1565835021968; Wed, 14 Aug 2019 19:10:21 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:12 -0400 Message-Id: <20190815020928.9679-31-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b44 Subject: [Qemu-devel] [RFC PATCH v3 30/46] target/i386: introduce code generators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" In this context, "code generators" are functions that receive decoded instruction operands and emit TCG ops implementing the correct instruction functionality. Introduce the naming macros first, actual generator macros will be added later. Signed-off-by: Jan Bobek --- target/i386/translate.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 69233fd0f8..b5f609e147 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5207,6 +5207,44 @@ INSNOP_LDST(xmm_t0, Mhq) } } =20 +/* + * Code generators + */ +#define gen_insn(mnem, argc, ...) \ + glue(gen_insn, argc)(mnem, ## __VA_ARGS__) +#define gen_insn0(mnem) \ + gen_ ## mnem ## _0 +#define gen_insn1(mnem, opT1) \ + gen_ ## mnem ## _1 ## opT1 +#define gen_insn2(mnem, opT1, opT2) \ + gen_ ## mnem ## _2 ## opT1 ## opT2 +#define gen_insn3(mnem, opT1, opT2, opT3) \ + gen_ ## mnem ## _3 ## opT1 ## opT2 ## opT3 +#define gen_insn4(mnem, opT1, opT2, opT3, opT4) \ + gen_ ## mnem ## _4 ## opT1 ## opT2 ## opT3 ## opT4 + +#define GEN_INSN0(mnem) \ + static void gen_insn0(mnem)( \ + CPUX86State *env, DisasContext *s) +#define GEN_INSN1(mnem, opT1) \ + static void gen_insn1(mnem, opT1)( \ + CPUX86State *env, DisasContext *s, \ + insnop_arg_t(opT1) arg1) +#define GEN_INSN2(mnem, opT1, opT2) \ + static void gen_insn2(mnem, opT1, opT2)( \ + CPUX86State *env, DisasContext *s, \ + insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2) +#define GEN_INSN3(mnem, opT1, opT2, opT3) \ + static void gen_insn3(mnem, opT1, opT2, opT3)( \ + CPUX86State *env, DisasContext *s, \ + insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2, \ + insnop_arg_t(opT3) arg3) +#define GEN_INSN4(mnem, opT1, opT2, opT3, opT4) \ + static void gen_insn4(mnem, opT1, opT2, opT3, opT4)( \ + CPUX86State *env, DisasContext *s, \ + insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2, \ + insnop_arg_t(opT3) arg3, insnop_arg_t(opT4) arg4) + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836874; cv=none; d=zoho.com; s=zohoarc; b=gLyMpWMPOh0BIWJKWEvMnl4otbyiPOcnpBwNZFb0ZAo2DFw7htihjcxkxTbzzbjpbK7iN7gSz405PghBu+wC7oEBmldYZId4Y2ZddfnD6jk2hP9B8FlChO2qX792r89SOujZSK5JY4TAGDYqkd3Ii5AXQL66tVB64arK8pnkpR0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836874; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=ZlioH6hGMavN5lo40XNXN+rXqiQDdeuysLOdHqsy6o8=; b=MSNeDpJKg08hLjC+YCkbbggjKJAUbI9hkyGoXq9Wp4KiH1USnNX4yP0H5fRFj8KJ/EqsCdB1KPcR5pganmGvX1M9/83SpWeZXw0K6Cx8CrPkNRaaEee/zn3POYedHvVKewIN5INMiM7O1G04cCiJwFybeIx3A1r6svyxqqPiKNA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836874620372.1206282270315; Wed, 14 Aug 2019 19:41:14 -0700 (PDT) Received: from localhost ([::1]:37672 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5hQ-0001tn-9R for importer@patchew.org; Wed, 14 Aug 2019 22:41:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46980) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5De-0006Js-Cy for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dd-0000Eo-0E for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:34555) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Db-0000Cj-Oy for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:24 -0400 Received: by mail-yw1-xc44.google.com with SMTP id n126so305419ywf.1 for ; Wed, 14 Aug 2019 19:10:23 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZlioH6hGMavN5lo40XNXN+rXqiQDdeuysLOdHqsy6o8=; b=KB6CSEk4KP/brjj/dgygHAM2Z3Uu8qhIK4Mbh0chqEYG396fFw4Mox3hK5C5lDXlDK 6dBvxnK9d/0A7cH1tCemixy27gT8gMBRLeqzujCOo1SS/so9YsA2HiSP3ank/dq7LFD2 PJc9YQl0gmFxItfkR+R7kDjyWUxgvyErrgbhT0sCr6VoUdbAGuZ143chP+NcX2MRGwLu 9g33yH8qI/rBYFK1oahspUP5K1P6Ze6v1TcNbVWgmOEifY3llV/gxRuZK9wdhGYJjtEv /rNLB/RiofiuMLwuRNC+1PqrUC2C8L6GYk2gPDplpPtUA6ST39uocW2ZpbOgENBK2ZsF n2KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZlioH6hGMavN5lo40XNXN+rXqiQDdeuysLOdHqsy6o8=; b=FbJjQyWwQ1wxCq9ju7qRSWfJoqiDsD341iKFzTSTcf7xObBvqmyeLGFRnlVmDOQQo3 IhuOT9Yj0q2OjmTHjtuqg4IKSVlxYPqkycNx4oNIsQlA9y59ar6fERcjUBGuKGLCnDJi dHk1PF4076nl0JwTXryJXH7e3GU5fcKCX4+XXSusc3jcbl1QTdB2L5bc0pfTyCMOO9Nc f7+iMnBfj2xxlGopGcVj8xAjOKLjsyGw3r7h8waVVnq9Amc5a6oQpqBRemunMJrWg6YW 8Dak/dUyvoDlWdEHcfi4/DDHa+PNHN1OVidHY2PUEcTseqDofJBJ4/2r8giJfO2v015x yO2A== X-Gm-Message-State: APjAAAUvsauB4zBmcf9RJMn0BC14QVtrPEaTtq6d3spURI6nZwi7SDfs 4eIxDhH6dduYHajiw0rvwbh3Wav1 X-Google-Smtp-Source: APXvYqy8sMIvMllomffAb1Y8laIpYFpzj/uqzdU/DgMb4m1zGDtQbQUpsV9wCw5R/Gc8q/t88mr2yw== X-Received: by 2002:a0d:d596:: with SMTP id x144mr1546696ywd.69.1565835023095; Wed, 14 Aug 2019 19:10:23 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:13 -0400 Message-Id: <20190815020928.9679-32-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c44 Subject: [Qemu-devel] [RFC PATCH v3 31/46] target/i386: introduce helper-based code generator macros X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Code generators defined using these macros rely on a helper function (as emitted by gen_helper_*). Signed-off-by: Jan Bobek --- target/i386/translate.c | 106 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index b5f609e147..b28d651b82 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5245,6 +5245,112 @@ INSNOP_LDST(xmm_t0, Mhq) insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2, \ insnop_arg_t(opT3) arg3, insnop_arg_t(opT4) arg4) =20 +#define DEF_GEN_INSN0_HELPER(mnem, helper) \ + GEN_INSN0(mnem) \ + { \ + gen_helper_ ## helper(cpu_env); \ + } + +#define DEF_GEN_INSN2_HELPER_EPD(mnem, helper, opT1, opT2) \ + GEN_INSN2(mnem, opT1, opT2) \ + { \ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); \ + \ + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); \ + gen_helper_ ## helper(cpu_env, arg1_ptr, arg2); \ + \ + tcg_temp_free_ptr(arg1_ptr); \ + } +#define DEF_GEN_INSN2_HELPER_DEP(mnem, helper, opT1, opT2) \ + GEN_INSN2(mnem, opT1, opT2) \ + { \ + const TCGv_ptr arg2_ptr =3D tcg_temp_new_ptr(); \ + \ + tcg_gen_addi_ptr(arg2_ptr, cpu_env, arg2); \ + gen_helper_ ## helper(arg1, cpu_env, arg2_ptr); \ + \ + tcg_temp_free_ptr(arg2_ptr); \ + } +#ifdef TARGET_X86_64 +#define DEF_GEN_INSN2_HELPER_EPQ(mnem, helper, opT1, opT2) \ + DEF_GEN_INSN2_HELPER_EPD(mnem, helper, opT1, opT2) +#define DEF_GEN_INSN2_HELPER_QEP(mnem, helper, opT1, opT2) \ + DEF_GEN_INSN2_HELPER_DEP(mnem, helper, opT1, opT2) +#else /* !TARGET_X86_64 */ +#define DEF_GEN_INSN2_HELPER_EPQ(mnem, helper, opT1, opT2) \ + GEN_INSN2(mnem, opT1, opT2) \ + { \ + g_assert_not_reached(); \ + } +#define DEF_GEN_INSN2_HELPER_QEP(mnem, helper, opT1, opT2) \ + GEN_INSN2(mnem, opT1, opT2) \ + { \ + g_assert_not_reached(); \ + } +#endif /* !TARGET_X86_64 */ +#define DEF_GEN_INSN2_HELPER_EPP(mnem, helper, opT1, opT2) \ + GEN_INSN2(mnem, opT1, opT2) \ + { \ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); \ + const TCGv_ptr arg2_ptr =3D tcg_temp_new_ptr(); \ + \ + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); \ + tcg_gen_addi_ptr(arg2_ptr, cpu_env, arg2); \ + gen_helper_ ## helper(cpu_env, arg1_ptr, arg2_ptr); \ + \ + tcg_temp_free_ptr(arg1_ptr); \ + tcg_temp_free_ptr(arg2_ptr); \ + } + +#define DEF_GEN_INSN3_HELPER_EPP(mnem, helper, opT1, opT2, opT3) \ + GEN_INSN3(mnem, opT1, opT2, opT3) \ + { \ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); \ + const TCGv_ptr arg3_ptr =3D tcg_temp_new_ptr(); \ + \ + assert(arg1 =3D=3D arg2); = \ + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); \ + tcg_gen_addi_ptr(arg3_ptr, cpu_env, arg3); \ + gen_helper_ ## helper(cpu_env, arg1_ptr, arg3_ptr); \ + \ + tcg_temp_free_ptr(arg1_ptr); \ + tcg_temp_free_ptr(arg3_ptr); \ + } +#define DEF_GEN_INSN3_HELPER_PPI(mnem, helper, opT1, opT2, opT3) \ + GEN_INSN3(mnem, opT1, opT2, opT3) \ + { \ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); \ + const TCGv_ptr arg2_ptr =3D tcg_temp_new_ptr(); \ + const TCGv_i32 arg3_r32 =3D tcg_temp_new_i32(); \ + \ + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); \ + tcg_gen_addi_ptr(arg2_ptr, cpu_env, arg2); \ + tcg_gen_movi_i32(arg3_r32, arg3); \ + gen_helper_ ## helper(arg1_ptr, arg2_ptr, arg3_r32); \ + \ + tcg_temp_free_ptr(arg1_ptr); \ + tcg_temp_free_ptr(arg2_ptr); \ + tcg_temp_free_i32(arg3_r32); \ + } + +#define DEF_GEN_INSN4_HELPER_PPI(mnem, helper, opT1, opT2, opT3, opT4) \ + GEN_INSN4(mnem, opT1, opT2, opT3, opT4) \ + { \ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); \ + const TCGv_ptr arg3_ptr =3D tcg_temp_new_ptr(); \ + const TCGv_i32 arg4_r32 =3D tcg_temp_new_i32(); \ + \ + assert(arg1 =3D=3D arg2); = \ + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); \ + tcg_gen_addi_ptr(arg3_ptr, cpu_env, arg3); \ + tcg_gen_movi_i32(arg4_r32, arg4); \ + gen_helper_ ## helper(arg1_ptr, arg3_ptr, arg4_r32); \ + \ + tcg_temp_free_ptr(arg1_ptr); \ + tcg_temp_free_ptr(arg3_ptr); \ + tcg_temp_free_i32(arg4_r32); \ + } + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837048; cv=none; d=zoho.com; s=zohoarc; b=gy9W5ssKkOogowCcqHVVdiLbcdUyzdlaBjGlABAOtQ/1zlt3qbaY7KKZ3rEIak2gGIfRk0iAe8qCJv/+ZPHROG6OtrP2zxlAU/VfF/NSccbMxa9Vuti65DoE/zXZsE1VEWxn4Ygv3YKui1YjXu4sdzNmSBNUSNG1wv88vQN+ynE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837048; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=ChWMIPl+dab6o+BediH5d8eY5VFridF7PbVi1UCCf4c=; b=bd7JfT3I/fTGNR3K+Co2yIvIx1OkfVmxWB9HSx9gJAQ3po30NBFC3hxHYfPDf+Fk9UYoPfrg7TQXx9x/EQfYejZrCA5hM1KozDHA9FvssnQA+/ILonBo4lGSTGnERtSMVZpFlvtWdHHO+nZxK3Ps52JXwEJkVH2nZL6VB5kGWbA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837048475718.7009089481271; Wed, 14 Aug 2019 19:44:08 -0700 (PDT) Received: from localhost ([::1]:37706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5kE-0005eq-FA for importer@patchew.org; Wed, 14 Aug 2019 22:44:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46970) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5De-0006JB-41 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dd-0000F2-2z for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:25 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:45962) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dc-0000Dn-VA for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:25 -0400 Received: by mail-yb1-xb41.google.com with SMTP id u32so388462ybi.12 for ; Wed, 14 Aug 2019 19:10:24 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ChWMIPl+dab6o+BediH5d8eY5VFridF7PbVi1UCCf4c=; b=GCzTHbuKq1+/cvJUsDndSXsF3DN/oieM/iQMqcOYe6zJ0vg82U8rKh73x9RCwVEe5a g6/s9NMO5m0XP83sVn/GucTZjWTfxCSKgoYM/cq9zj3kqLMr67fxOlF3rexX9Svtll8j 4wVGMKbL/ApADJtx+BmtK/W64gmNmw5v1HhydwWtKvnh7nN7MrEpP+wktemKt8Muk0cw EKG/InFa6CZUhIGYCTbZmYpyWQKh8ijRMoZCQ4x7kcnPF+/XKaKY4W0e3xYCng1/TaTC H1BP+6Hixyf8ALXQFf3PgS8H1CRkSWJWiT7AwJVYD6bCXmnwJ0dxDlgGXq6LmXDxG0u2 WZmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ChWMIPl+dab6o+BediH5d8eY5VFridF7PbVi1UCCf4c=; b=YhwLLdri6onUUmIz7/Um0eIq2p3gVObIR5/+RqlbluF5djIUHaGgQHClFQbsHl0ySH ZfXE4lHdOXZ4ayH9q8SwZzBlBFKgFTvJ1IcmGZTD9cmigq9x9O8S+XxdETv9rRZaM/vC 3SIdiDJmh2HxfqbH7bnLFqJFrPvzfHvszOvnc6Ei1cH/1poNX/I3LU60mL6oMh1aVc87 a80wS5ag/XyjeCisNVcu61mKOtOt9tzg/XTUOzhs1KiM2uoAPSIjp/GCBL4KdRxgw4LH mL+c+0Mudk4GVr/rt8dDW+naMUWEjHHd4+dxuhnlIfpqv91or2DzlFroPwO/1L/i32o+ RjUQ== X-Gm-Message-State: APjAAAWu6QDawEnf/N79Vckao+25d/A4qT6zPbzKg9aNlIfqDduS8xnf GO1pr11JH9tOiwX966ZIuGpaPvWP X-Google-Smtp-Source: APXvYqxcijV8iwBOtSQjefYwFM2icUCZISZhudJLROLl40sksa8//EinJQXSeFDlkWuC6FiOk6CxDQ== X-Received: by 2002:a25:2f42:: with SMTP id v63mr1956098ybv.228.1565835023859; Wed, 14 Aug 2019 19:10:23 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:14 -0400 Message-Id: <20190815020928.9679-33-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b41 Subject: [Qemu-devel] [RFC PATCH v3 32/46] target/i386: introduce gvec-based code generator macros X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Code generators defined using these macros rely on a gvec operation (i.e. tcg_gen_gvec_*). Signed-off-by: Jan Bobek --- target/i386/translate.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index b28d651b82..75652afb45 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -23,6 +23,7 @@ #include "disas/disas.h" #include "exec/exec-all.h" #include "tcg-op.h" +#include "tcg-op-gvec.h" #include "exec/cpu_ldst.h" #include "exec/translator.h" =20 @@ -5351,6 +5352,18 @@ INSNOP_LDST(xmm_t0, Mhq) tcg_temp_free_i32(arg4_r32); \ } =20 +#define DEF_GEN_INSN2_GVEC(mnem, gvec, opT1, opT2, vece, oprsz, maxsz) \ + GEN_INSN2(mnem, opT1, opT2) \ + { \ + tcg_gen_gvec_ ## gvec(vece, arg1, arg2, oprsz, maxsz); \ + } + +#define DEF_GEN_INSN3_GVEC(mnem, gvec, opT1, opT2, opT3, vece, oprsz, maxs= z) \ + GEN_INSN3(mnem, opT1, opT2, opT3) \ + { \ + tcg_gen_gvec_ ## gvec(vece, arg1, arg2, arg3, oprsz, maxsz); \ + } + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836693; cv=none; d=zoho.com; s=zohoarc; b=JKaP9kVScZooPTLTFSVTsFAzMyW6TvXhbtm+T1pxYGkAg/u6/tWCefC8enxMXLN01ZnbL3PmWvEtiKW2eOxLtuiehWpIOxxX30ZnK9bRj6I77OucexawU//3K7UtnZkenf4XZFuW9SCoU3IQQH0qh3bE5JaCEurr915XY94wgkg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836693; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=85q8nHDAFiG6B9LJyV7irB3KAWqhTWFUgDopfKUI68Y=; b=ZOk/qIXHd8+6imshAoo0KE3o53dAaGZiW2yPqh9wi/7R07aWL3buzmswfuqtFS5z/cQ83lBxIcN8CY7ec1sXzLKmZa8hAuQvdeYoAiQgleMIXsLwFAC+lUu2tfHKk9HlMcMgBXP5aLKDmTMeSYvfnbFi52ZSSCxTyUsbIzvnUBg= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836693892626.5898261010552; Wed, 14 Aug 2019 19:38:13 -0700 (PDT) Received: from localhost ([::1]:37638 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5eW-0006iE-8m for importer@patchew.org; Wed, 14 Aug 2019 22:38:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46985) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Df-0006KQ-1W for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dd-0000Fr-FR for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:44238) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dd-0000FH-BO for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:25 -0400 Received: by mail-yw1-xc42.google.com with SMTP id l79so286428ywe.11 for ; Wed, 14 Aug 2019 19:10:25 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=85q8nHDAFiG6B9LJyV7irB3KAWqhTWFUgDopfKUI68Y=; b=XqxMWsqY/XqXuYHZccGgG0e3DOwQqblwhtZTQAkiqhw2cp3EWhO7gLuH4e6/S51Bg0 MOL5RBP87Ennz4gKu6arn0Jrxz7jDkxJkToYGvdNEILnZKJl+jA0PLu3tW2nlORMspt4 89TMIHBvNjvti9uGPNQFH17pBrZH52DVqNb4DzzuaBHZpg/WTW4XJhCdBL4YThhMXeaQ Vfrq8KSP+3nacKWChiTBUx8TBGsK6sK4krVIWp3T+WnogLpcRFyx7t5sQVed/PH687a1 gXVALYKPyDg8GVAWpRpnlYQLKjtZsooEzqs5YP2AufQRUo1ZEaVBk/0dbZLnvUNofDYJ yx9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=85q8nHDAFiG6B9LJyV7irB3KAWqhTWFUgDopfKUI68Y=; b=X6VyFYyxSYlEF911prKwQRa/B2cAWflSRGoOToLHofqj66D9wZHdgTCF/srqnS5stn +e/nN+++DfD0U38PUYKfR7GGwuIACifdzSCTNYHPHn6/6aD0UhQ9TnMmoP1DeaFCcLtv 0IjZkBTKeAqIwnAirVDolmUOgfdpOISFD2qdAAQ6p0S4lnugFOdxLEJrmmtvZT0Zg2l+ fsPXcSF39Hvy5vrQont9hLQLTf2JVD+ctBFEy/tBXkScoYfsEbFW5ELpd8hcyxJgyDEw c8TxVK+dE7oRLOPUOUTGBK71Bl292jxJJv3Q/Qqd8pRQuwLr5ICsKsy8pKBrebb/7YIC ztwg== X-Gm-Message-State: APjAAAXMbWpW9rjCQB7qejJBn7MX/28dIygWjBj1x/PVfCS4xbLggKM0 2v20TZ990ZhOo4xkbegrmSp4CMLR X-Google-Smtp-Source: APXvYqwzn8By1mumwbQqx4xuEPBtcE8uYOdcRGXbcBkjolyZStRzpXLdWOZNcVP0Sn84pkBgG9mkKQ== X-Received: by 2002:a81:2841:: with SMTP id o62mr1598527ywo.238.1565835024702; Wed, 14 Aug 2019 19:10:24 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:15 -0400 Message-Id: <20190815020928.9679-34-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 33/46] target/i386: introduce sse-opcode.inc.h X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This header is intended to eventually list all supported instructions along with some useful details (e.g. mnemonics, opcode, operands etc.) It shall be used (along with some preprocessor magic) anytime we need to automatically generate code for every instruction. Signed-off-by: Jan Bobek --- target/i386/sse-opcode.inc.h | 69 ++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 target/i386/sse-opcode.inc.h diff --git a/target/i386/sse-opcode.inc.h b/target/i386/sse-opcode.inc.h new file mode 100644 index 0000000000..c5e81a6a80 --- /dev/null +++ b/target/i386/sse-opcode.inc.h @@ -0,0 +1,69 @@ +#define FMTI____ (0, 0, 0, ) +#define FMTI__R__ (1, 1, 0, r) +#define FMTI__RR__ (2, 2, 0, rr) +#define FMTI__W__ (1, 0, 1, w) +#define FMTI__WR__ (2, 1, 1, wr) +#define FMTI__WRR__ (3, 2, 1, wrr) +#define FMTI__WRRR__ (4, 3, 1, wrrr) + +#define FMTI__(prop, fmti) FMTI_ ## prop ## __ fmti + +#define FMTI_ARGC__(argc, argc_rd, argc_wr, lower) argc +#define FMTI_ARGC_RD__(argc, argc_rd, argc_wr, lower) argc_rd +#define FMTI_ARGC_WR__(argc, argc_rd, argc_wr, lower) argc_wr +#define FMTI_LOWER__(argc, argc_rd, argc_wr, lower) lower + +#define FMT_ARGC(fmt) FMTI__(ARGC, FMTI__ ## fmt ## __) +#define FMT_ARGC_RD(fmt) FMTI__(ARGC_RD, FMTI__ ## fmt ## __) +#define FMT_ARGC_WR(fmt) FMTI__(ARGC_WR, FMTI__ ## fmt ## __) +#define FMT_LOWER(fmt) FMTI__(LOWER, FMTI__ ## fmt ## __) +#define FMT_UPPER(fmt) fmt + +#ifndef OPCODE +# define OPCODE(mnem, opcode, feat, fmt, ...) +#endif /* OPCODE */ + +#ifndef OPCODE_GRP +# define OPCODE_GRP(grpname, opcode) +#endif /* OPCODE_GRP */ + +#ifndef OPCODE_GRP_BEGIN +# define OPCODE_GRP_BEGIN(grpname) +#endif /* OPCODE_GRP_BEGIN */ + +#ifndef OPCODE_GRPMEMB +# define OPCODE_GRPMEMB(grpname, mnem, opcode, feat, fmt, ...) +#endif /* OPCODE_GRPMEMB */ + +#ifndef OPCODE_GRP_END +# define OPCODE_GRP_END(grpname) +#endif /* OPCODE_GRP_END */ + +#undef FMTI____ +#undef FMTI__R__ +#undef FMTI__RR__ +#undef FMTI__W__ +#undef FMTI__WR__ +#undef FMTI__WRR__ +#undef FMTI__WRRR__ + +#undef FMTI__ + +#undef FMTI_ARGC__ +#undef FMTI_ARGC_RD__ +#undef FMTI_ARGC_WR__ +#undef FMTI_LOWER__ + +#undef FMT_ARGC +#undef FMT_ARGC_RD +#undef FMT_ARGC_WR +#undef FMT_LOWER +#undef FMT_UPPER + +#undef LEG +#undef VEX +#undef OPCODE +#undef OPCODE_GRP +#undef OPCODE_GRP_BEGIN +#undef OPCODE_GRPMEMB +#undef OPCODE_GRP_END --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836700; cv=none; d=zoho.com; s=zohoarc; b=azsUcmcEtvhOSPyISvtJe2rJv+3dRS00Kcr1Sukzh2+6KGt+zFlgsXdR7XRA5bjWNIZ7iFBBjn+YHrFvcgBLVayH3miTE+nv4by7FmaeyZ1YxLKqCagkZw0V3tCw9A53f5zT4o73bwJIOzgSm2ylgroVOwLR56XT16afuu5PEJM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836700; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=qFqxp1mdJWiFIlgrVcvkkZuxlJcRYoAmYu88MoR1zMw=; b=XE+fVUp5zoe986uwNI1kj+J9zaeaYiULJWeva8xnMcwNEubtS7U6//NeLrliB19EcaFhmjnNo/L0QYfZoWltMEkAbrAredwYVzFm/FivEQipwT0JoFmh60rHfd7KcKw5yI+3keVbjk4uKY9tNmdDqje4aU66UzGl7CgXJqiys3A= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836700923503.87329845013903; Wed, 14 Aug 2019 19:38:20 -0700 (PDT) Received: from localhost ([::1]:37641 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5ec-0006rY-UQ for importer@patchew.org; Wed, 14 Aug 2019 22:38:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47019) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dg-0006NE-EL for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5De-0000Hf-Jy for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:28 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:36577) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5De-0000H1-EA for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: by mail-yw1-xc42.google.com with SMTP id m11so301867ywh.3 for ; Wed, 14 Aug 2019 19:10:26 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qFqxp1mdJWiFIlgrVcvkkZuxlJcRYoAmYu88MoR1zMw=; b=qII2byqFNdtUZ1SkdNM29p8J8eb1r/tyDggTZV9XfdR6AtxO7Vl1PQ3Q4YW5umwH+r dtrYPqk+iMzF8wtjuMBbmRPVNN9tzgeu2GnnvoWRnd87LZqV1iQA68bQKNlt03bKhqME sr3bX75MJQTNILJQdVM2nFYNb6aO3mrXNYFKsTEbSAVDFo10espAoxKvb3rJ36TpQP0d 0YA/saXKwn5JHFBPBfDTo0JqeHaDdJTC1MhXSQ/ACy+lEpD/d+xg4YHExn5YK6/ZbLBU WfO4A1PqBZIzovB5YOg/M0H+KNZE6VLM5N9qrFTiFM934njgZcsYN0Z0ziSDjt/icUPj APWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qFqxp1mdJWiFIlgrVcvkkZuxlJcRYoAmYu88MoR1zMw=; b=hC03VBNuDD5ML3ewrha4ARbmTES6GtoElnxrlPRETD/BSviNIpIRnVftfwwX4NYyhx 45kKDQZm26IfoclnnPzmWE0mTzKkKCus0v6uQn1zyljwBNVwfzGdvtNBGMkSvX0nufpC 9+jwecXaZod+lrsyl7HOSOjOOGibSlG1zg8cwsvhy8eJzXugQ3uEJVzLodE40bv3QlKr ImmGUQQk52e5BUQei089Udjnwc3rKXseMwKU5eBGPDzSsoQnEGwx7M6o88qpNRhJWWWs xG1Ai5y0C4iz7Vp/FxRa/JatB93ETpuWY0C+zXBiG8JQuHGn8TxAIQXBnxyXahpK/Tn1 /gUg== X-Gm-Message-State: APjAAAXx5/g8Pq83JFaV7Eg+V2zDedFIbL+xQAFfnpHbogOo/xUZmZ+x +eoWZFt3goIm6nnZXbsgwNiEHbnV X-Google-Smtp-Source: APXvYqz4aSLAjGdSb6DNQ2tcYTkUnv6QlI7KdIkwWqqpG5TXVfroDzt2WopvPVKRSwF2p7vvRtdjIQ== X-Received: by 2002:a81:50a:: with SMTP id 10mr1586981ywf.129.1565835025604; Wed, 14 Aug 2019 19:10:25 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:16 -0400 Message-Id: <20190815020928.9679-35-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 34/46] target/i386: introduce instruction translator macros X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Instruction "translators" are responsible for decoding and loading instruction operands, calling the passed-in code generator, and storing the operands back (if applicable). Once a translator returns, the instruction has been translated to TCG ops, hence the name. Signed-off-by: Jan Bobek --- target/i386/translate.c | 237 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 75652afb45..76c27d0380 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5364,6 +5364,228 @@ INSNOP_LDST(xmm_t0, Mhq) tcg_gen_gvec_ ## gvec(vece, arg1, arg2, arg3, oprsz, maxsz); \ } =20 +/* + * Instruction translators + */ +#define translate_insn(argc, ...) \ + glue(translate_insn, argc)(__VA_ARGS__) +#define translate_insn0() \ + translate_insn_0 +#define translate_insn1(opT1) \ + translate_insn_1 ## opT1 +#define translate_insn2(opT1, opT2) \ + translate_insn_2 ## opT1 ## opT2 +#define translate_insn3(opT1, opT2, opT3) \ + translate_insn_3 ## opT1 ## opT2 ## opT3 +#define translate_insn4(opT1, opT2, opT3, opT4) \ + translate_insn_4 ## opT1 ## opT2 ## opT3 ## opT4 +#define translate_group(grpname) \ + translate_group_ ## grpname + +static void translate_insn0()( + CPUX86State *env, DisasContext *s, int modrm, + int ck_cpuid_feat, unsigned int argc_wr, + void (*gen_insn_fp)(CPUX86State *, DisasContext *)) +{ + if (ck_cpuid(env, s, ck_cpuid_feat)) { + gen_illegal_opcode(s); + return; + } + + (*gen_insn_fp)(env, s); +} + +#define DEF_TRANSLATE_INSN1(opT1) \ + static void translate_insn1(opT1)( \ + CPUX86State *env, DisasContext *s, int modrm, \ + int ck_cpuid_feat, unsigned int argc_wr, \ + void (*gen_insn1_fp)(CPUX86State *, DisasContext *, \ + insnop_arg_t(opT1))) \ + { \ + insnop_ctxt_t(opT1) ctxt1; \ + \ + const bool is_write1 =3D (1 <=3D argc_wr); = \ + \ + int ret =3D ck_cpuid(env, s, ck_cpuid_feat); \ + if (!ret) { \ + ret =3D insnop_init(opT1)(&ctxt1, env, s, modrm, is_write1); \ + } \ + if (!ret) { \ + const insnop_arg_t(opT1) arg1 =3D \ + insnop_prepare(opT1)(&ctxt1, env, s, modrm, is_write1); \ + \ + (*gen_insn1_fp)(env, s, arg1); \ + \ + insnop_finalize(opT1)(&ctxt1, env, s, modrm, is_write1, arg1);= \ + } else { \ + gen_illegal_opcode(s); \ + } \ + } + +#define DEF_TRANSLATE_INSN2(opT1, opT2) \ + static void translate_insn2(opT1, opT2)( \ + CPUX86State *env, DisasContext *s, int modrm, \ + int ck_cpuid_feat, unsigned int argc_wr, \ + void (*gen_insn2_fp)(CPUX86State *, DisasContext *, \ + insnop_arg_t(opT1), insnop_arg_t(opT2))) \ + { \ + insnop_ctxt_t(opT1) ctxt1; \ + insnop_ctxt_t(opT2) ctxt2; \ + \ + const bool is_write1 =3D (1 <=3D argc_wr); = \ + const bool is_write2 =3D (2 <=3D argc_wr); = \ + \ + int ret =3D ck_cpuid(env, s, ck_cpuid_feat); \ + if (!ret) { \ + ret =3D insnop_init(opT1)(&ctxt1, env, s, modrm, is_write1); \ + } \ + if (!ret) { \ + ret =3D insnop_init(opT2)(&ctxt2, env, s, modrm, is_write2); \ + } \ + if (!ret) { \ + const insnop_arg_t(opT1) arg1 =3D \ + insnop_prepare(opT1)(&ctxt1, env, s, modrm, is_write1); \ + const insnop_arg_t(opT2) arg2 =3D \ + insnop_prepare(opT2)(&ctxt2, env, s, modrm, is_write2); \ + \ + (*gen_insn2_fp)(env, s, arg1, arg2); \ + \ + insnop_finalize(opT1)(&ctxt1, env, s, modrm, is_write1, arg1);= \ + insnop_finalize(opT2)(&ctxt2, env, s, modrm, is_write2, arg2);= \ + } else { \ + gen_illegal_opcode(s); \ + } \ + } + +#define DEF_TRANSLATE_INSN3(opT1, opT2, opT3) \ + static void translate_insn3(opT1, opT2, opT3)( \ + CPUX86State *env, DisasContext *s, int modrm, \ + int ck_cpuid_feat, unsigned int argc_wr, \ + void (*gen_insn3_fp)(CPUX86State *, DisasContext *, \ + insnop_arg_t(opT1), insnop_arg_t(opT2), \ + insnop_arg_t(opT3))) \ + { \ + insnop_ctxt_t(opT1) ctxt1; \ + insnop_ctxt_t(opT2) ctxt2; \ + insnop_ctxt_t(opT3) ctxt3; \ + \ + const bool is_write1 =3D (1 <=3D argc_wr); = \ + const bool is_write2 =3D (2 <=3D argc_wr); = \ + const bool is_write3 =3D (3 <=3D argc_wr); = \ + \ + int ret =3D ck_cpuid(env, s, ck_cpuid_feat); \ + if (!ret) { \ + ret =3D insnop_init(opT1)(&ctxt1, env, s, modrm, is_write1); \ + } \ + if (!ret) { \ + ret =3D insnop_init(opT2)(&ctxt2, env, s, modrm, is_write2); \ + } \ + if (!ret) { \ + ret =3D insnop_init(opT3)(&ctxt3, env, s, modrm, is_write3); \ + } \ + if (!ret) { \ + const insnop_arg_t(opT1) arg1 =3D \ + insnop_prepare(opT1)(&ctxt1, env, s, modrm, is_write1); \ + const insnop_arg_t(opT2) arg2 =3D \ + insnop_prepare(opT2)(&ctxt2, env, s, modrm, is_write2); \ + const insnop_arg_t(opT3) arg3 =3D \ + insnop_prepare(opT3)(&ctxt3, env, s, modrm, is_write3); \ + \ + (*gen_insn3_fp)(env, s, arg1, arg2, arg3); \ + \ + insnop_finalize(opT1)(&ctxt1, env, s, modrm, is_write1, arg1);= \ + insnop_finalize(opT2)(&ctxt2, env, s, modrm, is_write2, arg2);= \ + insnop_finalize(opT3)(&ctxt3, env, s, modrm, is_write3, arg3);= \ + } else { \ + gen_illegal_opcode(s); \ + } \ + } + +#define DEF_TRANSLATE_INSN4(opT1, opT2, opT3, opT4) \ + static void translate_insn4(opT1, opT2, opT3, opT4)( \ + CPUX86State *env, DisasContext *s, int modrm, \ + int ck_cpuid_feat, unsigned int argc_wr, \ + void (*gen_insn4_fp)(CPUX86State *, DisasContext *, \ + insnop_arg_t(opT1), insnop_arg_t(opT2), \ + insnop_arg_t(opT3), insnop_arg_t(opT4))) \ + { \ + insnop_ctxt_t(opT1) ctxt1; \ + insnop_ctxt_t(opT2) ctxt2; \ + insnop_ctxt_t(opT3) ctxt3; \ + insnop_ctxt_t(opT4) ctxt4; \ + \ + const bool is_write1 =3D (1 <=3D argc_wr); = \ + const bool is_write2 =3D (2 <=3D argc_wr); = \ + const bool is_write3 =3D (3 <=3D argc_wr); = \ + const bool is_write4 =3D (4 <=3D argc_wr); = \ + \ + int ret =3D ck_cpuid(env, s, ck_cpuid_feat); \ + if (!ret) { \ + ret =3D insnop_init(opT1)(&ctxt1, env, s, modrm, is_write1); \ + } \ + if (!ret) { \ + ret =3D insnop_init(opT2)(&ctxt2, env, s, modrm, is_write2); \ + } \ + if (!ret) { \ + ret =3D insnop_init(opT3)(&ctxt3, env, s, modrm, is_write3); \ + } \ + if (!ret) { \ + ret =3D insnop_init(opT4)(&ctxt4, env, s, modrm, is_write4); \ + } \ + if (!ret) { \ + const insnop_arg_t(opT1) arg1 =3D \ + insnop_prepare(opT1)(&ctxt1, env, s, modrm, is_write1); \ + const insnop_arg_t(opT2) arg2 =3D \ + insnop_prepare(opT2)(&ctxt2, env, s, modrm, is_write2); \ + const insnop_arg_t(opT3) arg3 =3D \ + insnop_prepare(opT3)(&ctxt3, env, s, modrm, is_write3); \ + const insnop_arg_t(opT4) arg4 =3D \ + insnop_prepare(opT4)(&ctxt4, env, s, modrm, is_write4); \ + \ + (*gen_insn4_fp)(env, s, arg1, arg2, arg3, arg4); \ + \ + insnop_finalize(opT1)(&ctxt1, env, s, modrm, is_write1, arg1);= \ + insnop_finalize(opT2)(&ctxt2, env, s, modrm, is_write2, arg2);= \ + insnop_finalize(opT3)(&ctxt3, env, s, modrm, is_write3, arg3);= \ + insnop_finalize(opT4)(&ctxt4, env, s, modrm, is_write4, arg4);= \ + } else { \ + gen_illegal_opcode(s); \ + } \ + } + +#define OPCODE_GRP_BEGIN(grpname) \ + static void translate_group(grpname)( \ + CPUX86State *env, DisasContext *s, int modrm) \ + { \ + insnop_ctxt_t(modrm_reg) regctxt; \ + \ + int ret =3D insnop_init(modrm_reg)(®ctxt, env, s, modrm, 0); \ + if (!ret) { \ + const insnop_arg_t(modrm_reg) reg =3D \ + insnop_prepare(modrm_reg)(®ctxt, env, s, modrm, 0); \ + \ + switch (reg & 7) { +#define OPCODE_GRPMEMB(grpname, mnem, opcode, feat, fmt, ...) \ + case opcode: \ + translate_insn(FMT_ARGC(fmt), ## __VA_ARGS__)( \ + env, s, modrm, CK_CPUID_ ## feat, FMT_ARGC_WR(fmt), \ + gen_insn(mnem, FMT_ARGC(fmt), ## __VA_ARGS__)); \ + break; +#define OPCODE_GRP_END(grpname) \ + default: \ + ret =3D 1; \ + break; \ + } \ + \ + insnop_finalize(modrm_reg)(®ctxt, env, s, modrm, 0, reg); \ + } \ + \ + if (ret) { \ + gen_illegal_opcode(s); \ + } \ + } +#include "sse-opcode.inc.h" + static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b) { enum { @@ -5383,6 +5605,21 @@ static void gen_sse_ng(CPUX86State *env, DisasContex= t *s, int b) | (s->prefix & PREFIX_REPNZ ? P_F2 : 0) | (REX_W(s) > 0 ? W_1 : W_0)) { =20 +#define LEG(p, m, w, opcode) \ + case opcode | M_ ## m | P_ ## p | W_ ## w: +#define OPCODE(mnem, cases, feat, fmt, ...) \ + cases { \ + const int modrm =3D 0 < FMT_ARGC(fmt) ? x86_ldub_code(env, s) : -1= ; \ + translate_insn(FMT_ARGC(fmt), ## __VA_ARGS__)( \ + env, s, modrm, CK_CPUID_ ## feat, FMT_ARGC_WR(fmt), \ + gen_insn(mnem, FMT_ARGC(fmt), ## __VA_ARGS__)); \ + } return; +#define OPCODE_GRP(grpname, cases) \ + cases { \ + const int modrm =3D x86_ldub_code(env, s); \ + translate_group(grpname)(env, s, modrm); \ + } return; +#include "sse-opcode.inc.h" default: gen_sse(env, s, b); return; --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835670; cv=none; d=zoho.com; s=zohoarc; b=Ec+efpJ6FZWvKbXT27I4ythxj2W6WhmgTu8EY5A1QNlcnEfrQtqfBR5r1f2UMLrRD790vmXDypQHHkKywFtUjDXbHYxDKcoToSnZfpfrU9MuXPAx8UcJAVrDlOjV2vfVeYR7ji3UUzI65+ElDrEK8D+ogl6xYwv2SbShCPZ2ewM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835670; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=WM8y0lT7y/DeSDBY8jUzYMxHv/vhpAG3omkdmTHu+ac=; b=Othxbi6ePaejvfcS0vrJlAFdgxEnpt6hB90k0OXXA2Ud//wCmIiFFzC7OH3vyCJ1I7SU7AoGv9A5a4TGQVuHOrYU1CytEnLbHekEx9r4iieMm0T9I4/l/ir7UL2LlHnigBunNcJPn8x0sPilUBUOioKMt1Xh07xTYyekh40UnOM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835669996961.9300104592543; Wed, 14 Aug 2019 19:21:09 -0700 (PDT) Received: from localhost ([::1]:37436 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5O0-0001xA-B5 for importer@patchew.org; Wed, 14 Aug 2019 22:21:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47014) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dg-0006Mb-5n for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5De-0000I8-VT for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:27 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:42257) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5De-0000Hj-Qg for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:26 -0400 Received: by mail-yb1-xb41.google.com with SMTP id h8so397396ybq.9 for ; Wed, 14 Aug 2019 19:10:26 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WM8y0lT7y/DeSDBY8jUzYMxHv/vhpAG3omkdmTHu+ac=; b=mXqW0KyJURums63ggkntZqsGZ3QMIFbrd+9BZTBQEo3Ti57a+L8fQWLNO3pFOgnxuX lSi4b+Xi8db58DI/9AX1EpvFCcBTahtU+8WBCKZh6kWYQjrIAQt/W5VOOc/rO3RIHyII Y6nHtz+gddirw5eZIj7vbc7Jr8/n3qdQA+p6uJbpY26ZsCCm1XWS22NtrjRIc2FxW7kK XetNq4p+Q5PBxlq+5ct9aZbNUGy2rMymgXjH38q+pde+ef4MTTzU5tnZKQQs8ItxJnF8 IWPsQJmRE6S7Lt+z+rV2nDYbQxxDVDoPc2QNpg04i8ky3b15EieQiPx8uh4q7C8w/ZU/ uHJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WM8y0lT7y/DeSDBY8jUzYMxHv/vhpAG3omkdmTHu+ac=; b=JusK3l+8eWGQ5iWaWMF9NhUCWToGLhS4peBzBcg7NVa/c0S2g3XpzKhXk2VhOdna/5 H2xjl+ou5rtebPl2+M6K4KBBUsA+dXELNzqgJJm3gbMNaIO7HxRlpDaYqNoRZGzZV8ve ydNxmeAxqP0Gp1arfVs2OxxmWv5NmfWzAfEOd4R0wDpArIInXyIS6zTPV2g0Hnq9DSmw Arrmd5DuT3nJVruYlj+T4wVY6m/V9oOad2fqUEXD+tq2O2GDadBgb5KHjuEeM2QbaEk6 0idN39Vk4s3CN/vWwuYXKK2sMRjYVIkQel2I2+S8OSdTyl95zKcLCHACGPSUk5xj8oCE omXw== X-Gm-Message-State: APjAAAWEGROV2VzBe9tk8Mv5/9VCBW9Yu2QRz/GrFInrGt703oxxaOyM pABs9UJWmFVQBVGnqLQ2qDVYRtEG X-Google-Smtp-Source: APXvYqxlofHlYlT7F8XZ+Fge85cKTdr3CXvpHEmm05PFYSs8/1EcG2YHaX42IESLuR9kRpSwNfkEbQ== X-Received: by 2002:a25:1a42:: with SMTP id a63mr2006997yba.446.1565835026171; Wed, 14 Aug 2019 19:10:26 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:17 -0400 Message-Id: <20190815020928.9679-36-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b41 Subject: [Qemu-devel] [RFC PATCH v3 35/46] target/i386: introduce MMX translators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use the translator macros to define instruction translators required by MMX instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 76c27d0380..4fecb0d240 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5457,6 +5457,15 @@ static void translate_insn0()( } \ } =20 +DEF_TRANSLATE_INSN2(Ed, Pq) +DEF_TRANSLATE_INSN2(Eq, Pq) +DEF_TRANSLATE_INSN2(Gd, Nq) +DEF_TRANSLATE_INSN2(Gq, Nq) +DEF_TRANSLATE_INSN2(Pq, Ed) +DEF_TRANSLATE_INSN2(Pq, Eq) +DEF_TRANSLATE_INSN2(Pq, Qq) +DEF_TRANSLATE_INSN2(Qq, Pq) + #define DEF_TRANSLATE_INSN3(opT1, opT2, opT3) \ static void translate_insn3(opT1, opT2, opT3)( \ CPUX86State *env, DisasContext *s, int modrm, \ @@ -5501,6 +5510,13 @@ static void translate_insn0()( } \ } =20 +DEF_TRANSLATE_INSN3(Gd, Nq, Ib) +DEF_TRANSLATE_INSN3(Gq, Nq, Ib) +DEF_TRANSLATE_INSN3(Nq, Nq, Ib) +DEF_TRANSLATE_INSN3(Pq, Pq, Qd) +DEF_TRANSLATE_INSN3(Pq, Pq, Qq) +DEF_TRANSLATE_INSN3(Pq, Qq, Ib) + #define DEF_TRANSLATE_INSN4(opT1, opT2, opT3, opT4) \ static void translate_insn4(opT1, opT2, opT3, opT4)( \ CPUX86State *env, DisasContext *s, int modrm, \ --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836967; cv=none; d=zoho.com; s=zohoarc; b=EURl/kNOnYNDiuKTu+GDc8jAoIMlmkRGssSEgZ+vBBNUAHZwWwZbX1IERgAHgFxuelrg9pehjUy72Og2MI0SRbLIm2gZ4u+VnAnrGiUnDV5Fgk/25Ps8UqUe68Utu4g+AFRIwZjvE8t2r7o/mHYZuqB/scqgUsTG2CKBTXk0IOI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836967; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Oa5aZEs83L472CM0YZbfZrmUS/bt8pTnh7Q8gJGZz9w=; b=XtT85v8HsfKvAzzVDTcZ7T/VKdV8uPxDcB7IdUWhJ7sXWoMwUPrr2CcGiqgjIPhDxsVxNH/1UPFeJZCs9P03v1nFX47B/7PZAhFSW9bMOmKQJdDzSfZ28GY1OO3HC6wiMWDegqT+QHUPNd+7GTKBR5NtRZ7Qg9HhmPgQZ9upBcM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836967103743.9751313835208; Wed, 14 Aug 2019 19:42:47 -0700 (PDT) Received: from localhost ([::1]:37682 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5iv-0003mL-Ec for importer@patchew.org; Wed, 14 Aug 2019 22:42:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47033) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dh-0006On-E4 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Df-0000JW-Vr for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:29 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:35390) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Df-0000Is-OS for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:27 -0400 Received: by mail-yw1-xc43.google.com with SMTP id g19so303346ywe.2 for ; Wed, 14 Aug 2019 19:10:27 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Oa5aZEs83L472CM0YZbfZrmUS/bt8pTnh7Q8gJGZz9w=; b=Ixz3l+hQ66tm6CAXUOzoGjlXs/GoTQEQX/Nn+U/pAZvkm/fFNvr5TP5xe+0oJVht5M 1Y/st4M1lDJrRyRhBzDqf+/pRDiul//iC/akQSFhlA7ypvoYs5f7nvp91x1ZKh7u8feo MXQQLsk39GKlpe/y2/FPm+92Junn6epSLkpTTawmPbQ6F5iQlqOvxU1m9+Atv8kfPIwn g6b527qta73zvsl78COtxA7zF4qVxDo4KtKfbbTWGt9H/jWNVfVZ56Siw8eUdmf4r9I0 V610rCJJGtiu6hHgLY7Y12eksV07VnSHK1kihxIqjBSqacjfeaPwW60W5TMN3L8cutqu Qmkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Oa5aZEs83L472CM0YZbfZrmUS/bt8pTnh7Q8gJGZz9w=; b=XoQ/kTxdPHC2AJSfRvUV4k6tqwxgKNwIxllDKW6C9uF/p/Gfr0bYmvW622sLuoSgD8 Dh3TS7mnPoVCddO4kMdc023dcU4G9kMjcMfMYszWoaq6sAUNLUXdtwsKyuI4a0Etg7mq 86nhFXKk9MPLqHI+ouiwpOstmRDgxGkdKhxyNGpzlwJmkwOT+k96mCIU5qkikU68KgjA e0viyPnW9yCp4Kk6JeZ9TAheMaipPOcmlkBHpW469sRhctaSBcVfADOQknXwLtfQybQU wdgEgWz7ge6FHLQwnc79cjJU/c1kfbH/dt8/kIJ6A5BYyTsePp8efbTzJBQCtCQ149MV vbjg== X-Gm-Message-State: APjAAAX5BVLQGKPqZELaV0aPP34ULZN6SYqVHpw/hbmd0KHdM27YWQ6l XqVFsGgVgzOoGIV5e/rHSfl+tUt0 X-Google-Smtp-Source: APXvYqzJqIjXyThj9CBBPRByG9eh0pyygxiwsdVZXPmXu6eqZ0CwXRdW3oTbSoI4fx1sAQPQIUJREA== X-Received: by 2002:a0d:c841:: with SMTP id k62mr1513667ywd.95.1565835027092; Wed, 14 Aug 2019 19:10:27 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:18 -0400 Message-Id: <20190815020928.9679-37-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 36/46] target/i386: introduce MMX code generators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Define code generators required for MMX instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 111 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 4fecb0d240..a02e9cd0d2 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5357,12 +5357,123 @@ INSNOP_LDST(xmm_t0, Mhq) { \ tcg_gen_gvec_ ## gvec(vece, arg1, arg2, oprsz, maxsz); \ } +#define DEF_GEN_INSN2_GVEC_MM(mnem, gvec, opT1, opT2, vece) \ + DEF_GEN_INSN2_GVEC(mnem, gvec, opT1, opT2, vece, \ + sizeof(MMXReg), sizeof(MMXReg)) =20 #define DEF_GEN_INSN3_GVEC(mnem, gvec, opT1, opT2, opT3, vece, oprsz, maxs= z) \ GEN_INSN3(mnem, opT1, opT2, opT3) \ { \ tcg_gen_gvec_ ## gvec(vece, arg1, arg2, arg3, oprsz, maxsz); \ } +#define DEF_GEN_INSN3_GVEC_MM(mnem, gvec, opT1, opT2, opT3, vece) \ + DEF_GEN_INSN3_GVEC(mnem, gvec, opT1, opT2, opT3, vece, \ + sizeof(MMXReg), sizeof(MMXReg)) + +GEN_INSN2(movq, Pq, Eq); /* forward declaration */ +GEN_INSN2(movd, Pq, Ed) +{ + const insnop_arg_t(Eq) arg2_r64 =3D tcg_temp_new_i64(); + tcg_gen_extu_i32_i64(arg2_r64, arg2); + gen_insn2(movq, Pq, Eq)(env, s, arg1, arg2_r64); + tcg_temp_free_i64(arg2_r64); +} + +GEN_INSN2(movd, Ed, Pq) +{ + const insnop_arg_t(Pq) ofs =3D offsetof(MMXReg, MMX_L(0)); + tcg_gen_ld_i32(arg1, cpu_env, arg2 + ofs); +} + +GEN_INSN2(movq, Pq, Eq) +{ + const insnop_arg_t(Pq) ofs =3D offsetof(MMXReg, MMX_Q(0)); + tcg_gen_st_i64(arg2, cpu_env, arg1 + ofs); +} + +GEN_INSN2(movq, Eq, Pq) +{ + const insnop_arg_t(Pq) ofs =3D offsetof(MMXReg, MMX_Q(0)); + tcg_gen_ld_i64(arg1, cpu_env, arg2 + ofs); +} + +DEF_GEN_INSN2_GVEC_MM(movq, mov, Pq, Qq, MO_64) +DEF_GEN_INSN2_GVEC_MM(movq, mov, Qq, Pq, MO_64) + +DEF_GEN_INSN3_GVEC_MM(paddb, add, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(paddw, add, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_MM(paddd, add, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_MM(paddsb, ssadd, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(paddsw, ssadd, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_MM(paddusb, usadd, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(paddusw, usadd, Pq, Pq, Qq, MO_16) + +DEF_GEN_INSN3_GVEC_MM(psubb, sub, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(psubw, sub, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_MM(psubd, sub, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_MM(psubsb, sssub, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(psubsw, sssub, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_MM(psubusb, ussub, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(psubusw, ussub, Pq, Pq, Qq, MO_16) + +DEF_GEN_INSN3_HELPER_EPP(pmullw, pmullw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmulhw, pmulhw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmaddwd, pmaddwd_mmx, Pq, Pq, Qq) + +DEF_GEN_INSN3_GVEC_MM(pcmpeqb, cmpeq, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(pcmpeqw, cmpeq, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_MM(pcmpeqd, cmpeq, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_MM(pcmpgtb, cmpgt, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(pcmpgtw, cmpgt, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_MM(pcmpgtd, cmpgt, Pq, Pq, Qq, MO_32) + +DEF_GEN_INSN3_GVEC_MM(pand, and, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_MM(pandn, andn, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_MM(por, or, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_MM(pxor, xor, Pq, Pq, Qq, MO_64) + +DEF_GEN_INSN3_HELPER_EPP(psllw, psllw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pslld, pslld_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psllq, psllq_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrlw, psrlw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrld, psrld_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrlq, psrlq_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psraw, psraw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrad, psrad_mmx, Pq, Pq, Qq) + +#define DEF_GEN_PSHIFT_IMM_MM(mnem, opT1, opT2) \ + GEN_INSN3(mnem, opT1, opT2, Ib) \ + { \ + const uint64_t arg3_ui64 =3D (uint8_t)arg3; \ + const insnop_arg_t(Eq) arg3_r64 =3D s->tmp1_i64; \ + const insnop_arg_t(Qq) arg3_mm =3D \ + offsetof(CPUX86State, mmx_t0.MMX_Q(0)); \ + \ + tcg_gen_movi_i64(arg3_r64, arg3_ui64); \ + gen_insn2(movq, Pq, Eq)(env, s, arg3_mm, arg3_r64); \ + gen_insn3(mnem, Pq, Pq, Qq)(env, s, arg1, arg2, arg3_mm); \ + } + +DEF_GEN_PSHIFT_IMM_MM(psllw, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(pslld, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(psllq, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(psrlw, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(psrld, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(psrlq, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(psraw, Nq, Nq) +DEF_GEN_PSHIFT_IMM_MM(psrad, Nq, Nq) + +DEF_GEN_INSN3_HELPER_EPP(packsswb, packsswb_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(packssdw, packssdw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(packuswb, packuswb_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(punpcklbw, punpcklbw_mmx, Pq, Pq, Qd) +DEF_GEN_INSN3_HELPER_EPP(punpcklwd, punpcklwd_mmx, Pq, Pq, Qd) +DEF_GEN_INSN3_HELPER_EPP(punpckldq, punpckldq_mmx, Pq, Pq, Qd) +DEF_GEN_INSN3_HELPER_EPP(punpckhbw, punpckhbw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(punpckhwd, punpckhwd_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(punpckhdq, punpckhdq_mmx, Pq, Pq, Qq) + +DEF_GEN_INSN0_HELPER(emms, emms) =20 /* * Instruction translators --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837270; cv=none; d=zoho.com; s=zohoarc; b=Er/0dQoqTIwVjVBaTA6Bh3x1L6pMJaK3r3T/kRXrK7X9cEIYlBFgFrtQkGcJlxqEM4mMRyyVa2tC/GBlr3riB7+L+EgZsaE6vloyEn7qnzebPiXctV1pH9tnVPMVPwqUZEgU76KWHw93Iulwzjhn3CPmUdCcH1PqeAkO7aeYPT0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837270; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=YAFcdKLU/wuX+zS9zd557KA961hwea+B01MnE+gI14k=; b=BNLfS+jwQnzbbFHvZXa85Vg7G/3Sm4Cg6+MIfsudw1PdJ9wgn2+TBIxMVbEKUpdJ9piHaxNffglmhTtqWI1R5RZZKm5znzkyZbWBRhPJWwI9r4jIYjs1Ycj3esd16LxptXDu3bvs9PZu6uHeoq3CWeVZHJwqRIdDmbeIbtMzGKQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837270041762.0664609819919; Wed, 14 Aug 2019 19:47:50 -0700 (PDT) Received: from localhost ([::1]:37762 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5nk-0001ei-Qh for importer@patchew.org; Wed, 14 Aug 2019 22:47:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47050) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Di-0006Qu-Hw for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dg-0000Ki-S8 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:30 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:33201) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dg-0000KJ-N6 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:28 -0400 Received: by mail-yw1-xc43.google.com with SMTP id e65so307189ywh.0 for ; Wed, 14 Aug 2019 19:10:28 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YAFcdKLU/wuX+zS9zd557KA961hwea+B01MnE+gI14k=; b=oxv5q8mF4ud7oXxehddLjWFtY56/DlvYUOganMaKIlsvBxP/kCPcguuuYg6M3NOebS dDLZOdqv04iA1Rf8lQMGYr6c6fIDVTUlyPPdnT4nzfNi3W8WQqYm5mKlLbUU/QwEP/ID k0wlzmjHluk9MgCHJ9SoD4cD9P7oA+1kX7Bc25mTgsaHnKPEWYZhqAzWv5yQgXEkGOuu q/8lDMf3wCkoiiFZQnRaMCrYcC2XWaFn2FbareHx4hAmMFo2d+gngiNq0NA7WiyurhL7 60jzm8m7pSsMELe0c+8jFZfO8gXfxK9SpQIE87OJldxnextRByRVQPEnODv7+05+tFfc 6Dgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YAFcdKLU/wuX+zS9zd557KA961hwea+B01MnE+gI14k=; b=LjMdnPAQ/OKLFVHvaV4XlchnMesRA9qPo7aOJqv2a9D/VkBhX4Z3CPoomm+iGUTN6+ i4gYaL8nj6e8/EXk44YNgm6vLq5172WvxAQbISChobVBh9w0xX1HIvR6KherzCvEfHWV jpIoygMO75K7Wsp3MZPeBHqoRJprsb1n3OVVYiRYHyPikP6fuY9kOr97MeC1HnqjGQd+ DXxpaaiw0p+oqeTmjBRpKwsd7c3gaJaHuRy/yFTUH78XaSUKCPuwdYHrtHjOT0QNeSjT 7BBCBC8mBwlRSz/KsT/QHnC/ghUt/F3M4QopiaZpltqjM0G0oXL/eQxW6xLx7SzKEIhE OexA== X-Gm-Message-State: APjAAAUxom1Q0QshqbxdIfuqgvtkfUdfmne0QSFQxpeVC+WjrO5tqWX9 v1Xnb2cUHg6y24FDQsAelwVQ13vh X-Google-Smtp-Source: APXvYqyEQjnEhumjeSZbEQqCyjdlUrG/6h9iB2xO7rM0t7wRog+kS/bTakeY/HCDg9L8liAUD+Efrw== X-Received: by 2002:a81:8501:: with SMTP id v1mr1557260ywf.187.1565835028024; Wed, 14 Aug 2019 19:10:28 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:19 -0400 Message-Id: <20190815020928.9679-38-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 37/46] target/i386: introduce MMX instructions to sse-opcode.inc.h X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add all MMX instruction entries to sse-opcode.inc.h. Signed-off-by: Jan Bobek --- target/i386/sse-opcode.inc.h | 131 +++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/target/i386/sse-opcode.inc.h b/target/i386/sse-opcode.inc.h index c5e81a6a80..36963e5a7c 100644 --- a/target/i386/sse-opcode.inc.h +++ b/target/i386/sse-opcode.inc.h @@ -39,6 +39,137 @@ # define OPCODE_GRP_END(grpname) #endif /* OPCODE_GRP_END */ =20 +/* NP 0F 6E /r: MOVD mm,r/m32 */ +OPCODE(movd, LEG(NP, 0F, 0, 0x6e), MMX, WR, Pq, Ed) +/* NP 0F 7E /r: MOVD r/m32,mm */ +OPCODE(movd, LEG(NP, 0F, 0, 0x7e), MMX, WR, Ed, Pq) +/* NP REX.W + 0F 6E /r: MOVQ mm,r/m64 */ +OPCODE(movq, LEG(NP, 0F, 1, 0x6e), MMX, WR, Pq, Eq) +/* NP REX.W + 0F 7E /r: MOVQ r/m64,mm */ +OPCODE(movq, LEG(NP, 0F, 1, 0x7e), MMX, WR, Eq, Pq) +/* NP 0F 6F /r: MOVQ mm, mm/m64 */ +OPCODE(movq, LEG(NP, 0F, 0, 0x6f), MMX, WR, Pq, Qq) +/* NP 0F 7F /r: MOVQ mm/m64, mm */ +OPCODE(movq, LEG(NP, 0F, 0, 0x7f), MMX, WR, Qq, Pq) +/* NP 0F FC /r: PADDB mm, mm/m64 */ +OPCODE(paddb, LEG(NP, 0F, 0, 0xfc), MMX, WRR, Pq, Pq, Qq) +/* NP 0F FD /r: PADDW mm, mm/m64 */ +OPCODE(paddw, LEG(NP, 0F, 0, 0xfd), MMX, WRR, Pq, Pq, Qq) +/* NP 0F FE /r: PADDD mm, mm/m64 */ +OPCODE(paddd, LEG(NP, 0F, 0, 0xfe), MMX, WRR, Pq, Pq, Qq) +/* NP 0F EC /r: PADDSB mm, mm/m64 */ +OPCODE(paddsb, LEG(NP, 0F, 0, 0xec), MMX, WRR, Pq, Pq, Qq) +/* NP 0F ED /r: PADDSW mm, mm/m64 */ +OPCODE(paddsw, LEG(NP, 0F, 0, 0xed), MMX, WRR, Pq, Pq, Qq) +/* NP 0F DC /r: PADDUSB mm,mm/m64 */ +OPCODE(paddusb, LEG(NP, 0F, 0, 0xdc), MMX, WRR, Pq, Pq, Qq) +/* NP 0F DD /r: PADDUSW mm,mm/m64 */ +OPCODE(paddusw, LEG(NP, 0F, 0, 0xdd), MMX, WRR, Pq, Pq, Qq) +/* NP 0F F8 /r: PSUBB mm, mm/m64 */ +OPCODE(psubb, LEG(NP, 0F, 0, 0xf8), MMX, WRR, Pq, Pq, Qq) +/* NP 0F F9 /r: PSUBW mm, mm/m64 */ +OPCODE(psubw, LEG(NP, 0F, 0, 0xf9), MMX, WRR, Pq, Pq, Qq) +/* NP 0F FA /r: PSUBD mm, mm/m64 */ +OPCODE(psubd, LEG(NP, 0F, 0, 0xfa), MMX, WRR, Pq, Pq, Qq) +/* NP 0F E8 /r: PSUBSB mm, mm/m64 */ +OPCODE(psubsb, LEG(NP, 0F, 0, 0xe8), MMX, WRR, Pq, Pq, Qq) +/* NP 0F E9 /r: PSUBSW mm, mm/m64 */ +OPCODE(psubsw, LEG(NP, 0F, 0, 0xe9), MMX, WRR, Pq, Pq, Qq) +/* NP 0F D8 /r: PSUBUSB mm, mm/m64 */ +OPCODE(psubusb, LEG(NP, 0F, 0, 0xd8), MMX, WRR, Pq, Pq, Qq) +/* NP 0F D9 /r: PSUBUSW mm, mm/m64 */ +OPCODE(psubusw, LEG(NP, 0F, 0, 0xd9), MMX, WRR, Pq, Pq, Qq) +/* NP 0F D5 /r: PMULLW mm, mm/m64 */ +OPCODE(pmullw, LEG(NP, 0F, 0, 0xd5), MMX, WRR, Pq, Pq, Qq) +/* NP 0F E5 /r: PMULHW mm, mm/m64 */ +OPCODE(pmulhw, LEG(NP, 0F, 0, 0xe5), MMX, WRR, Pq, Pq, Qq) +/* NP 0F F5 /r: PMADDWD mm, mm/m64 */ +OPCODE(pmaddwd, LEG(NP, 0F, 0, 0xf5), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 74 /r: PCMPEQB mm,mm/m64 */ +OPCODE(pcmpeqb, LEG(NP, 0F, 0, 0x74), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 75 /r: PCMPEQW mm,mm/m64 */ +OPCODE(pcmpeqw, LEG(NP, 0F, 0, 0x75), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 76 /r: PCMPEQD mm,mm/m64 */ +OPCODE(pcmpeqd, LEG(NP, 0F, 0, 0x76), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 64 /r: PCMPGTB mm,mm/m64 */ +OPCODE(pcmpgtb, LEG(NP, 0F, 0, 0x64), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 65 /r: PCMPGTW mm,mm/m64 */ +OPCODE(pcmpgtw, LEG(NP, 0F, 0, 0x65), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 66 /r: PCMPGTD mm,mm/m64 */ +OPCODE(pcmpgtd, LEG(NP, 0F, 0, 0x66), MMX, WRR, Pq, Pq, Qq) +/* NP 0F DB /r: PAND mm, mm/m64 */ +OPCODE(pand, LEG(NP, 0F, 0, 0xdb), MMX, WRR, Pq, Pq, Qq) +/* NP 0F DF /r: PANDN mm, mm/m64 */ +OPCODE(pandn, LEG(NP, 0F, 0, 0xdf), MMX, WRR, Pq, Pq, Qq) +/* NP 0F EB /r: POR mm, mm/m64 */ +OPCODE(por, LEG(NP, 0F, 0, 0xeb), MMX, WRR, Pq, Pq, Qq) +/* NP 0F EF /r: PXOR mm, mm/m64 */ +OPCODE(pxor, LEG(NP, 0F, 0, 0xef), MMX, WRR, Pq, Pq, Qq) +/* NP 0F F1 /r: PSLLW mm, mm/m64 */ +OPCODE(psllw, LEG(NP, 0F, 0, 0xf1), MMX, WRR, Pq, Pq, Qq) +/* NP 0F F2 /r: PSLLD mm, mm/m64 */ +OPCODE(pslld, LEG(NP, 0F, 0, 0xf2), MMX, WRR, Pq, Pq, Qq) +/* NP 0F F3 /r: PSLLQ mm, mm/m64 */ +OPCODE(psllq, LEG(NP, 0F, 0, 0xf3), MMX, WRR, Pq, Pq, Qq) +/* NP 0F D1 /r: PSRLW mm, mm/m64 */ +OPCODE(psrlw, LEG(NP, 0F, 0, 0xd1), MMX, WRR, Pq, Pq, Qq) +/* NP 0F D2 /r: PSRLD mm, mm/m64 */ +OPCODE(psrld, LEG(NP, 0F, 0, 0xd2), MMX, WRR, Pq, Pq, Qq) +/* NP 0F D3 /r: PSRLQ mm, mm/m64 */ +OPCODE(psrlq, LEG(NP, 0F, 0, 0xd3), MMX, WRR, Pq, Pq, Qq) +/* NP 0F E1 /r: PSRAW mm,mm/m64 */ +OPCODE(psraw, LEG(NP, 0F, 0, 0xe1), MMX, WRR, Pq, Pq, Qq) +/* NP 0F E2 /r: PSRAD mm,mm/m64 */ +OPCODE(psrad, LEG(NP, 0F, 0, 0xe2), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 63 /r: PACKSSWB mm1, mm2/m64 */ +OPCODE(packsswb, LEG(NP, 0F, 0, 0x63), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 6B /r: PACKSSDW mm1, mm2/m64 */ +OPCODE(packssdw, LEG(NP, 0F, 0, 0x6b), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 67 /r: PACKUSWB mm, mm/m64 */ +OPCODE(packuswb, LEG(NP, 0F, 0, 0x67), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 68 /r: PUNPCKHBW mm, mm/m64 */ +OPCODE(punpckhbw, LEG(NP, 0F, 0, 0x68), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 69 /r: PUNPCKHWD mm, mm/m64 */ +OPCODE(punpckhwd, LEG(NP, 0F, 0, 0x69), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 6A /r: PUNPCKHDQ mm, mm/m64 */ +OPCODE(punpckhdq, LEG(NP, 0F, 0, 0x6a), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 60 /r: PUNPCKLBW mm, mm/m32 */ +OPCODE(punpcklbw, LEG(NP, 0F, 0, 0x60), MMX, WRR, Pq, Pq, Qd) +/* NP 0F 61 /r: PUNPCKLWD mm, mm/m32 */ +OPCODE(punpcklwd, LEG(NP, 0F, 0, 0x61), MMX, WRR, Pq, Pq, Qd) +/* NP 0F 62 /r: PUNPCKLDQ mm, mm/m32 */ +OPCODE(punpckldq, LEG(NP, 0F, 0, 0x62), MMX, WRR, Pq, Pq, Qd) +/* NP 0F 77: EMMS */ +OPCODE(emms, LEG(NP, 0F, 0, 0x77), MMX, ) + +OPCODE_GRP(grp12_LEG_NP, LEG(NP, 0F, 0, 0x71)) +OPCODE_GRP_BEGIN(grp12_LEG_NP) + /* NP 0F 71 /6 ib: PSLLW mm1, imm8 */ + OPCODE_GRPMEMB(grp12_LEG_NP, psllw, 6, MMX, WRR, Nq, Nq, Ib) + /* NP 0F 71 /2 ib: PSRLW mm, imm8 */ + OPCODE_GRPMEMB(grp12_LEG_NP, psrlw, 2, MMX, WRR, Nq, Nq, Ib) + /* NP 0F 71 /4 ib: PSRAW mm,imm8 */ + OPCODE_GRPMEMB(grp12_LEG_NP, psraw, 4, MMX, WRR, Nq, Nq, Ib) +OPCODE_GRP_END(grp12_LEG_NP) + +OPCODE_GRP(grp13_LEG_NP, LEG(NP, 0F, 0, 0x72)) +OPCODE_GRP_BEGIN(grp13_LEG_NP) + /* NP 0F 72 /6 ib: PSLLD mm, imm8 */ + OPCODE_GRPMEMB(grp13_LEG_NP, pslld, 6, MMX, WRR, Nq, Nq, Ib) + /* NP 0F 72 /2 ib: PSRLD mm, imm8 */ + OPCODE_GRPMEMB(grp13_LEG_NP, psrld, 2, MMX, WRR, Nq, Nq, Ib) + /* NP 0F 72 /4 ib: PSRAD mm,imm8 */ + OPCODE_GRPMEMB(grp13_LEG_NP, psrad, 4, MMX, WRR, Nq, Nq, Ib) +OPCODE_GRP_END(grp13_LEG_NP) + +OPCODE_GRP(grp14_LEG_NP, LEG(NP, 0F, 0, 0x73)) +OPCODE_GRP_BEGIN(grp14_LEG_NP) + /* NP 0F 73 /6 ib: PSLLQ mm, imm8 */ + OPCODE_GRPMEMB(grp14_LEG_NP, psllq, 6, MMX, WRR, Nq, Nq, Ib) + /* NP 0F 73 /2 ib: PSRLQ mm, imm8 */ + OPCODE_GRPMEMB(grp14_LEG_NP, psrlq, 2, MMX, WRR, Nq, Nq, Ib) +OPCODE_GRP_END(grp14_LEG_NP) + #undef FMTI____ #undef FMTI__R__ #undef FMTI__RR__ --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837376; cv=none; d=zoho.com; s=zohoarc; b=EfAeBn/szJ8l6u2DWc92KRU5YwBU6dqUkTtC3P9B4Bvd2K/vS9McEGuUSzpp02Nls2XOhsy53Roz7zawo2yuNX8J+fBOd16OoDlukM4E42faSLTAckyypCBcH++C0bCbac4A7+m4UF9oZQx2wkDOEKTBvBS4bTo6yDi8Z6Mtdzc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837376; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=9ByOCS1+RWax/taJl2xODCxhRZxqK7h/xkPuJIbOPZk=; b=hvybYg5dP1Gm0ySORHZ6x1nWEmbJXj6beTZf7bIoSqWEQqt/iAAPn5hetp2/cKpVbbjbgcbHCx5W9B7tUF2SxV4BBxCNE0yJ+qXMyH016VWT0HxxovtzjvP2myzV4UaEjUa9uN+Vz/Zmlx4uIVBFtW2X3smqF/vEL9ag+0v3u1w= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837376646305.29059024377386; Wed, 14 Aug 2019 19:49:36 -0700 (PDT) Received: from localhost ([::1]:37790 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5pW-0004DW-R9 for importer@patchew.org; Wed, 14 Aug 2019 22:49:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47057) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dj-0006Rg-24 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dh-0000M4-TN for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:30 -0400 Received: from mail-yw1-xc41.google.com ([2607:f8b0:4864:20::c41]:42194) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dh-0000Ld-P8 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:29 -0400 Received: by mail-yw1-xc41.google.com with SMTP id z63so290718ywz.9 for ; Wed, 14 Aug 2019 19:10:29 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9ByOCS1+RWax/taJl2xODCxhRZxqK7h/xkPuJIbOPZk=; b=RTnVhDO2ah82TU9DTI8Doui9a9G1JMdd5hyvootyi+Rp64YKhc2dkafiXmaRoGqdsO SY7D3PuOhvpOwMdTnMjaPHoFSOpVbaOf9LX8NellnoTcUIza+fcL2IMRTvaALy3ZaXRO 5DUL8ULUt2Whx4EW7SDTaN7Lq+r2b68OKej4u9XY50Gf6IPDw9jHEfonkF4rJsMNb7nu THg2a8L8/QPFDDdoYTY39CWGUmqRE5BlAhhA2wCBnkkBQOvdR8nCIwWxjABBbKcW2uWT rHFVbX/TrB1SupcdTHdqJQzcthe3LrmE7vasN/DVjRUp/UxsVCfce6L6PbSt0xLfgR+5 rsbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9ByOCS1+RWax/taJl2xODCxhRZxqK7h/xkPuJIbOPZk=; b=FNcEa1E62ihnryesnrSpAgWBCimCnSY1KXi1W7K8JD/oEuXv233drJL5Ga0NZ8pKy0 boKB9oJBK26SBimK2nHI1xqrMIdTF6R44ilxtwtbU5DiHwDxSnAYxTEmzy/GAMiooR4J 1XXXM1rlCdErKV2GeUplD9Ml5yTKJVvn5G37beLg1b/XTTASOMtrniRPP8ZqPTSAKNiC 5YU+kBSxlcl7B5FPeCp77FWGgI+QizFt/JI/kjgOkp5BYKhVlsFX/28wIa4PTdlDY44S G/r3lXJ+gVdjS2BS59Umj4oGsWY2AytoVB6plQR0XKCHaVgJRkYugN2CYtIbE0kGBQvC Z8/A== X-Gm-Message-State: APjAAAUTTKAKNRpUf4ey8NdacTtYkC7HUvn43kapErNqUrfj4jGF8DMt RElriDhNvrSnQDxJ/6mqfJXmfLJF X-Google-Smtp-Source: APXvYqy1Vl+zcz8cGA/1w4W/nlwUYRIj2IaWPsaZQwu0h3oTn/4fY59RK0xIJslW+1QfWaR6ShUAGA== X-Received: by 2002:a0d:ddcb:: with SMTP id g194mr1577316ywe.110.1565835029174; Wed, 14 Aug 2019 19:10:29 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:20 -0400 Message-Id: <20190815020928.9679-39-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c41 Subject: [Qemu-devel] [RFC PATCH v3 38/46] target/i386: introduce SSE translators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use the translator macros to define translators required by SSE instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index a02e9cd0d2..ef64fe606f 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5533,6 +5533,9 @@ static void translate_insn0()( } \ } =20 +DEF_TRANSLATE_INSN1(Mb) +DEF_TRANSLATE_INSN1(Md) + #define DEF_TRANSLATE_INSN2(opT1, opT2) \ static void translate_insn2(opT1, opT2)( \ CPUX86State *env, DisasContext *s, int modrm, \ @@ -5571,11 +5574,29 @@ static void translate_insn0()( DEF_TRANSLATE_INSN2(Ed, Pq) DEF_TRANSLATE_INSN2(Eq, Pq) DEF_TRANSLATE_INSN2(Gd, Nq) +DEF_TRANSLATE_INSN2(Gd, Udq) +DEF_TRANSLATE_INSN2(Gd, Wd) DEF_TRANSLATE_INSN2(Gq, Nq) +DEF_TRANSLATE_INSN2(Gq, Udq) +DEF_TRANSLATE_INSN2(Gq, Wd) +DEF_TRANSLATE_INSN2(Mdq, Vdq) +DEF_TRANSLATE_INSN2(Mq, Pq) +DEF_TRANSLATE_INSN2(Mq, Vdq) +DEF_TRANSLATE_INSN2(Mq, Vq) DEF_TRANSLATE_INSN2(Pq, Ed) DEF_TRANSLATE_INSN2(Pq, Eq) +DEF_TRANSLATE_INSN2(Pq, Nq) DEF_TRANSLATE_INSN2(Pq, Qq) +DEF_TRANSLATE_INSN2(Pq, Wq) DEF_TRANSLATE_INSN2(Qq, Pq) +DEF_TRANSLATE_INSN2(Vd, Ed) +DEF_TRANSLATE_INSN2(Vd, Eq) +DEF_TRANSLATE_INSN2(Vd, Wd) +DEF_TRANSLATE_INSN2(Vdq, Qq) +DEF_TRANSLATE_INSN2(Vdq, Wdq) +DEF_TRANSLATE_INSN2(Vq, UdqMhq) +DEF_TRANSLATE_INSN2(Wd, Vd) +DEF_TRANSLATE_INSN2(Wdq, Vdq) =20 #define DEF_TRANSLATE_INSN3(opT1, opT2, opT3) \ static void translate_insn3(opT1, opT2, opT3)( \ @@ -5627,6 +5648,9 @@ DEF_TRANSLATE_INSN3(Nq, Nq, Ib) DEF_TRANSLATE_INSN3(Pq, Pq, Qd) DEF_TRANSLATE_INSN3(Pq, Pq, Qq) DEF_TRANSLATE_INSN3(Pq, Qq, Ib) +DEF_TRANSLATE_INSN3(Vd, Vd, Wd) +DEF_TRANSLATE_INSN3(Vdq, Vdq, Wdq) +DEF_TRANSLATE_INSN3(Vdq, Vq, Wq) =20 #define DEF_TRANSLATE_INSN4(opT1, opT2, opT3, opT4) \ static void translate_insn4(opT1, opT2, opT3, opT4)( \ @@ -5680,6 +5704,11 @@ DEF_TRANSLATE_INSN3(Pq, Qq, Ib) } \ } =20 +DEF_TRANSLATE_INSN4(Pq, Pq, RdMw, Ib) +DEF_TRANSLATE_INSN4(Vd, Vd, Wd, Ib) +DEF_TRANSLATE_INSN4(Vdq, Vdq, Wd, modrm_mod) +DEF_TRANSLATE_INSN4(Vdq, Vdq, Wdq, Ib) + #define OPCODE_GRP_BEGIN(grpname) \ static void translate_group(grpname)( \ CPUX86State *env, DisasContext *s, int modrm) \ --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837112; cv=none; d=zoho.com; s=zohoarc; b=ncAl5/8DnZ07WVCUAXqqwdOFgCm+VrqN7J3Ds26fmMgyE5/Hv9OHTOvOKRAfpZvKCqk/PFvlrtz9S2xVr3PxSZznZ2wnP/byru5hn6zcc40gPpu4BHyMCZ1H+FmgtoG+QtHJCCB2ChvmUuGYLHcGn62LYiB1n9xlOHvvxmPaF/M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837112; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=7BueW4Yx+T+QYuOxbWUj1eJfzlDzg85DNPgtbyCQMpY=; b=JHAi0KkYyMdQa/QtIvFyYN2XoMXTYYMX3VYg1YhGEl3f7OGfRIxXdxy3UIoO3cyaXI8j8QLco/QkjiNnvOmxQn4ANJBgnZtGPH0QOR/YAsoyv+dZD5iPu2d5WMSdUNRg4sXyORcaovqdi1b90fKPH3w/FPAtVABQhrWFQYJsfCs= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837112693287.0170332561846; Wed, 14 Aug 2019 19:45:12 -0700 (PDT) Received: from localhost ([::1]:37718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5lG-00072S-LD for importer@patchew.org; Wed, 14 Aug 2019 22:45:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47075) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dl-0006UA-1o for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Di-0000Oe-Qi for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:32 -0400 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]:42195) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Di-0000Nx-Lf for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:30 -0400 Received: by mail-yw1-xc42.google.com with SMTP id z63so290727ywz.9 for ; Wed, 14 Aug 2019 19:10:30 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7BueW4Yx+T+QYuOxbWUj1eJfzlDzg85DNPgtbyCQMpY=; b=nH4GXcGmmTrPc2hqWZkwKCCEhJJXVMj+RVI2Zg+CF3U2Tx6lWI7Xf4/ORf86fKNcRk CPYOELCAHUJQMlGw98hYIUo8UqIHPuHS9QkF7stpK9phDb1FjRMUFdGPdAbwWaLjOAFb 0ZD0tzer1hvK1YJGixA+ZacJtr3C2N91MTaI0H0fGzy2FncCK0gOX5QjWvBwyfal8Pim GYrJnhtoeeT1CIcCqOPrcARwa0B1QFtIprg2OSS+UJmZMr+KBjIVeIZpPuaOHwCgbZ8/ YG2Tmxgu44LS4CGOV74MG+om9Q3D4/84zcNnnb18gafSIEuPWmejx+MnXq2ZqpJ1SJog s/+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7BueW4Yx+T+QYuOxbWUj1eJfzlDzg85DNPgtbyCQMpY=; b=LkDK9AJIp3xYH0NxgQnSz9JyR+V0XZW+r78tFSpVw72CJwJF24oHjTilRT1uLYwJGA h4XFqYm7zRfQ/QFGuOx02kTx4XPgtqKo3xA+4nGZ7kdV9dzJpgldnQ92hPiuuxjNo2gu 5t82FEJ5LCXeLp2kWzgkADIkUXPxRLrF8ixnhLt+LZN0JN9h1d3GV2uAUKJ/4+9zM0e1 FYuX/9OZRH6Qrx411VJKEqwlkddDtqxolIZFINdPLD6UsK2YH+NVTrQ1Vx+8jR+GpxEE goMLQDJamXbQlECkDLbsPikAasqXlKKLStxkR+8bpuFTBK1Qlxl5QAkcd7TakzcM6jY1 FjZw== X-Gm-Message-State: APjAAAVtAXw4bWbJJtjwhgnnt9qE9thCqSEpqCQ+Ha262lXmUpY43kRl iFiY65Krz7I34d8iY9PyTRCBjprj X-Google-Smtp-Source: APXvYqw99ag4zX/gcb5x5FTG9AHEL6/mnH+SE9KfopBaGA7lK8OZ2FvPeuDtm5I8itwz9KPpW9b/Gw== X-Received: by 2002:a81:8706:: with SMTP id x6mr1590510ywf.512.1565835029907; Wed, 14 Aug 2019 19:10:29 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:21 -0400 Message-Id: <20190815020928.9679-40-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c42 Subject: [Qemu-devel] [RFC PATCH v3 39/46] target/i386: introduce SSE code generators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Introduce code generators required by SSE instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 319 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index ef64fe606f..3d526ee470 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5360,6 +5360,9 @@ INSNOP_LDST(xmm_t0, Mhq) #define DEF_GEN_INSN2_GVEC_MM(mnem, gvec, opT1, opT2, vece) \ DEF_GEN_INSN2_GVEC(mnem, gvec, opT1, opT2, vece, \ sizeof(MMXReg), sizeof(MMXReg)) +#define DEF_GEN_INSN2_GVEC_XMM(mnem, gvec, opT1, opT2, vece) \ + DEF_GEN_INSN2_GVEC(mnem, gvec, opT1, opT2, vece, \ + sizeof(XMMReg), sizeof(XMMReg)) =20 #define DEF_GEN_INSN3_GVEC(mnem, gvec, opT1, opT2, opT3, vece, oprsz, maxs= z) \ GEN_INSN3(mnem, opT1, opT2, opT3) \ @@ -5369,6 +5372,9 @@ INSNOP_LDST(xmm_t0, Mhq) #define DEF_GEN_INSN3_GVEC_MM(mnem, gvec, opT1, opT2, opT3, vece) \ DEF_GEN_INSN3_GVEC(mnem, gvec, opT1, opT2, opT3, vece, \ sizeof(MMXReg), sizeof(MMXReg)) +#define DEF_GEN_INSN3_GVEC_XMM(mnem, gvec, opT1, opT2, opT3, vece) \ + DEF_GEN_INSN3_GVEC(mnem, gvec, opT1, opT2, opT3, vece, \ + sizeof(XMMReg), sizeof(XMMReg)) =20 GEN_INSN2(movq, Pq, Eq); /* forward declaration */ GEN_INSN2(movd, Pq, Ed) @@ -5399,6 +5405,90 @@ GEN_INSN2(movq, Eq, Pq) =20 DEF_GEN_INSN2_GVEC_MM(movq, mov, Pq, Qq, MO_64) DEF_GEN_INSN2_GVEC_MM(movq, mov, Qq, Pq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movaps, mov, Vdq, Wdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movaps, mov, Wdq, Vdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movups, mov, Vdq, Wdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movups, mov, Wdq, Vdq, MO_64) + +GEN_INSN2(movss, Wd, Vd); /* forward declaration */ +GEN_INSN4(movss, Vdq, Vdq, Wd, modrm_mod) +{ + assert(arg1 =3D=3D arg2); + + if (arg4 =3D=3D 3) { + /* merging movss */ + gen_insn2(movss, Wd, Vd)(env, s, arg1, arg3); + } else { + /* zero-extending movss */ + const TCGv_i32 r32 =3D tcg_temp_new_i32(); + const TCGv_i64 r64 =3D tcg_temp_new_i64(); + + tcg_gen_ld_i32(r32, cpu_env, arg3 + offsetof(ZMMReg, ZMM_L(0))); + tcg_gen_extu_i32_i64(r64, r32); + tcg_gen_st_i64(r64, cpu_env, arg1 + offsetof(ZMMReg, ZMM_Q(0))); + + tcg_gen_movi_i64(r64, 0); + tcg_gen_st_i64(r64, cpu_env, arg1 + offsetof(ZMMReg, ZMM_Q(1))); + + tcg_temp_free_i32(r32); + tcg_temp_free_i64(r64); + } +} + +GEN_INSN2(movss, Wd, Vd) +{ + const insnop_arg_t(Wd) dofs =3D offsetof(ZMMReg, ZMM_L(0)); + const insnop_arg_t(Vd) aofs =3D offsetof(ZMMReg, ZMM_L(0)); + gen_op_movl(s, arg1 + dofs, arg2 + aofs); +} + +GEN_INSN2(movhlps, Vq, UdqMhq) +{ + const size_t dofs =3D offsetof(ZMMReg, ZMM_Q(0)); + const size_t aofs =3D offsetof(ZMMReg, ZMM_Q(1)); + gen_op_movq(s, arg1 + dofs, arg2 + aofs); +} + +GEN_INSN2(movlps, Mq, Vq) +{ + assert(arg1 =3D=3D s->A0); + gen_stq_env_A0(s, arg2 + offsetof(ZMMReg, ZMM_Q(0))); +} + +GEN_INSN3(movlhps, Vdq, Vq, Wq) +{ + assert(arg1 =3D=3D arg2); + + const size_t dofs =3D offsetof(ZMMReg, ZMM_Q(1)); + const size_t aofs =3D offsetof(ZMMReg, ZMM_Q(0)); + gen_op_movq(s, arg1 + dofs, arg3 + aofs); +} + +GEN_INSN2(movhps, Mq, Vdq) +{ + assert(arg1 =3D=3D s->A0); + gen_stq_env_A0(s, arg2 + offsetof(ZMMReg, ZMM_Q(1))); +} + +DEF_GEN_INSN2_HELPER_DEP(pmovmskb, pmovmskb_mmx, Gd, Nq) + +GEN_INSN2(pmovmskb, Gq, Nq) +{ + const TCGv_i32 arg1_r32 =3D tcg_temp_new_i32(); + gen_insn2(pmovmskb, Gd, Nq)(env, s, arg1_r32, arg2); + tcg_gen_extu_i32_i64(arg1, arg1_r32); + tcg_temp_free_i32(arg1_r32); +} + +DEF_GEN_INSN2_HELPER_DEP(movmskps, movmskps, Gd, Udq) + +GEN_INSN2(movmskps, Gq, Udq) +{ + const TCGv_i32 arg1_r32 =3D tcg_temp_new_i32(); + gen_insn2(movmskps, Gd, Udq)(env, s, arg1_r32, arg2); + tcg_gen_extu_i32_i64(arg1, arg1_r32); + tcg_temp_free_i32(arg1_r32); +} =20 DEF_GEN_INSN3_GVEC_MM(paddb, add, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddw, add, Pq, Pq, Qq, MO_16) @@ -5407,6 +5497,8 @@ DEF_GEN_INSN3_GVEC_MM(paddsb, ssadd, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddsw, ssadd, Pq, Pq, Qq, MO_16) DEF_GEN_INSN3_GVEC_MM(paddusb, usadd, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddusw, usadd, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_HELPER_EPP(addps, addps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(addss, addss, Vd, Vd, Wd) =20 DEF_GEN_INSN3_GVEC_MM(psubb, sub, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_MM(psubw, sub, Pq, Pq, Qq, MO_16) @@ -5415,11 +5507,38 @@ DEF_GEN_INSN3_GVEC_MM(psubsb, sssub, Pq, Pq, Qq, MO= _8) DEF_GEN_INSN3_GVEC_MM(psubsw, sssub, Pq, Pq, Qq, MO_16) DEF_GEN_INSN3_GVEC_MM(psubusb, ussub, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_MM(psubusw, ussub, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_HELPER_EPP(subps, subps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(subss, subss, Vd, Vd, Wd) =20 DEF_GEN_INSN3_HELPER_EPP(pmullw, pmullw_mmx, Pq, Pq, Qq) DEF_GEN_INSN3_HELPER_EPP(pmulhw, pmulhw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmulhuw, pmulhuw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(mulps, mulps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(mulss, mulss, Vd, Vd, Wd) DEF_GEN_INSN3_HELPER_EPP(pmaddwd, pmaddwd_mmx, Pq, Pq, Qq) =20 +DEF_GEN_INSN3_HELPER_EPP(divps, divps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(divss, divss, Vd, Vd, Wd) + +DEF_GEN_INSN2_HELPER_EPP(rcpps, rcpps, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(rcpss, rcpss, Vd, Wd) +DEF_GEN_INSN2_HELPER_EPP(sqrtps, sqrtps, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(sqrtss, sqrtss, Vd, Wd) +DEF_GEN_INSN2_HELPER_EPP(rsqrtps, rsqrtps, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(rsqrtss, rsqrtss, Vd, Wd) + +DEF_GEN_INSN3_GVEC_MM(pminub, umin, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(pminsw, smin, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_HELPER_EPP(minps, minps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(minss, minss, Vd, Vd, Wd) +DEF_GEN_INSN3_GVEC_MM(pmaxub, umax, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_MM(pmaxsw, smax, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_HELPER_EPP(maxps, maxps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(maxss, maxss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(pavgb, pavgb_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pavgw, pavgw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psadbw, psadbw_mmx, Pq, Pq, Qq) + DEF_GEN_INSN3_GVEC_MM(pcmpeqb, cmpeq, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_MM(pcmpeqw, cmpeq, Pq, Pq, Qq, MO_16) DEF_GEN_INSN3_GVEC_MM(pcmpeqd, cmpeq, Pq, Pq, Qq, MO_32) @@ -5427,10 +5546,98 @@ DEF_GEN_INSN3_GVEC_MM(pcmpgtb, cmpgt, Pq, Pq, Qq, M= O_8) DEF_GEN_INSN3_GVEC_MM(pcmpgtw, cmpgt, Pq, Pq, Qq, MO_16) DEF_GEN_INSN3_GVEC_MM(pcmpgtd, cmpgt, Pq, Pq, Qq, MO_32) =20 +DEF_GEN_INSN3_HELPER_EPP(cmpeqps, cmpeqps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpeqss, cmpeqss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpltps, cmpltps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpltss, cmpltss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpleps, cmpleps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpless, cmpless, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpunordps, cmpunordps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpunordss, cmpunordss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpneqps, cmpneqps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpneqss, cmpneqss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpnltps, cmpnltps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpnltss, cmpnltss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpnleps, cmpnleps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpnless, cmpnless, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpordps, cmpordps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpordss, cmpordss, Vd, Vd, Wd) + +GEN_INSN4(cmpps, Vdq, Vdq, Wdq, Ib) +{ + switch (arg4 & 7) { + case 0: + gen_insn3(cmpeqps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 1: + gen_insn3(cmpltps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 2: + gen_insn3(cmpleps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 3: + gen_insn3(cmpunordps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 4: + gen_insn3(cmpneqps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 5: + gen_insn3(cmpnltps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 6: + gen_insn3(cmpnleps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 7: + gen_insn3(cmpordps, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + } + + g_assert_not_reached(); +} + +GEN_INSN4(cmpss, Vd, Vd, Wd, Ib) +{ + switch (arg4 & 7) { + case 0: + gen_insn3(cmpeqss, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 1: + gen_insn3(cmpltss, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 2: + gen_insn3(cmpless, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 3: + gen_insn3(cmpunordss, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 4: + gen_insn3(cmpneqss, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 5: + gen_insn3(cmpnltss, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 6: + gen_insn3(cmpnless, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + case 7: + gen_insn3(cmpordss, Vd, Vd, Wd)(env, s, arg1, arg2, arg3); + return; + } + + g_assert_not_reached(); +} + +DEF_GEN_INSN2_HELPER_EPP(comiss, comiss, Vd, Wd) +DEF_GEN_INSN2_HELPER_EPP(ucomiss, ucomiss, Vd, Wd) + DEF_GEN_INSN3_GVEC_MM(pand, and, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(andps, and, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(pandn, andn, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(andnps, andn, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(por, or, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(orps, or, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(pxor, xor, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(xorps, xor, Vdq, Vdq, Wdq, MO_64) =20 DEF_GEN_INSN3_HELPER_EPP(psllw, psllw_mmx, Pq, Pq, Qq) DEF_GEN_INSN3_HELPER_EPP(pslld, pslld_mmx, Pq, Pq, Qq) @@ -5473,8 +5680,120 @@ DEF_GEN_INSN3_HELPER_EPP(punpckhbw, punpckhbw_mmx, = Pq, Pq, Qq) DEF_GEN_INSN3_HELPER_EPP(punpckhwd, punpckhwd_mmx, Pq, Pq, Qq) DEF_GEN_INSN3_HELPER_EPP(punpckhdq, punpckhdq_mmx, Pq, Pq, Qq) =20 +DEF_GEN_INSN3_HELPER_EPP(unpcklps, punpckldq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(unpckhps, punpckhdq_xmm, Vdq, Vdq, Wdq) + +DEF_GEN_INSN3_HELPER_PPI(pshufw, pshufw_mmx, Pq, Qq, Ib) +DEF_GEN_INSN4_HELPER_PPI(shufps, shufps, Vdq, Vdq, Wdq, Ib) + +GEN_INSN4(pinsrw, Pq, Pq, RdMw, Ib) +{ + assert(arg1 =3D=3D arg2); + + const size_t ofs =3D offsetof(MMXReg, MMX_W(arg4 & 3)); + tcg_gen_st16_i32(arg3, cpu_env, arg1 + ofs); +} + +GEN_INSN3(pextrw, Gd, Nq, Ib) +{ + const size_t ofs =3D offsetof(MMXReg, MMX_W(arg3 & 3)); + tcg_gen_ld16u_i32(arg1, cpu_env, arg2 + ofs); +} + +GEN_INSN3(pextrw, Gq, Nq, Ib) +{ + const size_t ofs =3D offsetof(MMXReg, MMX_W(arg3 & 3)); + tcg_gen_ld16u_i64(arg1, cpu_env, arg2 + ofs); +} + +DEF_GEN_INSN2_HELPER_EPP(cvtpi2ps, cvtpi2ps, Vdq, Qq) +DEF_GEN_INSN2_HELPER_EPD(cvtsi2ss, cvtsi2ss, Vd, Ed) +DEF_GEN_INSN2_HELPER_EPQ(cvtsi2ss, cvtsq2ss, Vd, Eq) +DEF_GEN_INSN2_HELPER_EPP(cvtps2pi, cvtps2pi, Pq, Wq) +DEF_GEN_INSN2_HELPER_DEP(cvtss2si, cvtss2si, Gd, Wd) +DEF_GEN_INSN2_HELPER_QEP(cvtss2si, cvtss2sq, Gq, Wd) +DEF_GEN_INSN2_HELPER_EPP(cvttps2pi, cvttps2pi, Pq, Wq) +DEF_GEN_INSN2_HELPER_DEP(cvttss2si, cvttss2si, Gd, Wd) +DEF_GEN_INSN2_HELPER_QEP(cvttss2si, cvttss2sq, Gq, Wd) + +GEN_INSN2(maskmovq, Pq, Nq) +{ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); + const TCGv_ptr arg2_ptr =3D tcg_temp_new_ptr(); + + tcg_gen_mov_tl(s->A0, cpu_regs[R_EDI]); + gen_extu(s->aflag, s->A0); + gen_add_A0_ds_seg(s); + + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); + tcg_gen_addi_ptr(arg2_ptr, cpu_env, arg2); + gen_helper_maskmov_mmx(cpu_env, arg1_ptr, arg2_ptr, s->A0); + + tcg_temp_free_ptr(arg1_ptr); + tcg_temp_free_ptr(arg2_ptr); +} + +GEN_INSN2(movntps, Mdq, Vdq) +{ + assert(arg1 =3D=3D s->A0); + gen_sto_env_A0(s, arg2); +} + +GEN_INSN2(movntq, Mq, Pq) +{ + assert(arg1 =3D=3D s->A0); + gen_stq_env_A0(s, arg2); +} + DEF_GEN_INSN0_HELPER(emms, emms) =20 +GEN_INSN0(sfence) +{ + if (s->prefix & PREFIX_LOCK) { + gen_illegal_opcode(s); + } else { + tcg_gen_mb(TCG_MO_ST_ST | TCG_BAR_SC); + } +} + +GEN_INSN1(ldmxcsr, Md) +{ + if ((s->flags & HF_EM_MASK) || !(s->flags & HF_OSFXSR_MASK)) { + gen_illegal_opcode(s); + } else if (s->flags & HF_TS_MASK) { + gen_exception(s, EXCP07_PREX); + } else { + tcg_gen_qemu_ld_i32(s->tmp2_i32, arg1, s->mem_index, MO_LEUL); + gen_helper_ldmxcsr(cpu_env, s->tmp2_i32); + } +} + +GEN_INSN1(stmxcsr, Md) +{ + if ((s->flags & HF_EM_MASK) || !(s->flags & HF_OSFXSR_MASK)) { + gen_illegal_opcode(s); + } else if (s->flags & HF_TS_MASK) { + gen_exception(s, EXCP07_PREX); + } else { + const size_t ofs =3D offsetof(CPUX86State, mxcsr); + tcg_gen_ld_i32(s->tmp2_i32, cpu_env, ofs); + tcg_gen_qemu_st_i32(s->tmp2_i32, arg1, s->mem_index, MO_LEUL); + } +} + +GEN_INSN1(prefetcht0, Mb) +{ +} +GEN_INSN1(prefetcht1, Mb) +{ +} +GEN_INSN1(prefetcht2, Mb) +{ +} +GEN_INSN1(prefetchnta, Mb) +{ +} + /* * Instruction translators */ --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837387; cv=none; d=zoho.com; s=zohoarc; b=GlZImSLjhJ+qltESX2xiJFo6m3XLnI4sNE/RFBs0XvQpjEacWaq2sU2MOsKOKvt1FJKL+FD1W5jABza1NGYJ/x5XXYlrIq3KFsBtZRWa9AQ+FPwEZlLTgkmJzgachg4pqAnkuT0X3uelJKdBl2+6yaai4crsjAcebQvWdq89vHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837387; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Y75N1nCChARzhBzkkJVMvdqN1QUUf7tayOoPoLK9798=; b=Omha4g6oXwq/PJdYBfptpKY+I2sX40hoTqxDaUn4wzP4X6BCqic73rytiXbsuY26Trg4ehZT8jTQimjv1Zn6mFvhe4wbjp1ZkQXTLhGD8i8kH/xi71I7OTw7krapTUrwnGQHQS8iTSAwV2u4VPKc+IGsK1ZXweCwy03p+CTQH9g= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156583738761885.22339535334936; Wed, 14 Aug 2019 19:49:47 -0700 (PDT) Received: from localhost ([::1]:37792 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5pi-0004Rf-22 for importer@patchew.org; Wed, 14 Aug 2019 22:49:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47092) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dl-0006Vm-W0 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dj-0000RX-Qc for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:33 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:38763) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dj-0000Qg-Ky for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:31 -0400 Received: by mail-yw1-xc44.google.com with SMTP id f187so297488ywa.5 for ; Wed, 14 Aug 2019 19:10:31 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Y75N1nCChARzhBzkkJVMvdqN1QUUf7tayOoPoLK9798=; b=V5LVCKz4NNl1urQ5i7NREzF3vdSAVKIfc0XAuP0y1psfNeHN54COB9kQP7XnhitpSZ TZgNovMm1He9XkzTitZaubnoSr6b1zLLPZF1RywW/r3H7ybGujLrctKxuX8cw34VorSj 1JZQuI1d2KsihWz3GNG4Glku0+COSTTuYQhL8fmlUmKZcQF3M1e2plFAr0WodWwlDPih V/J3N2tPo4+6ym1YsBWIyFUijAcOt3N+zDBDC4MPhrRBxv8dhgVtIIgBg29j7I6wPfLv b99lxdW2853uppA9SRSj0Dtm2G3ftsVEM4yept6FwisGyfCBdFOgLm5VhwX3NI/HhtSG pAGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Y75N1nCChARzhBzkkJVMvdqN1QUUf7tayOoPoLK9798=; b=Gj7JWWMVLa9aozrmqtlwcwjL3qjFVbkNNPToWf9DUbH/tAwaYBRcID9n0O+irY0HxY B+dZSHE0ZtQo/e0o24URc7yZ/sV43uoyY9wR9Hc2xQ5MqCYoVU0IjdA51i9A9O/NLLdK Vx2tzwnbuWQ9prrVWCBgf5B/BClHMzitXAq1MlWuRrYqOl8lx4WPQYbcbETtNu5SFSmM tUCGTLmiZekGOg0tuLdc5quP0BAJ82mt7tVAHa9Ut0SkkUkbskHNQNLuHhlucBjrYRl1 C1jLOxDIUcgMqQKiJqmc7lpyVf/LHAY96lHL9DPOPPyEXU+xG1fZVWgNO6dmaw6U2img NFew== X-Gm-Message-State: APjAAAUYx/wWzO9VIdWUJzsa+k40UvETAdr6+TmsNpX+uWX9y06eH7MB 4OcPB+olIc6LmWlimi7doO50yYYN X-Google-Smtp-Source: APXvYqycesvVjuNo+X3cp8ww56GlcqWVD0cEc8vKg5uhvMJjxLwoVwxyt88sWLZovmfV7an1WWbZvg== X-Received: by 2002:a81:9c0f:: with SMTP id m15mr1545651ywa.495.1565835030789; Wed, 14 Aug 2019 19:10:30 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:22 -0400 Message-Id: <20190815020928.9679-41-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c44 Subject: [Qemu-devel] [RFC PATCH v3 40/46] target/i386: introduce SSE instructions to sse-opcode.inc.h X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add all the SSE instruction entries to sse-opcode.inc.h. Signed-off-by: Jan Bobek --- target/i386/sse-opcode.inc.h | 158 +++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/target/i386/sse-opcode.inc.h b/target/i386/sse-opcode.inc.h index 36963e5a7c..39947aeb51 100644 --- a/target/i386/sse-opcode.inc.h +++ b/target/i386/sse-opcode.inc.h @@ -51,6 +51,36 @@ OPCODE(movq, LEG(NP, 0F, 1, 0x7e), MMX, WR, Eq, Pq) OPCODE(movq, LEG(NP, 0F, 0, 0x6f), MMX, WR, Pq, Qq) /* NP 0F 7F /r: MOVQ mm/m64, mm */ OPCODE(movq, LEG(NP, 0F, 0, 0x7f), MMX, WR, Qq, Pq) +/* NP 0F 28 /r: MOVAPS xmm1, xmm2/m128 */ +OPCODE(movaps, LEG(NP, 0F, 0, 0x28), SSE, WR, Vdq, Wdq) +/* NP 0F 29 /r: MOVAPS xmm2/m128, xmm1 */ +OPCODE(movaps, LEG(NP, 0F, 0, 0x29), SSE, WR, Wdq, Vdq) +/* NP 0F 10 /r: MOVUPS xmm1, xmm2/m128 */ +OPCODE(movups, LEG(NP, 0F, 0, 0x10), SSE, WR, Vdq, Wdq) +/* NP 0F 11 /r: MOVUPS xmm2/m128, xmm1 */ +OPCODE(movups, LEG(NP, 0F, 0, 0x11), SSE, WR, Wdq, Vdq) +/* F3 0F 10 /r: MOVSS xmm1, xmm2/m32 */ +OPCODE(movss, LEG(F3, 0F, 0, 0x10), SSE, WRRR, Vdq, Vdq, Wd, modrm_mod) +/* F3 0F 11 /r: MOVSS xmm2/m32, xmm1 */ +OPCODE(movss, LEG(F3, 0F, 0, 0x11), SSE, WR, Wd, Vd) +/* NP 0F 12 /r: MOVHLPS xmm1, xmm2 */ +/* NP 0F 12 /r: MOVLPS xmm1, m64 */ +OPCODE(movhlps, LEG(NP, 0F, 0, 0x12), SSE, WR, Vq, UdqMhq) +/* 0F 13 /r: MOVLPS m64, xmm1 */ +OPCODE(movlps, LEG(NP, 0F, 0, 0x13), SSE, WR, Mq, Vq) +/* NP 0F 16 /r: MOVLHPS xmm1, xmm2 */ +/* NP 0F 16 /r: MOVHPS xmm1, m64 */ +OPCODE(movlhps, LEG(NP, 0F, 0, 0x16), SSE, WRR, Vdq, Vq, Wq) +/* NP 0F 17 /r: MOVHPS m64, xmm1 */ +OPCODE(movhps, LEG(NP, 0F, 0, 0x17), SSE, WR, Mq, Vdq) +/* NP 0F D7 /r: PMOVMSKB r32, mm */ +OPCODE(pmovmskb, LEG(NP, 0F, 0, 0xd7), SSE, WR, Gd, Nq) +/* NP REX.W 0F D7 /r: PMOVMSKB r64, mm */ +OPCODE(pmovmskb, LEG(NP, 0F, 1, 0xd7), SSE, WR, Gq, Nq) +/* NP 0F 50 /r: MOVMSKPS r32, xmm */ +OPCODE(movmskps, LEG(NP, 0F, 0, 0x50), SSE, WR, Gd, Udq) +/* NP REX.W 0F 50 /r: MOVMSKPS r64, xmm */ +OPCODE(movmskps, LEG(NP, 0F, 1, 0x50), SSE, WR, Gq, Udq) /* NP 0F FC /r: PADDB mm, mm/m64 */ OPCODE(paddb, LEG(NP, 0F, 0, 0xfc), MMX, WRR, Pq, Pq, Qq) /* NP 0F FD /r: PADDW mm, mm/m64 */ @@ -65,6 +95,10 @@ OPCODE(paddsw, LEG(NP, 0F, 0, 0xed), MMX, WRR, Pq, Pq, Q= q) OPCODE(paddusb, LEG(NP, 0F, 0, 0xdc), MMX, WRR, Pq, Pq, Qq) /* NP 0F DD /r: PADDUSW mm,mm/m64 */ OPCODE(paddusw, LEG(NP, 0F, 0, 0xdd), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 58 /r: ADDPS xmm1, xmm2/m128 */ +OPCODE(addps, LEG(NP, 0F, 0, 0x58), SSE, WRR, Vdq, Vdq, Wdq) +/* F3 0F 58 /r: ADDSS xmm1, xmm2/m32 */ +OPCODE(addss, LEG(F3, 0F, 0, 0x58), SSE, WRR, Vd, Vd, Wd) /* NP 0F F8 /r: PSUBB mm, mm/m64 */ OPCODE(psubb, LEG(NP, 0F, 0, 0xf8), MMX, WRR, Pq, Pq, Qq) /* NP 0F F9 /r: PSUBW mm, mm/m64 */ @@ -79,12 +113,60 @@ OPCODE(psubsw, LEG(NP, 0F, 0, 0xe9), MMX, WRR, Pq, Pq,= Qq) OPCODE(psubusb, LEG(NP, 0F, 0, 0xd8), MMX, WRR, Pq, Pq, Qq) /* NP 0F D9 /r: PSUBUSW mm, mm/m64 */ OPCODE(psubusw, LEG(NP, 0F, 0, 0xd9), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 5C /r: SUBPS xmm1, xmm2/m128 */ +OPCODE(subps, LEG(NP, 0F, 0, 0x5c), SSE, WRR, Vdq, Vdq, Wdq) +/* F3 0F 5C /r: SUBSS xmm1, xmm2/m32 */ +OPCODE(subss, LEG(F3, 0F, 0, 0x5c), SSE, WRR, Vd, Vd, Wd) /* NP 0F D5 /r: PMULLW mm, mm/m64 */ OPCODE(pmullw, LEG(NP, 0F, 0, 0xd5), MMX, WRR, Pq, Pq, Qq) /* NP 0F E5 /r: PMULHW mm, mm/m64 */ OPCODE(pmulhw, LEG(NP, 0F, 0, 0xe5), MMX, WRR, Pq, Pq, Qq) +/* NP 0F E4 /r: PMULHUW mm1, mm2/m64 */ +OPCODE(pmulhuw, LEG(NP, 0F, 0, 0xe4), SSE, WRR, Pq, Pq, Qq) +/* NP 0F 59 /r: MULPS xmm1, xmm2/m128 */ +OPCODE(mulps, LEG(NP, 0F, 0, 0x59), SSE, WRR, Vdq, Vdq, Wdq) +/* F3 0F 59 /r: MULSS xmm1,xmm2/m32 */ +OPCODE(mulss, LEG(F3, 0F, 0, 0x59), SSE, WRR, Vd, Vd, Wd) /* NP 0F F5 /r: PMADDWD mm, mm/m64 */ OPCODE(pmaddwd, LEG(NP, 0F, 0, 0xf5), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 5E /r: DIVPS xmm1, xmm2/m128 */ +OPCODE(divps, LEG(NP, 0F, 0, 0x5e), SSE, WRR, Vdq, Vdq, Wdq) +/* F3 0F 5E /r: DIVSS xmm1, xmm2/m32 */ +OPCODE(divss, LEG(F3, 0F, 0, 0x5e), SSE, WRR, Vd, Vd, Wd) +/* NP 0F 53 /r: RCPPS xmm1, xmm2/m128 */ +OPCODE(rcpps, LEG(NP, 0F, 0, 0x53), SSE, WR, Vdq, Wdq) +/* F3 0F 53 /r: RCPSS xmm1, xmm2/m32 */ +OPCODE(rcpss, LEG(F3, 0F, 0, 0x53), SSE, WR, Vd, Wd) +/* NP 0F 51 /r: SQRTPS xmm1, xmm2/m128 */ +OPCODE(sqrtps, LEG(NP, 0F, 0, 0x51), SSE, WR, Vdq, Wdq) +/* F3 0F 51 /r: SQRTSS xmm1, xmm2/m32 */ +OPCODE(sqrtss, LEG(F3, 0F, 0, 0x51), SSE, WR, Vd, Wd) +/* NP 0F 52 /r: RSQRTPS xmm1, xmm2/m128 */ +OPCODE(rsqrtps, LEG(NP, 0F, 0, 0x52), SSE, WR, Vdq, Wdq) +/* F3 0F 52 /r: RSQRTSS xmm1, xmm2/m32 */ +OPCODE(rsqrtss, LEG(F3, 0F, 0, 0x52), SSE, WR, Vd, Wd) +/* NP 0F DA /r: PMINUB mm1, mm2/m64 */ +OPCODE(pminub, LEG(NP, 0F, 0, 0xda), SSE, WRR, Pq, Pq, Qq) +/* NP 0F EA /r: PMINSW mm1, mm2/m64 */ +OPCODE(pminsw, LEG(NP, 0F, 0, 0xea), SSE, WRR, Pq, Pq, Qq) +/* NP 0F 5D /r: MINPS xmm1, xmm2/m128 */ +OPCODE(minps, LEG(NP, 0F, 0, 0x5d), SSE, WRR, Vdq, Vdq, Wdq) +/* F3 0F 5D /r: MINSS xmm1,xmm2/m32 */ +OPCODE(minss, LEG(F3, 0F, 0, 0x5d), SSE, WRR, Vd, Vd, Wd) +/* NP 0F DE /r: PMAXUB mm1, mm2/m64 */ +OPCODE(pmaxub, LEG(NP, 0F, 0, 0xde), SSE, WRR, Pq, Pq, Qq) +/* NP 0F EE /r: PMAXSW mm1, mm2/m64 */ +OPCODE(pmaxsw, LEG(NP, 0F, 0, 0xee), SSE, WRR, Pq, Pq, Qq) +/* NP 0F 5F /r: MAXPS xmm1, xmm2/m128 */ +OPCODE(maxps, LEG(NP, 0F, 0, 0x5f), SSE, WRR, Vdq, Vdq, Wdq) +/* F3 0F 5F /r: MAXSS xmm1, xmm2/m32 */ +OPCODE(maxss, LEG(F3, 0F, 0, 0x5f), SSE, WRR, Vd, Vd, Wd) +/* NP 0F E0 /r: PAVGB mm1, mm2/m64 */ +OPCODE(pavgb, LEG(NP, 0F, 0, 0xe0), SSE, WRR, Pq, Pq, Qq) +/* NP 0F E3 /r: PAVGW mm1, mm2/m64 */ +OPCODE(pavgw, LEG(NP, 0F, 0, 0xe3), SSE, WRR, Pq, Pq, Qq) +/* NP 0F F6 /r: PSADBW mm1, mm2/m64 */ +OPCODE(psadbw, LEG(NP, 0F, 0, 0xf6), SSE, WRR, Pq, Pq, Qq) /* NP 0F 74 /r: PCMPEQB mm,mm/m64 */ OPCODE(pcmpeqb, LEG(NP, 0F, 0, 0x74), MMX, WRR, Pq, Pq, Qq) /* NP 0F 75 /r: PCMPEQW mm,mm/m64 */ @@ -97,14 +179,30 @@ OPCODE(pcmpgtb, LEG(NP, 0F, 0, 0x64), MMX, WRR, Pq, Pq= , Qq) OPCODE(pcmpgtw, LEG(NP, 0F, 0, 0x65), MMX, WRR, Pq, Pq, Qq) /* NP 0F 66 /r: PCMPGTD mm,mm/m64 */ OPCODE(pcmpgtd, LEG(NP, 0F, 0, 0x66), MMX, WRR, Pq, Pq, Qq) +/* NP 0F C2 /r ib: CMPPS xmm1, xmm2/m128, imm8 */ +OPCODE(cmpps, LEG(NP, 0F, 0, 0xc2), SSE, WRRR, Vdq, Vdq, Wdq, Ib) +/* F3 0F C2 /r ib: CMPSS xmm1, xmm2/m32, imm8 */ +OPCODE(cmpss, LEG(F3, 0F, 0, 0xc2), SSE, WRRR, Vd, Vd, Wd, Ib) +/* NP 0F 2E /r: UCOMISS xmm1, xmm2/m32 */ +OPCODE(ucomiss, LEG(NP, 0F, 0, 0x2e), SSE, RR, Vd, Wd) +/* NP 0F 2F /r: COMISS xmm1, xmm2/m32 */ +OPCODE(comiss, LEG(NP, 0F, 0, 0x2f), SSE, RR, Vd, Wd) /* NP 0F DB /r: PAND mm, mm/m64 */ OPCODE(pand, LEG(NP, 0F, 0, 0xdb), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 54 /r: ANDPS xmm1, xmm2/m128 */ +OPCODE(andps, LEG(NP, 0F, 0, 0x54), SSE, WRR, Vdq, Vdq, Wdq) /* NP 0F DF /r: PANDN mm, mm/m64 */ OPCODE(pandn, LEG(NP, 0F, 0, 0xdf), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 55 /r: ANDNPS xmm1, xmm2/m128 */ +OPCODE(andnps, LEG(NP, 0F, 0, 0x55), SSE, WRR, Vdq, Vdq, Wdq) /* NP 0F EB /r: POR mm, mm/m64 */ OPCODE(por, LEG(NP, 0F, 0, 0xeb), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 56 /r: ORPS xmm1, xmm2/m128 */ +OPCODE(orps, LEG(NP, 0F, 0, 0x56), SSE, WRR, Vdq, Vdq, Wdq) /* NP 0F EF /r: PXOR mm, mm/m64 */ OPCODE(pxor, LEG(NP, 0F, 0, 0xef), MMX, WRR, Pq, Pq, Qq) +/* NP 0F 57 /r: XORPS xmm1, xmm2/m128 */ +OPCODE(xorps, LEG(NP, 0F, 0, 0x57), SSE, WRR, Vdq, Vdq, Wdq) /* NP 0F F1 /r: PSLLW mm, mm/m64 */ OPCODE(psllw, LEG(NP, 0F, 0, 0xf1), MMX, WRR, Pq, Pq, Qq) /* NP 0F F2 /r: PSLLD mm, mm/m64 */ @@ -139,6 +237,44 @@ OPCODE(punpcklbw, LEG(NP, 0F, 0, 0x60), MMX, WRR, Pq, = Pq, Qd) OPCODE(punpcklwd, LEG(NP, 0F, 0, 0x61), MMX, WRR, Pq, Pq, Qd) /* NP 0F 62 /r: PUNPCKLDQ mm, mm/m32 */ OPCODE(punpckldq, LEG(NP, 0F, 0, 0x62), MMX, WRR, Pq, Pq, Qd) +/* NP 0F 14 /r: UNPCKLPS xmm1, xmm2/m128 */ +OPCODE(unpcklps, LEG(NP, 0F, 0, 0x14), SSE, WRR, Vdq, Vdq, Wdq) +/* NP 0F 15 /r: UNPCKHPS xmm1, xmm2/m128 */ +OPCODE(unpckhps, LEG(NP, 0F, 0, 0x15), SSE, WRR, Vdq, Vdq, Wdq) +/* NP 0F 70 /r ib: PSHUFW mm1, mm2/m64, imm8 */ +OPCODE(pshufw, LEG(NP, 0F, 0, 0x70), SSE, WRR, Pq, Qq, Ib) +/* NP 0F C6 /r ib: SHUFPS xmm1, xmm3/m128, imm8 */ +OPCODE(shufps, LEG(NP, 0F, 0, 0xc6), SSE, WRRR, Vdq, Vdq, Wdq, Ib) +/* NP 0F C4 /r ib: PINSRW mm, r32/m16, imm8 */ +OPCODE(pinsrw, LEG(NP, 0F, 0, 0xc4), SSE, WRRR, Pq, Pq, RdMw, Ib) +/* NP 0F C5 /r ib: PEXTRW r32, mm, imm8 */ +OPCODE(pextrw, LEG(NP, 0F, 0, 0xc5), SSE, WRR, Gd, Nq, Ib) +/* NP REX.W 0F C5 /r ib: PEXTRW r64, mm, imm8 */ +OPCODE(pextrw, LEG(NP, 0F, 1, 0xc5), SSE, WRR, Gq, Nq, Ib) +/* NP 0F 2A /r: CVTPI2PS xmm, mm/m64 */ +OPCODE(cvtpi2ps, LEG(NP, 0F, 0, 0x2a), SSE, WR, Vdq, Qq) +/* F3 0F 2A /r: CVTSI2SS xmm1,r/m32 */ +OPCODE(cvtsi2ss, LEG(F3, 0F, 0, 0x2a), SSE, WR, Vd, Ed) +/* F3 REX.W 0F 2A /r: CVTSI2SS xmm1,r/m64 */ +OPCODE(cvtsi2ss, LEG(F3, 0F, 1, 0x2a), SSE, WR, Vd, Eq) +/* NP 0F 2D /r: CVTPS2PI mm, xmm/m64 */ +OPCODE(cvtps2pi, LEG(NP, 0F, 0, 0x2d), SSE, WR, Pq, Wq) +/* F3 0F 2D /r: CVTSS2SI r32,xmm1/m32 */ +OPCODE(cvtss2si, LEG(F3, 0F, 0, 0x2d), SSE, WR, Gd, Wd) +/* F3 REX.W 0F 2D /r: CVTSS2SI r64,xmm1/m32 */ +OPCODE(cvtss2si, LEG(F3, 0F, 1, 0x2d), SSE, WR, Gq, Wd) +/* NP 0F 2C /r: CVTTPS2PI mm, xmm/m64 */ +OPCODE(cvttps2pi, LEG(NP, 0F, 0, 0x2c), SSE, WR, Pq, Wq) +/* F3 0F 2C /r: CVTTSS2SI r32,xmm1/m32 */ +OPCODE(cvttss2si, LEG(F3, 0F, 0, 0x2c), SSE, WR, Gd, Wd) +/* F3 REX.W 0F 2C /r: CVTTSS2SI r64,xmm1/m32 */ +OPCODE(cvttss2si, LEG(F3, 0F, 1, 0x2c), SSE, WR, Gq, Wd) +/* NP 0F F7 /r: MASKMOVQ mm1, mm2 */ +OPCODE(maskmovq, LEG(NP, 0F, 0, 0xf7), SSE, RR, Pq, Nq) +/* NP 0F 2B /r: MOVNTPS m128, xmm1 */ +OPCODE(movntps, LEG(NP, 0F, 0, 0x2b), SSE, WR, Mdq, Vdq) +/* NP 0F E7 /r: MOVNTQ m64, mm */ +OPCODE(movntq, LEG(NP, 0F, 0, 0xe7), SSE, WR, Mq, Pq) /* NP 0F 77: EMMS */ OPCODE(emms, LEG(NP, 0F, 0, 0x77), MMX, ) =20 @@ -170,6 +306,28 @@ OPCODE_GRP_BEGIN(grp14_LEG_NP) OPCODE_GRPMEMB(grp14_LEG_NP, psrlq, 2, MMX, WRR, Nq, Nq, Ib) OPCODE_GRP_END(grp14_LEG_NP) =20 +OPCODE_GRP(grp15_LEG_NP, LEG(NP, 0F, 0, 0xae)) +OPCODE_GRP_BEGIN(grp15_LEG_NP) + /* NP 0F AE /7: SFENCE */ + OPCODE_GRPMEMB(grp15_LEG_NP, sfence, 7, SSE, ) + /* NP 0F AE /2: LDMXCSR m32 */ + OPCODE_GRPMEMB(grp15_LEG_NP, ldmxcsr, 2, SSE, R, Md) + /* NP 0F AE /3: STMXCSR m32 */ + OPCODE_GRPMEMB(grp15_LEG_NP, stmxcsr, 3, SSE, W, Md) +OPCODE_GRP_END(grp15_LEG_NP) + +OPCODE_GRP(grp16_LEG_NP, LEG(NP, 0F, 0, 0x18)) +OPCODE_GRP_BEGIN(grp16_LEG_NP) + /* 0F 18 /1: PREFETCHT0 m8 */ + OPCODE_GRPMEMB(grp16_LEG_NP, prefetcht0, 1, SSE, R, Mb) + /* 0F 18 /2: PREFETCHT1 m8 */ + OPCODE_GRPMEMB(grp16_LEG_NP, prefetcht1, 2, SSE, R, Mb) + /* 0F 18 /3: PREFETCHT2 m8 */ + OPCODE_GRPMEMB(grp16_LEG_NP, prefetcht2, 3, SSE, R, Mb) + /* 0F 18 /0: PREFETCHNTA m8 */ + OPCODE_GRPMEMB(grp16_LEG_NP, prefetchnta, 0, SSE, R, Mb) +OPCODE_GRP_END(grp16_LEG_NP) + #undef FMTI____ #undef FMTI__R__ #undef FMTI__RR__ --=20 2.20.1 From nobody Sun May 5 11:28:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837281; cv=none; d=zoho.com; s=zohoarc; b=enRNtAvdYLdaCLdDpb6h6K92a2wWBlhPo+i7ITU+8jxIHo6kjGOlYcMOo6FIltFXq7xa+720vjrpxbOImabAv5wJgMZqibSiRI8fE4pcMdfi744Y6jYwrkjQ2NP5syHkfZAOg8txPsWWF9cp6uSw+LWDedlhLH/RN2leP1pNNnc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837281; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=yPZM94CiBTkzIXWuhhec9WrQvniel8ip84VQamAa6Fk=; b=m51UY7cG/fuqaLabB3B9NB3j2QN4x/eMK9WSuvVCdO/47h5pji6hNUSCD0cRjLQxi44x5mQDjhIXouezOyzR0mPF/cuNyHAgBAxiS8/z6fBHX8s1en8JcB85tSSGgzx6SL/EUSwVN3k9RhtoUAviztJ6qTJuSw7j16xOkJOSgA4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837281024873.3077501602493; Wed, 14 Aug 2019 19:48:01 -0700 (PDT) Received: from localhost ([::1]:37764 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5nz-0001xk-Iz for importer@patchew.org; Wed, 14 Aug 2019 22:47:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47091) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dl-0006Vg-VG for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dk-0000T1-LO for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:33 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:37212) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dk-0000SI-Ga for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:32 -0400 Received: by mail-yw1-xc43.google.com with SMTP id u141so299706ywe.4 for ; Wed, 14 Aug 2019 19:10:32 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yPZM94CiBTkzIXWuhhec9WrQvniel8ip84VQamAa6Fk=; b=rxmoiry2DX+rhEAj6cnPBk44vOs+4QpV21nPyjei+U1H2GBSFuoJFHXTVSm6jJIlI9 mFYPkQ2Zzt4RyJEcEn89EU2V0U+ZgaRohomWjOmA7SPFaHd9MAldhFzrr4RytechqDDx 5ZQP8GCozNibQjWlrHUpRSrDmXffjeTfccC6zjTrRQnz30mrDY1Wae3f5fqKUTXvJKu1 W2dfdcHGBJJVae1wKshZnkg+fLFBsEMqjlsMNQU/crb2y4caudMuR3FZvOQrI1O3m55P 9laKoLWCIqqcd8sBL1Op9UBvizhOfmxn0e7MIGAW9+akvHBVVAceKiXn0ue8Z9okSptQ EtPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yPZM94CiBTkzIXWuhhec9WrQvniel8ip84VQamAa6Fk=; b=gzhrCjHn43N1f98A6zF+icO8TheRK5riDnsiHe8Fm2ZgycgFyJItWL1DsrL3TrG15D wHqQBSgJV4t7y9C7g1XeTb36qpqpt4qkJbT2o9xK7ZkGDpJGJyG6p0NTBHLXxdXWMRft iONWKOtlpux0gOaAbUUtaHh5eE9zuiDgnI5ruDXCjP/sV+CCqtxaEVf/yb1w7Eplndz1 OYYxIBIxUJLcsikZhZbQ3SUwrFK73EN/i8OLxNl7D7hOba0kIvHYlLUTLupoJ51M6LtK lboNXOkuudw9MY3cu1NQD6kdKczf+elYn64qwoKd1NRXdhzEu262izVatxr5plcx574d SLUg== X-Gm-Message-State: APjAAAVK8LbL5E7tIB12+RHrQgZT5QWfoDK2nmJZyJO6n6sTzh5qFQax AG2ZoywjaGN+2nvVe8LYefzcKaCS X-Google-Smtp-Source: APXvYqzCwZgL8qqIVmKCuLS7bSxnBAdAWlHSC+Ee7Mks0a9Lq7lDEY38NY50pbdz7itCav+2rM2smg== X-Received: by 2002:a81:aa50:: with SMTP id z16mr1525233ywk.278.1565835031792; Wed, 14 Aug 2019 19:10:31 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:23 -0400 Message-Id: <20190815020928.9679-42-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 41/46] target/i386: introduce SSE2 translators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use the translator macros to define translators required by SSE2 instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 3d526ee470..177bedd0ef 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5891,14 +5891,20 @@ DEF_TRANSLATE_INSN1(Md) } =20 DEF_TRANSLATE_INSN2(Ed, Pq) +DEF_TRANSLATE_INSN2(Ed, Vdq) DEF_TRANSLATE_INSN2(Eq, Pq) +DEF_TRANSLATE_INSN2(Eq, Vdq) DEF_TRANSLATE_INSN2(Gd, Nq) DEF_TRANSLATE_INSN2(Gd, Udq) DEF_TRANSLATE_INSN2(Gd, Wd) +DEF_TRANSLATE_INSN2(Gd, Wq) DEF_TRANSLATE_INSN2(Gq, Nq) DEF_TRANSLATE_INSN2(Gq, Udq) DEF_TRANSLATE_INSN2(Gq, Wd) +DEF_TRANSLATE_INSN2(Gq, Wq) +DEF_TRANSLATE_INSN2(Md, Gd) DEF_TRANSLATE_INSN2(Mdq, Vdq) +DEF_TRANSLATE_INSN2(Mq, Gq) DEF_TRANSLATE_INSN2(Mq, Pq) DEF_TRANSLATE_INSN2(Mq, Vdq) DEF_TRANSLATE_INSN2(Mq, Vq) @@ -5906,16 +5912,33 @@ DEF_TRANSLATE_INSN2(Pq, Ed) DEF_TRANSLATE_INSN2(Pq, Eq) DEF_TRANSLATE_INSN2(Pq, Nq) DEF_TRANSLATE_INSN2(Pq, Qq) +DEF_TRANSLATE_INSN2(Pq, Uq) +DEF_TRANSLATE_INSN2(Pq, Wdq) DEF_TRANSLATE_INSN2(Pq, Wq) DEF_TRANSLATE_INSN2(Qq, Pq) +DEF_TRANSLATE_INSN2(UdqMq, Vq) DEF_TRANSLATE_INSN2(Vd, Ed) DEF_TRANSLATE_INSN2(Vd, Eq) DEF_TRANSLATE_INSN2(Vd, Wd) +DEF_TRANSLATE_INSN2(Vd, Wq) +DEF_TRANSLATE_INSN2(Vdq, Ed) +DEF_TRANSLATE_INSN2(Vdq, Eq) +DEF_TRANSLATE_INSN2(Vdq, Nq) DEF_TRANSLATE_INSN2(Vdq, Qq) +DEF_TRANSLATE_INSN2(Vdq, Udq) DEF_TRANSLATE_INSN2(Vdq, Wdq) +DEF_TRANSLATE_INSN2(Vdq, Wq) +DEF_TRANSLATE_INSN2(Vq, Ed) +DEF_TRANSLATE_INSN2(Vq, Eq) +DEF_TRANSLATE_INSN2(Vq, Mq) DEF_TRANSLATE_INSN2(Vq, UdqMhq) +DEF_TRANSLATE_INSN2(Vq, Wd) +DEF_TRANSLATE_INSN2(Vq, Wq) DEF_TRANSLATE_INSN2(Wd, Vd) DEF_TRANSLATE_INSN2(Wdq, Vdq) +DEF_TRANSLATE_INSN2(Wq, Vq) +DEF_TRANSLATE_INSN2(Wq, Wd) +DEF_TRANSLATE_INSN2(modrm_mod, modrm) =20 #define DEF_TRANSLATE_INSN3(opT1, opT2, opT3) \ static void translate_insn3(opT1, opT2, opT3)( \ @@ -5962,14 +5985,21 @@ DEF_TRANSLATE_INSN2(Wdq, Vdq) } =20 DEF_TRANSLATE_INSN3(Gd, Nq, Ib) +DEF_TRANSLATE_INSN3(Gd, Udq, Ib) DEF_TRANSLATE_INSN3(Gq, Nq, Ib) +DEF_TRANSLATE_INSN3(Gq, Udq, Ib) DEF_TRANSLATE_INSN3(Nq, Nq, Ib) DEF_TRANSLATE_INSN3(Pq, Pq, Qd) DEF_TRANSLATE_INSN3(Pq, Pq, Qq) DEF_TRANSLATE_INSN3(Pq, Qq, Ib) +DEF_TRANSLATE_INSN3(Udq, Udq, Ib) DEF_TRANSLATE_INSN3(Vd, Vd, Wd) +DEF_TRANSLATE_INSN3(Vdq, Vd, Mq) +DEF_TRANSLATE_INSN3(Vdq, Vdq, Mq) DEF_TRANSLATE_INSN3(Vdq, Vdq, Wdq) DEF_TRANSLATE_INSN3(Vdq, Vq, Wq) +DEF_TRANSLATE_INSN3(Vdq, Wdq, Ib) +DEF_TRANSLATE_INSN3(Vq, Vq, Wq) =20 #define DEF_TRANSLATE_INSN4(opT1, opT2, opT3, opT4) \ static void translate_insn4(opT1, opT2, opT3, opT4)( \ @@ -6025,8 +6055,11 @@ DEF_TRANSLATE_INSN3(Vdq, Vq, Wq) =20 DEF_TRANSLATE_INSN4(Pq, Pq, RdMw, Ib) DEF_TRANSLATE_INSN4(Vd, Vd, Wd, Ib) +DEF_TRANSLATE_INSN4(Vdq, Vdq, RdMw, Ib) DEF_TRANSLATE_INSN4(Vdq, Vdq, Wd, modrm_mod) DEF_TRANSLATE_INSN4(Vdq, Vdq, Wdq, Ib) +DEF_TRANSLATE_INSN4(Vdq, Vdq, Wq, modrm_mod) +DEF_TRANSLATE_INSN4(Vq, Vq, Wq, Ib) =20 #define OPCODE_GRP_BEGIN(grpname) \ static void translate_group(grpname)( \ --=20 2.20.1 From nobody Sun May 5 11:28:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837461; cv=none; d=zoho.com; s=zohoarc; b=ZlZgKmJi7QYzJxZeQovvwUibXNjbri4DyoCN7CVLqJ3iOF9Bu2diHiLYPgHVl4ak1+E3BB0baObE0gfUvXWu17u4Hct9UjhzwOGPNvzGqeUbQMQVjosWfKfP94+kZxNFyavBgxtPtWkYuiqNJYV6thd7MzgJKJsSBdFB0+yFGyk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837461; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=5e6l03Qz5LQ2A/rrsuSgH7TNz9zLWV4wYVJ76E7XL0A=; b=hrtFXUn754BzFNF4esj5u+CtPsUXNRdO8ASmLlG17/oXpH4ty8ol1ft694ns9zU/nxY1yNFzobFLIF3+Ys8CtpouZyXPLgW8sD/2Xeu69p1mbpluscBPMp8F/Z4IyUi73zd3NJ1VQimIwHU/dB95KuV2MlLo1oArF1IVtxr10eA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837461881518.2424925607731; Wed, 14 Aug 2019 19:51:01 -0700 (PDT) Received: from localhost ([::1]:37804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5qu-0006J3-FS for importer@patchew.org; Wed, 14 Aug 2019 22:51:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47140) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dp-0006al-1o for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dm-0000WL-1I for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:36 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:41460) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dl-0000Vp-RN for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:33 -0400 Received: by mail-yb1-xb42.google.com with SMTP id n7so398864ybd.8 for ; Wed, 14 Aug 2019 19:10:33 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5e6l03Qz5LQ2A/rrsuSgH7TNz9zLWV4wYVJ76E7XL0A=; b=clvpy6qyVDPIkGPHsIPLL16HuTRgPFPSFSpWbDm+RJu4ggSF4ZZQ9F4PEwbrvujHCM SpM9Rsdfifgsiv//CElikUTigeUwj0maVPyqkjgd/JPajO3BzxFD2/eSk/09ZASz4eKQ II4qUVxz2Tqb3+YlHM3VPZAu/sovI7LRSABWTAFgb0JbXTRONGWHezBQ/sRDZWe4J3d+ YKggBy3iqiPp3SA1+jC/jdwpvV+hrWtLlAs0fzAz+LMHDmgZB0qSalC4dwJUl9fdWB31 SdpXEpp4ti4gg8Yp/WBB3GjKqiEG3K1UkR1IOS3dGRi9ikUB7ehw/KmFKYwdXr6qySjm +99A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5e6l03Qz5LQ2A/rrsuSgH7TNz9zLWV4wYVJ76E7XL0A=; b=KQ/ywltPZjf+lSggUjll5qf/2nxICLwtv9jmRrGCyJEwmFjIqlgc9FYpex30cmS9Kx twpmIglR3veWyz43j20DOmZUAL/UavuhKJNil1oTkV4BZafvo4dsFsJ4Qbul28O82akS uUi/PEA1yS+Z27v9Ii4d8v8JkO8hiC5Tk60+5KmbFbTwO57gSXdEt8Ut0Imlecz9MwiZ WVhWL+tVDhh5MRpioBuHyYwjD+sTcceqEkuGHXYaBTozIM1/GU08Lg3fYGtJdMLDzIe5 Ke3PjVddBPIq6rhIxwAIWzHfse9RmYpFlWcnqSzBaxsqlKr0PGnAIEB/I0DV018k+GQc DTvA== X-Gm-Message-State: APjAAAXoXtP16kCWaW8KtKJKhTYpDUCzcdaY/IGmeLfX0srvmccWo+Qq QjvrFzHcF9SuyFrDrc2CgocEkuI7 X-Google-Smtp-Source: APXvYqwKSJ1OfM0fnnGuDELrTZT/XAqoeyucOfluD/YwZYklzPzdqR9G1wnHad1119uE/a75eHO4uw== X-Received: by 2002:a25:97c1:: with SMTP id j1mr2043613ybo.349.1565835032861; Wed, 14 Aug 2019 19:10:32 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:24 -0400 Message-Id: <20190815020928.9679-43-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b42 Subject: [Qemu-devel] [RFC PATCH v3 42/46] target/i386: introduce SSE2 code generators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Introduce code generators required by SSE2 instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 444 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 442 insertions(+), 2 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index 177bedd0ef..7ec082e79d 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5391,6 +5391,21 @@ GEN_INSN2(movd, Ed, Pq) tcg_gen_ld_i32(arg1, cpu_env, arg2 + ofs); } =20 +GEN_INSN2(movq, Vdq, Eq); /* forward declaration */ +GEN_INSN2(movd, Vdq, Ed) +{ + const insnop_arg_t(Eq) arg2_r64 =3D tcg_temp_new_i64(); + tcg_gen_extu_i32_i64(arg2_r64, arg2); + gen_insn2(movq, Vdq, Eq)(env, s, arg1, arg2_r64); + tcg_temp_free_i64(arg2_r64); +} + +GEN_INSN2(movd, Ed, Vdq) +{ + const insnop_arg_t(Vdq) ofs =3D offsetof(ZMMReg, ZMM_L(0)); + tcg_gen_ld_i32(arg1, cpu_env, arg2 + ofs); +} + GEN_INSN2(movq, Pq, Eq) { const insnop_arg_t(Pq) ofs =3D offsetof(MMXReg, MMX_Q(0)); @@ -5403,12 +5418,53 @@ GEN_INSN2(movq, Eq, Pq) tcg_gen_ld_i64(arg1, cpu_env, arg2 + ofs); } =20 +GEN_INSN2(movq, Vdq, Eq) +{ + const insnop_arg_t(Vdq) ofs0 =3D offsetof(ZMMReg, ZMM_Q(0)); + tcg_gen_st_i64(arg2, cpu_env, arg1 + ofs0); + + const insnop_arg_t(Vdq) ofs1 =3D offsetof(ZMMReg, ZMM_Q(1)); + tcg_gen_movi_i64(arg2, 0); + tcg_gen_st_i64(arg2, cpu_env, arg1 + ofs1); +} + +GEN_INSN2(movq, Eq, Vdq) +{ + const insnop_arg_t(Vdq) ofs =3D offsetof(ZMMReg, ZMM_Q(0)); + tcg_gen_ld_i64(arg1, cpu_env, arg2 + ofs); +} + DEF_GEN_INSN2_GVEC_MM(movq, mov, Pq, Qq, MO_64) DEF_GEN_INSN2_GVEC_MM(movq, mov, Qq, Pq, MO_64) + +GEN_INSN2(movq, Vdq, Wq) +{ + const insnop_arg_t(Vdq) dofs =3D offsetof(ZMMReg, ZMM_Q(0)); + const insnop_arg_t(Wq) aofs =3D offsetof(ZMMReg, ZMM_Q(0)); + gen_op_movq(s, arg1 + dofs, arg2 + aofs); + + const TCGv_i64 r64z =3D tcg_const_i64(0); + tcg_gen_st_i64(r64z, cpu_env, arg1 + offsetof(ZMMReg, ZMM_Q(1))); + tcg_temp_free_i64(r64z); +} + +GEN_INSN2(movq, UdqMq, Vq) +{ + gen_insn2(movq, Vdq, Wq)(env, s, arg1, arg2); +} + DEF_GEN_INSN2_GVEC_XMM(movaps, mov, Vdq, Wdq, MO_64) DEF_GEN_INSN2_GVEC_XMM(movaps, mov, Wdq, Vdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movapd, mov, Vdq, Wdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movapd, mov, Wdq, Vdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movdqa, mov, Vdq, Wdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movdqa, mov, Wdq, Vdq, MO_64) DEF_GEN_INSN2_GVEC_XMM(movups, mov, Vdq, Wdq, MO_64) DEF_GEN_INSN2_GVEC_XMM(movups, mov, Wdq, Vdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movupd, mov, Vdq, Wdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movupd, mov, Wdq, Vdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movdqu, mov, Vdq, Wdq, MO_64) +DEF_GEN_INSN2_GVEC_XMM(movdqu, mov, Wdq, Vdq, MO_64) =20 GEN_INSN2(movss, Wd, Vd); /* forward declaration */ GEN_INSN4(movss, Vdq, Vdq, Wd, modrm_mod) @@ -5442,6 +5498,44 @@ GEN_INSN2(movss, Wd, Vd) gen_op_movl(s, arg1 + dofs, arg2 + aofs); } =20 +GEN_INSN2(movsd, Wq, Vq); /* forward declaration */ +GEN_INSN4(movsd, Vdq, Vdq, Wq, modrm_mod) +{ + assert(arg1 =3D=3D arg2); + + if (arg4 =3D=3D 3) { + /* merging movsd */ + gen_insn2(movsd, Wq, Vq)(env, s, arg1, arg3); + } else { + /* zero-extending movsd */ + gen_insn2(movq, Vdq, Wq)(env, s, arg1, arg3); + } +} + +GEN_INSN2(movsd, Wq, Vq) +{ + const size_t ofs =3D offsetof(ZMMReg, ZMM_Q(0)); + gen_op_movq(s, arg1 + ofs, arg2 + ofs); +} + +GEN_INSN2(movq2dq, Vdq, Nq) +{ + const insnop_arg_t(Vdq) dofs =3D offsetof(ZMMReg, ZMM_Q(0)); + const insnop_arg_t(Nq) aofs =3D offsetof(MMXReg, MMX_Q(0)); + gen_op_movq(s, arg1 + dofs, arg2 + aofs); + + const TCGv_i64 r64z =3D tcg_const_i64(0); + tcg_gen_st_i64(r64z, cpu_env, arg1 + offsetof(ZMMReg, ZMM_Q(1))); + tcg_temp_free_i64(r64z); +} + +GEN_INSN2(movdq2q, Pq, Uq) +{ + const insnop_arg_t(Pq) dofs =3D offsetof(MMXReg, MMX_Q(0)); + const insnop_arg_t(Uq) aofs =3D offsetof(ZMMReg, ZMM_Q(0)); + gen_op_movq(s, arg1 + dofs, arg2 + aofs); +} + GEN_INSN2(movhlps, Vq, UdqMhq) { const size_t dofs =3D offsetof(ZMMReg, ZMM_Q(0)); @@ -5455,6 +5549,17 @@ GEN_INSN2(movlps, Mq, Vq) gen_stq_env_A0(s, arg2 + offsetof(ZMMReg, ZMM_Q(0))); } =20 +GEN_INSN2(movlpd, Vq, Mq) +{ + assert(arg2 =3D=3D s->A0); + gen_ldq_env_A0(s, arg1 + offsetof(ZMMReg, ZMM_Q(0))); +} + +GEN_INSN2(movlpd, Mq, Vq) +{ + gen_insn2(movlps, Mq, Vq)(env, s, arg1, arg2); +} + GEN_INSN3(movlhps, Vdq, Vq, Wq) { assert(arg1 =3D=3D arg2); @@ -5470,6 +5575,18 @@ GEN_INSN2(movhps, Mq, Vdq) gen_stq_env_A0(s, arg2 + offsetof(ZMMReg, ZMM_Q(1))); } =20 +GEN_INSN3(movhpd, Vdq, Vd, Mq) +{ + assert(arg1 =3D=3D arg2); + assert(arg3 =3D=3D s->A0); + gen_ldq_env_A0(s, arg1 + offsetof(ZMMReg, ZMM_Q(1))); +} + +GEN_INSN2(movhpd, Mq, Vdq) +{ + gen_insn2(movhps, Mq, Vdq)(env, s, arg1, arg2); +} + DEF_GEN_INSN2_HELPER_DEP(pmovmskb, pmovmskb_mmx, Gd, Nq) =20 GEN_INSN2(pmovmskb, Gq, Nq) @@ -5480,6 +5597,16 @@ GEN_INSN2(pmovmskb, Gq, Nq) tcg_temp_free_i32(arg1_r32); } =20 +DEF_GEN_INSN2_HELPER_DEP(pmovmskb, pmovmskb_xmm, Gd, Udq) + +GEN_INSN2(pmovmskb, Gq, Udq) +{ + const TCGv_i32 arg1_r32 =3D tcg_temp_new_i32(); + gen_insn2(pmovmskb, Gd, Udq)(env, s, arg1_r32, arg2); + tcg_gen_extu_i32_i64(arg1, arg1_r32); + tcg_temp_free_i32(arg1_r32); +} + DEF_GEN_INSN2_HELPER_DEP(movmskps, movmskps, Gd, Udq) =20 GEN_INSN2(movmskps, Gq, Udq) @@ -5490,78 +5617,155 @@ GEN_INSN2(movmskps, Gq, Udq) tcg_temp_free_i32(arg1_r32); } =20 +DEF_GEN_INSN2_HELPER_DEP(movmskpd, movmskpd, Gd, Udq) + +GEN_INSN2(movmskpd, Gq, Udq) +{ + const TCGv_i32 arg1_r32 =3D tcg_temp_new_i32(); + gen_insn2(movmskpd, Gd, Udq)(env, s, arg1_r32, arg2); + tcg_gen_extu_i32_i64(arg1, arg1_r32); + tcg_temp_free_i32(arg1_r32); +} + DEF_GEN_INSN3_GVEC_MM(paddb, add, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(paddb, add, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddw, add, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(paddw, add, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_GVEC_MM(paddd, add, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_XMM(paddd, add, Vdq, Vdq, Wdq, MO_32) +DEF_GEN_INSN3_GVEC_MM(paddq, add, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(paddq, add, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(paddsb, ssadd, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(paddsb, ssadd, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddsw, ssadd, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(paddsw, ssadd, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_GVEC_MM(paddusb, usadd, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(paddusb, usadd, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddusw, usadd, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(paddusw, usadd, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_HELPER_EPP(addps, addps, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(addss, addss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(addpd, addpd, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(addsd, addsd, Vq, Vq, Wq) =20 DEF_GEN_INSN3_GVEC_MM(psubb, sub, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(psubb, sub, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(psubw, sub, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(psubw, sub, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_GVEC_MM(psubd, sub, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_XMM(psubd, sub, Vdq, Vdq, Wdq, MO_32) +DEF_GEN_INSN3_GVEC_MM(psubq, sub, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(psubq, sub, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(psubsb, sssub, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(psubsb, sssub, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(psubsw, sssub, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(psubsw, sssub, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_GVEC_MM(psubusb, ussub, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(psubusb, ussub, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(psubusw, ussub, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(psubusw, ussub, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_HELPER_EPP(subps, subps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(subpd, subpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(subss, subss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(subsd, subsd, Vq, Vq, Wq) =20 DEF_GEN_INSN3_HELPER_EPP(pmullw, pmullw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmullw, pmullw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(pmulhw, pmulhw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmulhw, pmulhw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(pmulhuw, pmulhuw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmulhuw, pmulhuw_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(pmuludq, pmuludq_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmuludq, pmuludq_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(mulps, mulps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(mulpd, mulpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(mulss, mulss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(mulsd, mulsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(pmaddwd, pmaddwd_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pmaddwd, pmaddwd_xmm, Vdq, Vdq, Wdq) =20 DEF_GEN_INSN3_HELPER_EPP(divps, divps, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(divss, divss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(divpd, divpd, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(divsd, divsd, Vq, Vq, Wq) =20 DEF_GEN_INSN2_HELPER_EPP(rcpps, rcpps, Vdq, Wdq) DEF_GEN_INSN2_HELPER_EPP(rcpss, rcpss, Vd, Wd) DEF_GEN_INSN2_HELPER_EPP(sqrtps, sqrtps, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(sqrtpd, sqrtpd, Vdq, Wdq) DEF_GEN_INSN2_HELPER_EPP(sqrtss, sqrtss, Vd, Wd) +DEF_GEN_INSN2_HELPER_EPP(sqrtsd, sqrtsd, Vq, Wq) DEF_GEN_INSN2_HELPER_EPP(rsqrtps, rsqrtps, Vdq, Wdq) DEF_GEN_INSN2_HELPER_EPP(rsqrtss, rsqrtss, Vd, Wd) =20 DEF_GEN_INSN3_GVEC_MM(pminub, umin, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(pminub, umin, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(pminsw, smin, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(pminsw, smin, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_HELPER_EPP(minps, minps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(minpd, minpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(minss, minss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(minsd, minsd, Vq, Vq, Wq) DEF_GEN_INSN3_GVEC_MM(pmaxub, umax, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(pmaxub, umax, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(pmaxsw, smax, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(pmaxsw, smax, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_HELPER_EPP(maxps, maxps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(maxpd, maxpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(maxss, maxss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(maxsd, maxsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(pavgb, pavgb_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pavgb, pavgb_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(pavgw, pavgw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pavgw, pavgw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psadbw, psadbw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psadbw, psadbw_xmm, Vdq, Vdq, Wdq) =20 DEF_GEN_INSN3_GVEC_MM(pcmpeqb, cmpeq, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(pcmpeqb, cmpeq, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(pcmpeqw, cmpeq, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(pcmpeqw, cmpeq, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_GVEC_MM(pcmpeqd, cmpeq, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_XMM(pcmpeqd, cmpeq, Vdq, Vdq, Wdq, MO_32) DEF_GEN_INSN3_GVEC_MM(pcmpgtb, cmpgt, Pq, Pq, Qq, MO_8) +DEF_GEN_INSN3_GVEC_XMM(pcmpgtb, cmpgt, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(pcmpgtw, cmpgt, Pq, Pq, Qq, MO_16) +DEF_GEN_INSN3_GVEC_XMM(pcmpgtw, cmpgt, Vdq, Vdq, Wdq, MO_16) DEF_GEN_INSN3_GVEC_MM(pcmpgtd, cmpgt, Pq, Pq, Qq, MO_32) +DEF_GEN_INSN3_GVEC_XMM(pcmpgtd, cmpgt, Vdq, Vdq, Wdq, MO_32) =20 DEF_GEN_INSN3_HELPER_EPP(cmpeqps, cmpeqps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpeqpd, cmpeqpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpeqss, cmpeqss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpeqsd, cmpeqsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpltps, cmpltps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpltpd, cmpltpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpltss, cmpltss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpltsd, cmpltsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpleps, cmpleps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmplepd, cmplepd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpless, cmpless, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmplesd, cmplesd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpunordps, cmpunordps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpunordpd, cmpunordpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpunordss, cmpunordss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpunordsd, cmpunordsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpneqps, cmpneqps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpneqpd, cmpneqpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpneqss, cmpneqss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpneqsd, cmpneqsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpnltps, cmpnltps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpnltpd, cmpnltpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpnltss, cmpnltss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpnltsd, cmpnltsd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpnleps, cmpnleps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpnlepd, cmpnlepd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpnless, cmpnless, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpnlesd, cmpnlesd, Vq, Vq, Wq) DEF_GEN_INSN3_HELPER_EPP(cmpordps, cmpordps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(cmpordpd, cmpordpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(cmpordss, cmpordss, Vd, Vd, Wd) +DEF_GEN_INSN3_HELPER_EPP(cmpordsd, cmpordsd, Vq, Vq, Wq) =20 GEN_INSN4(cmpps, Vdq, Vdq, Wdq, Ib) { @@ -5595,6 +5799,38 @@ GEN_INSN4(cmpps, Vdq, Vdq, Wdq, Ib) g_assert_not_reached(); } =20 +GEN_INSN4(cmppd, Vdq, Vdq, Wdq, Ib) +{ + switch (arg4 & 7) { + case 0: + gen_insn3(cmpeqpd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 1: + gen_insn3(cmpltpd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 2: + gen_insn3(cmplepd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 3: + gen_insn3(cmpunordpd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 4: + gen_insn3(cmpneqpd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 5: + gen_insn3(cmpnltpd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 6: + gen_insn3(cmpnlepd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + case 7: + gen_insn3(cmpordpd, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3); + return; + } + + g_assert_not_reached(); +} + GEN_INSN4(cmpss, Vd, Vd, Wd, Ib) { switch (arg4 & 7) { @@ -5627,26 +5863,78 @@ GEN_INSN4(cmpss, Vd, Vd, Wd, Ib) g_assert_not_reached(); } =20 +GEN_INSN4(cmpsd, Vq, Vq, Wq, Ib) +{ + switch (arg4 & 7) { + case 0: + gen_insn3(cmpeqsd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 1: + gen_insn3(cmpltsd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 2: + gen_insn3(cmplesd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 3: + gen_insn3(cmpunordsd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 4: + gen_insn3(cmpneqsd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 5: + gen_insn3(cmpnltsd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 6: + gen_insn3(cmpnlesd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + case 7: + gen_insn3(cmpordsd, Vq, Vq, Wq)(env, s, arg1, arg2, arg3); + return; + } + + g_assert_not_reached(); +} + DEF_GEN_INSN2_HELPER_EPP(comiss, comiss, Vd, Wd) +DEF_GEN_INSN2_HELPER_EPP(comisd, comisd, Vq, Wq) DEF_GEN_INSN2_HELPER_EPP(ucomiss, ucomiss, Vd, Wd) +DEF_GEN_INSN2_HELPER_EPP(ucomisd, ucomisd, Vq, Wq) =20 DEF_GEN_INSN3_GVEC_MM(pand, and, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(pand, and, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_XMM(andps, and, Vdq, Vdq, Wdq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(andpd, and, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(pandn, andn, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(pandn, andn, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_XMM(andnps, andn, Vdq, Vdq, Wdq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(andnpd, andn, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(por, or, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(por, or, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_XMM(orps, or, Vdq, Vdq, Wdq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(orpd, or, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_MM(pxor, xor, Pq, Pq, Qq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(pxor, xor, Vdq, Vdq, Wdq, MO_64) DEF_GEN_INSN3_GVEC_XMM(xorps, xor, Vdq, Vdq, Wdq, MO_64) +DEF_GEN_INSN3_GVEC_XMM(xorpd, xor, Vdq, Vdq, Wdq, MO_64) =20 DEF_GEN_INSN3_HELPER_EPP(psllw, psllw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psllw, psllw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(pslld, pslld_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(pslld, pslld_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psllq, psllq_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psllq, psllq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(pslldq, pslldq_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psrlw, psrlw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrlw, psrlw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psrld, psrld_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrld, psrld_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psrlq, psrlq_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrlq, psrlq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(psrldq, psrldq_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psraw, psraw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psraw, psraw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(psrad, psrad_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(psrad, psrad_xmm, Vdq, Vdq, Wdq) =20 #define DEF_GEN_PSHIFT_IMM_MM(mnem, opT1, opT2) \ GEN_INSN3(mnem, opT1, opT2, Ib) \ @@ -5660,31 +5948,70 @@ DEF_GEN_INSN3_HELPER_EPP(psrad, psrad_mmx, Pq, Pq, = Qq) gen_insn2(movq, Pq, Eq)(env, s, arg3_mm, arg3_r64); \ gen_insn3(mnem, Pq, Pq, Qq)(env, s, arg1, arg2, arg3_mm); \ } +#define DEF_GEN_PSHIFT_IMM_XMM(mnem, opT1, opT2) \ + GEN_INSN3(mnem, opT1, opT2, Ib) \ + { \ + const uint64_t arg3_ui64 =3D (uint8_t)arg3; \ + const insnop_arg_t(Eq) arg3_r64 =3D s->tmp1_i64; \ + const insnop_arg_t(Wdq) arg3_xmm =3D \ + offsetof(CPUX86State, xmm_t0.ZMM_Q(0)); \ + \ + tcg_gen_movi_i64(arg3_r64, arg3_ui64); \ + gen_insn2(movq, Vdq, Eq)(env, s, arg3_xmm, arg3_r64); \ + gen_insn3(mnem, Vdq, Vdq, Wdq)(env, s, arg1, arg2, arg3_xmm); \ + } =20 DEF_GEN_PSHIFT_IMM_MM(psllw, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psllw, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(pslld, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(pslld, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(psllq, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psllq, Udq, Udq) +DEF_GEN_PSHIFT_IMM_XMM(pslldq, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(psrlw, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psrlw, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(psrld, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psrld, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(psrlq, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psrlq, Udq, Udq) +DEF_GEN_PSHIFT_IMM_XMM(psrldq, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(psraw, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psraw, Udq, Udq) DEF_GEN_PSHIFT_IMM_MM(psrad, Nq, Nq) +DEF_GEN_PSHIFT_IMM_XMM(psrad, Udq, Udq) =20 DEF_GEN_INSN3_HELPER_EPP(packsswb, packsswb_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(packsswb, packsswb_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(packssdw, packssdw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(packssdw, packssdw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(packuswb, packuswb_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(packuswb, packuswb_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(punpcklbw, punpcklbw_mmx, Pq, Pq, Qd) +DEF_GEN_INSN3_HELPER_EPP(punpcklbw, punpcklbw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(punpcklwd, punpcklwd_mmx, Pq, Pq, Qd) +DEF_GEN_INSN3_HELPER_EPP(punpcklwd, punpcklwd_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(punpckldq, punpckldq_mmx, Pq, Pq, Qd) +DEF_GEN_INSN3_HELPER_EPP(punpckldq, punpckldq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(punpcklqdq, punpcklqdq_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(punpckhbw, punpckhbw_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(punpckhbw, punpckhbw_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(punpckhwd, punpckhwd_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(punpckhwd, punpckhwd_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(punpckhdq, punpckhdq_mmx, Pq, Pq, Qq) +DEF_GEN_INSN3_HELPER_EPP(punpckhdq, punpckhdq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(punpckhqdq, punpckhqdq_xmm, Vdq, Vdq, Wdq) =20 DEF_GEN_INSN3_HELPER_EPP(unpcklps, punpckldq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(unpcklpd, punpcklqdq_xmm, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(unpckhps, punpckhdq_xmm, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(unpckhpd, punpckhqdq_xmm, Vdq, Vdq, Wdq) =20 DEF_GEN_INSN3_HELPER_PPI(pshufw, pshufw_mmx, Pq, Qq, Ib) +DEF_GEN_INSN3_HELPER_PPI(pshuflw, pshuflw_xmm, Vdq, Wdq, Ib) +DEF_GEN_INSN3_HELPER_PPI(pshufhw, pshufhw_xmm, Vdq, Wdq, Ib) +DEF_GEN_INSN3_HELPER_PPI(pshufd, pshufd_xmm, Vdq, Wdq, Ib) DEF_GEN_INSN4_HELPER_PPI(shufps, shufps, Vdq, Vdq, Wdq, Ib) +DEF_GEN_INSN4_HELPER_PPI(shufpd, shufpd, Vdq, Vdq, Wdq, Ib) =20 GEN_INSN4(pinsrw, Pq, Pq, RdMw, Ib) { @@ -5694,6 +6021,14 @@ GEN_INSN4(pinsrw, Pq, Pq, RdMw, Ib) tcg_gen_st16_i32(arg3, cpu_env, arg1 + ofs); } =20 +GEN_INSN4(pinsrw, Vdq, Vdq, RdMw, Ib) +{ + assert(arg1 =3D=3D arg2); + + const size_t ofs =3D offsetof(ZMMReg, ZMM_W(arg4 & 7)); + tcg_gen_st16_i32(arg3, cpu_env, arg1 + ofs); +} + GEN_INSN3(pextrw, Gd, Nq, Ib) { const size_t ofs =3D offsetof(MMXReg, MMX_W(arg3 & 3)); @@ -5706,15 +6041,47 @@ GEN_INSN3(pextrw, Gq, Nq, Ib) tcg_gen_ld16u_i64(arg1, cpu_env, arg2 + ofs); } =20 +GEN_INSN3(pextrw, Gd, Udq, Ib) +{ + const size_t ofs =3D offsetof(ZMMReg, ZMM_W(arg3 & 7)); + tcg_gen_ld16u_i32(arg1, cpu_env, arg2 + ofs); +} + +GEN_INSN3(pextrw, Gq, Udq, Ib) +{ + const size_t ofs =3D offsetof(ZMMReg, ZMM_W(arg3 & 7)); + tcg_gen_ld16u_i64(arg1, cpu_env, arg2 + ofs); +} + DEF_GEN_INSN2_HELPER_EPP(cvtpi2ps, cvtpi2ps, Vdq, Qq) DEF_GEN_INSN2_HELPER_EPD(cvtsi2ss, cvtsi2ss, Vd, Ed) DEF_GEN_INSN2_HELPER_EPQ(cvtsi2ss, cvtsq2ss, Vd, Eq) +DEF_GEN_INSN2_HELPER_EPP(cvtpi2pd, cvtpi2pd, Vdq, Qq) +DEF_GEN_INSN2_HELPER_EPD(cvtsi2sd, cvtsi2sd, Vq, Ed) +DEF_GEN_INSN2_HELPER_EPQ(cvtsi2sd, cvtsq2sd, Vq, Eq) DEF_GEN_INSN2_HELPER_EPP(cvtps2pi, cvtps2pi, Pq, Wq) DEF_GEN_INSN2_HELPER_DEP(cvtss2si, cvtss2si, Gd, Wd) DEF_GEN_INSN2_HELPER_QEP(cvtss2si, cvtss2sq, Gq, Wd) +DEF_GEN_INSN2_HELPER_EPP(cvtpd2pi, cvtpd2pi, Pq, Wdq) +DEF_GEN_INSN2_HELPER_DEP(cvtsd2si, cvtsd2si, Gd, Wq) +DEF_GEN_INSN2_HELPER_QEP(cvtsd2si, cvtsd2sq, Gq, Wq) DEF_GEN_INSN2_HELPER_EPP(cvttps2pi, cvttps2pi, Pq, Wq) DEF_GEN_INSN2_HELPER_DEP(cvttss2si, cvttss2si, Gd, Wd) DEF_GEN_INSN2_HELPER_QEP(cvttss2si, cvttss2sq, Gq, Wd) +DEF_GEN_INSN2_HELPER_EPP(cvttpd2pi, cvttpd2pi, Pq, Wdq) +DEF_GEN_INSN2_HELPER_DEP(cvttsd2si, cvttsd2si, Gd, Wq) +DEF_GEN_INSN2_HELPER_QEP(cvttsd2si, cvttsd2sq, Gq, Wq) + +DEF_GEN_INSN2_HELPER_EPP(cvtpd2dq, cvtpd2dq, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(cvttpd2dq, cvttpd2dq, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(cvtdq2pd, cvtdq2pd, Vdq, Wq) +DEF_GEN_INSN2_HELPER_EPP(cvtps2pd, cvtps2pd, Vdq, Wq) +DEF_GEN_INSN2_HELPER_EPP(cvtpd2ps, cvtpd2ps, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(cvtss2sd, cvtss2sd, Vq, Wd) +DEF_GEN_INSN2_HELPER_EPP(cvtsd2ss, cvtsd2ss, Vd, Wq) +DEF_GEN_INSN2_HELPER_EPP(cvtdq2ps, cvtdq2ps, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(cvtps2dq, cvtps2dq, Vdq, Wdq) +DEF_GEN_INSN2_HELPER_EPP(cvttps2dq, cvttps2dq, Vdq, Wdq) =20 GEN_INSN2(maskmovq, Pq, Nq) { @@ -5733,26 +6100,99 @@ GEN_INSN2(maskmovq, Pq, Nq) tcg_temp_free_ptr(arg2_ptr); } =20 +GEN_INSN2(maskmovdqu, Vdq, Udq) +{ + const TCGv_ptr arg1_ptr =3D tcg_temp_new_ptr(); + const TCGv_ptr arg2_ptr =3D tcg_temp_new_ptr(); + + tcg_gen_mov_tl(s->A0, cpu_regs[R_EDI]); + gen_extu(s->aflag, s->A0); + gen_add_A0_ds_seg(s); + + tcg_gen_addi_ptr(arg1_ptr, cpu_env, arg1); + tcg_gen_addi_ptr(arg2_ptr, cpu_env, arg2); + gen_helper_maskmov_xmm(cpu_env, arg1_ptr, arg2_ptr, s->A0); + + tcg_temp_free_ptr(arg1_ptr); + tcg_temp_free_ptr(arg2_ptr); +} + GEN_INSN2(movntps, Mdq, Vdq) { assert(arg1 =3D=3D s->A0); gen_sto_env_A0(s, arg2); } =20 +GEN_INSN2(movntpd, Mdq, Vdq) +{ + assert(arg1 =3D=3D s->A0); + gen_sto_env_A0(s, arg2); +} + +GEN_INSN2(movnti, Md, Gd) +{ + tcg_gen_qemu_st_i32(arg2, arg1, s->mem_index, MO_LEUL); +} + +GEN_INSN2(movnti, Mq, Gq) +{ + tcg_gen_qemu_st_i64(arg2, arg1, s->mem_index, MO_LEQ); +} + GEN_INSN2(movntq, Mq, Pq) { assert(arg1 =3D=3D s->A0); gen_stq_env_A0(s, arg2); } =20 +GEN_INSN2(movntdq, Mdq, Vdq) +{ + assert(arg1 =3D=3D s->A0); + gen_sto_env_A0(s, arg2); +} + +GEN_INSN0(pause) +{ + /* handled in disas_insn at the moment */ + g_assert_not_reached(); +} + DEF_GEN_INSN0_HELPER(emms, emms) =20 -GEN_INSN0(sfence) +GEN_INSN2(sfence_clflush, modrm_mod, modrm) +{ + if (arg1 =3D=3D 3) { + /* sfence */ + if (s->prefix & PREFIX_LOCK) { + gen_illegal_opcode(s); + } else { + tcg_gen_mb(TCG_MO_ST_ST | TCG_BAR_SC); + } + } else { + /* clflush */ + if (ck_cpuid(env, s, CK_CPUID_CLFLUSH)) { + gen_illegal_opcode(s); + } else { + gen_nop_modrm(env, s, arg2); + } + } +} + +GEN_INSN0(lfence) +{ + if (s->prefix & PREFIX_LOCK) { + gen_illegal_opcode(s); + } else { + tcg_gen_mb(TCG_MO_LD_LD | TCG_BAR_SC); + } + } + +GEN_INSN0(mfence) { if (s->prefix & PREFIX_LOCK) { gen_illegal_opcode(s); } else { - tcg_gen_mb(TCG_MO_ST_ST | TCG_BAR_SC); + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); } } =20 --=20 2.20.1 From nobody Sun May 5 11:28:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837554; cv=none; d=zoho.com; s=zohoarc; b=HYT+Ft3sJnM2uCxkvBTuq9/Gv6hethsUBRKTmG5P+9Xb7ATODqZUdERuZR6IoCScuWiwz1JjDWeoRoqBKa0xCym1C4e1Yg+YNohKGyCqvzjBcqhNt/n9hGvpJBESzn+KROtSznwDzDpR/6LbTFSdlpALKjJXfh8GTh7y5KAA77k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837554; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=am6aHLZRZqCmn4TjEMCIEvy9PQaPrCKzH8p7kQXlzXM=; b=cTxpPqMJreH35ZjyYsfgInjXEMg0DxQWnVD/qBYU0Ea6Pu4+VLtqefoKYgtZ2Lc9+SMpaBDRjb7SEXuW+Q/BRmQqASJgbYrij3gTH/BYF03Ak0Pdr1bkqyglW+mZhh4zjCoEHNsXwwP6Sd0applep+QX8w+BTGHola+G3t3Vlp0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837554787431.3974635128401; Wed, 14 Aug 2019 19:52:34 -0700 (PDT) Received: from localhost ([::1]:37836 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5sP-0008Q6-9k for importer@patchew.org; Wed, 14 Aug 2019 22:52:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47162) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dq-0006dJ-My for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dm-0000Xf-Uk for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:38 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:40117) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dm-0000X9-OT for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:34 -0400 Received: by mail-yb1-xb41.google.com with SMTP id j6so401455ybm.7 for ; Wed, 14 Aug 2019 19:10:34 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=am6aHLZRZqCmn4TjEMCIEvy9PQaPrCKzH8p7kQXlzXM=; b=lxrH0Tq1EY/mP6GmmbNhAZVvC51TOx1Sjm1BkwgHPozBugYmaYXHNE346bUHufvmMv zDCZvkjhUcJRvAK+CoFlXUcDAVQfozBsXVTCwArg0WhX2vHepWWRMP1UitpRmOB/kyGX b6fiaQsi6xQGlWrAg13Rb98Bu0qpXf6RiLosmQoj+p+DyF1BBE5bPwvg/IvHPhrUTBie ZFg8BssQjw0uj/NLbDpSycIyF7CBaVGLR44Ddt0ouMLBsH+FNrTbm0BrM9XimxxT1ZXE gxZtDm1sgmv1C3YhL8ZBb9KteJGhaCjv+CCtFi3GalXAoaKgKGoB14W97IS+I4M53+KA 98Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=am6aHLZRZqCmn4TjEMCIEvy9PQaPrCKzH8p7kQXlzXM=; b=IIZMRa0D4eCfiwfrB/Muay6yisomr2TN3A18hcd2lXFFrtun8km/fhF90DX08GHDck 14fTgaBj8QFRZy5xr46GedZ0A+X5WmQKLeXgPLrPy8JjwWgwYzFZdqIclMIa8O5E/t5e 7TY/V0LofV/hHm6ic/0fuy9xS6cxFyhLzO9oBkgeSqFLm2KGcApUtC63uXMD3PjllssC BcBtDYS60umjoLknTgxdUGbxk965M/s3Tt7nPlMnTYYduludhQnK8V0JMNUqg3Oq7IN6 0n0NZGU6D9QRoxJK/azStl04i6f9hXUrzWyqu1iYH4N+1xTaSkJqv8BTlmPX62VBjyr0 dYsA== X-Gm-Message-State: APjAAAVsmxsNCP+7J6d2e6A3iQsEGn0GZ+uxbJX1ZxpuGagqbb9+J2Sp 5ydGqZ6tRnecbjiPS6uzHnZN1WMw X-Google-Smtp-Source: APXvYqyux9uQJRqDaq3LVIuSkUe00qzC3CyPvE8c5bQMv5rxjJujW54Wra1nOsHFsnDqsZjdqwA5/A== X-Received: by 2002:a25:bb01:: with SMTP id z1mr2011898ybg.445.1565835033459; Wed, 14 Aug 2019 19:10:33 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:25 -0400 Message-Id: <20190815020928.9679-44-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b41 Subject: [Qemu-devel] [RFC PATCH v3 43/46] target/i386: introduce SSE2 instructions to sse-opcode.inc.h X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add all the SSE2 instruction entries to sse-opcode.inc.h. Signed-off-by: Jan Bobek --- target/i386/sse-opcode.inc.h | 323 ++++++++++++++++++++++++++++++++++- 1 file changed, 322 insertions(+), 1 deletion(-) diff --git a/target/i386/sse-opcode.inc.h b/target/i386/sse-opcode.inc.h index 39947aeb51..efa67b7ce2 100644 --- a/target/i386/sse-opcode.inc.h +++ b/target/i386/sse-opcode.inc.h @@ -43,241 +43,535 @@ OPCODE(movd, LEG(NP, 0F, 0, 0x6e), MMX, WR, Pq, Ed) /* NP 0F 7E /r: MOVD r/m32,mm */ OPCODE(movd, LEG(NP, 0F, 0, 0x7e), MMX, WR, Ed, Pq) +/* 66 0F 6E /r: MOVD xmm,r/m32 */ +OPCODE(movd, LEG(66, 0F, 0, 0x6e), SSE2, WR, Vdq, Ed) +/* 66 0F 7E /r: MOVD r/m32,xmm */ +OPCODE(movd, LEG(66, 0F, 0, 0x7e), SSE2, WR, Ed, Vdq) /* NP REX.W + 0F 6E /r: MOVQ mm,r/m64 */ OPCODE(movq, LEG(NP, 0F, 1, 0x6e), MMX, WR, Pq, Eq) /* NP REX.W + 0F 7E /r: MOVQ r/m64,mm */ OPCODE(movq, LEG(NP, 0F, 1, 0x7e), MMX, WR, Eq, Pq) +/* 66 REX.W 0F 6E /r: MOVQ xmm,r/m64 */ +OPCODE(movq, LEG(66, 0F, 1, 0x6e), SSE2, WR, Vdq, Eq) +/* 66 REX.W 0F 7E /r: MOVQ r/m64,xmm */ +OPCODE(movq, LEG(66, 0F, 1, 0x7e), SSE2, WR, Eq, Vdq) /* NP 0F 6F /r: MOVQ mm, mm/m64 */ OPCODE(movq, LEG(NP, 0F, 0, 0x6f), MMX, WR, Pq, Qq) /* NP 0F 7F /r: MOVQ mm/m64, mm */ OPCODE(movq, LEG(NP, 0F, 0, 0x7f), MMX, WR, Qq, Pq) +/* F3 0F 7E /r: MOVQ xmm1, xmm2/m64 */ +OPCODE(movq, LEG(F3, 0F, 0, 0x7e), SSE2, WR, Vdq, Wq) +/* 66 0F D6 /r: MOVQ xmm2/m64, xmm1 */ +OPCODE(movq, LEG(66, 0F, 0, 0xd6), SSE2, WR, UdqMq, Vq) /* NP 0F 28 /r: MOVAPS xmm1, xmm2/m128 */ OPCODE(movaps, LEG(NP, 0F, 0, 0x28), SSE, WR, Vdq, Wdq) /* NP 0F 29 /r: MOVAPS xmm2/m128, xmm1 */ OPCODE(movaps, LEG(NP, 0F, 0, 0x29), SSE, WR, Wdq, Vdq) +/* 66 0F 28 /r: MOVAPD xmm1, xmm2/m128 */ +OPCODE(movapd, LEG(66, 0F, 0, 0x28), SSE2, WR, Vdq, Wdq) +/* 66 0F 29 /r: MOVAPD xmm2/m128, xmm1 */ +OPCODE(movapd, LEG(66, 0F, 0, 0x29), SSE2, WR, Wdq, Vdq) +/* 66 0F 6F /r: MOVDQA xmm1, xmm2/m128 */ +OPCODE(movdqa, LEG(66, 0F, 0, 0x6f), SSE2, WR, Vdq, Wdq) +/* 66 0F 7F /r: MOVDQA xmm2/m128, xmm1 */ +OPCODE(movdqa, LEG(66, 0F, 0, 0x7f), SSE2, WR, Wdq, Vdq) /* NP 0F 10 /r: MOVUPS xmm1, xmm2/m128 */ OPCODE(movups, LEG(NP, 0F, 0, 0x10), SSE, WR, Vdq, Wdq) /* NP 0F 11 /r: MOVUPS xmm2/m128, xmm1 */ OPCODE(movups, LEG(NP, 0F, 0, 0x11), SSE, WR, Wdq, Vdq) +/* 66 0F 10 /r: MOVUPD xmm1, xmm2/m128 */ +OPCODE(movupd, LEG(66, 0F, 0, 0x10), SSE2, WR, Vdq, Wdq) +/* 66 0F 11 /r: MOVUPD xmm2/m128, xmm1 */ +OPCODE(movupd, LEG(66, 0F, 0, 0x11), SSE2, WR, Wdq, Vdq) +/* F3 0F 6F /r: MOVDQU xmm1,xmm2/m128 */ +OPCODE(movdqu, LEG(F3, 0F, 0, 0x6f), SSE2, WR, Vdq, Wdq) +/* F3 0F 7F /r: MOVDQU xmm2/m128,xmm1 */ +OPCODE(movdqu, LEG(F3, 0F, 0, 0x7f), SSE2, WR, Wdq, Vdq) /* F3 0F 10 /r: MOVSS xmm1, xmm2/m32 */ OPCODE(movss, LEG(F3, 0F, 0, 0x10), SSE, WRRR, Vdq, Vdq, Wd, modrm_mod) /* F3 0F 11 /r: MOVSS xmm2/m32, xmm1 */ OPCODE(movss, LEG(F3, 0F, 0, 0x11), SSE, WR, Wd, Vd) +/* F2 0F 10 /r: MOVSD xmm1, xmm2/m64 */ +OPCODE(movsd, LEG(F2, 0F, 0, 0x10), SSE2, WRRR, Vdq, Vdq, Wq, modrm_mod) +/* F2 0F 11 /r: MOVSD xmm1/m64, xmm2 */ +OPCODE(movsd, LEG(F2, 0F, 0, 0x11), SSE2, WR, Wq, Vq) +/* F3 0F D6 /r: MOVQ2DQ xmm, mm */ +OPCODE(movq2dq, LEG(F3, 0F, 0, 0xd6), SSE2, WR, Vdq, Nq) +/* F2 0F D6 /r: MOVDQ2Q mm, xmm */ +OPCODE(movdq2q, LEG(F2, 0F, 0, 0xd6), SSE2, WR, Pq, Uq) /* NP 0F 12 /r: MOVHLPS xmm1, xmm2 */ /* NP 0F 12 /r: MOVLPS xmm1, m64 */ OPCODE(movhlps, LEG(NP, 0F, 0, 0x12), SSE, WR, Vq, UdqMhq) /* 0F 13 /r: MOVLPS m64, xmm1 */ OPCODE(movlps, LEG(NP, 0F, 0, 0x13), SSE, WR, Mq, Vq) +/* 66 0F 12 /r: MOVLPD xmm1,m64 */ +OPCODE(movlpd, LEG(66, 0F, 0, 0x12), SSE2, WR, Vq, Mq) +/* 66 0F 13 /r: MOVLPD m64,xmm1 */ +OPCODE(movlpd, LEG(66, 0F, 0, 0x13), SSE2, WR, Mq, Vq) /* NP 0F 16 /r: MOVLHPS xmm1, xmm2 */ /* NP 0F 16 /r: MOVHPS xmm1, m64 */ OPCODE(movlhps, LEG(NP, 0F, 0, 0x16), SSE, WRR, Vdq, Vq, Wq) /* NP 0F 17 /r: MOVHPS m64, xmm1 */ OPCODE(movhps, LEG(NP, 0F, 0, 0x17), SSE, WR, Mq, Vdq) +/* 66 0F 16 /r: MOVHPD xmm1, m64 */ +OPCODE(movhpd, LEG(66, 0F, 0, 0x16), SSE2, WRR, Vdq, Vd, Mq) +/* 66 0F 17 /r: MOVHPD m64, xmm1 */ +OPCODE(movhpd, LEG(66, 0F, 0, 0x17), SSE2, WR, Mq, Vdq) /* NP 0F D7 /r: PMOVMSKB r32, mm */ OPCODE(pmovmskb, LEG(NP, 0F, 0, 0xd7), SSE, WR, Gd, Nq) /* NP REX.W 0F D7 /r: PMOVMSKB r64, mm */ OPCODE(pmovmskb, LEG(NP, 0F, 1, 0xd7), SSE, WR, Gq, Nq) +/* 66 0F D7 /r: PMOVMSKB r32, xmm */ +OPCODE(pmovmskb, LEG(66, 0F, 0, 0xd7), SSE2, WR, Gd, Udq) +/* 66 REX.W 0F D7 /r: PMOVMSKB r64, xmm */ +OPCODE(pmovmskb, LEG(66, 0F, 1, 0xd7), SSE2, WR, Gq, Udq) /* NP 0F 50 /r: MOVMSKPS r32, xmm */ OPCODE(movmskps, LEG(NP, 0F, 0, 0x50), SSE, WR, Gd, Udq) /* NP REX.W 0F 50 /r: MOVMSKPS r64, xmm */ OPCODE(movmskps, LEG(NP, 0F, 1, 0x50), SSE, WR, Gq, Udq) +/* 66 0F 50 /r: MOVMSKPD r32, xmm */ +OPCODE(movmskpd, LEG(66, 0F, 0, 0x50), SSE2, WR, Gd, Udq) +/* 66 REX.W 0F 50 /r: MOVMSKPD r64, xmm */ +OPCODE(movmskpd, LEG(66, 0F, 1, 0x50), SSE2, WR, Gq, Udq) /* NP 0F FC /r: PADDB mm, mm/m64 */ OPCODE(paddb, LEG(NP, 0F, 0, 0xfc), MMX, WRR, Pq, Pq, Qq) +/* 66 0F FC /r: PADDB xmm1, xmm2/m128 */ +OPCODE(paddb, LEG(66, 0F, 0, 0xfc), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F FD /r: PADDW mm, mm/m64 */ OPCODE(paddw, LEG(NP, 0F, 0, 0xfd), MMX, WRR, Pq, Pq, Qq) +/* 66 0F FD /r: PADDW xmm1, xmm2/m128 */ +OPCODE(paddw, LEG(66, 0F, 0, 0xfd), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F FE /r: PADDD mm, mm/m64 */ OPCODE(paddd, LEG(NP, 0F, 0, 0xfe), MMX, WRR, Pq, Pq, Qq) +/* 66 0F FE /r: PADDD xmm1, xmm2/m128 */ +OPCODE(paddd, LEG(66, 0F, 0, 0xfe), SSE2, WRR, Vdq, Vdq, Wdq) +/* NP 0F D4 /r: PADDQ mm, mm/m64 */ +OPCODE(paddq, LEG(NP, 0F, 0, 0xd4), SSE2, WRR, Pq, Pq, Qq) +/* 66 0F D4 /r: PADDQ xmm1, xmm2/m128 */ +OPCODE(paddq, LEG(66, 0F, 0, 0xd4), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F EC /r: PADDSB mm, mm/m64 */ OPCODE(paddsb, LEG(NP, 0F, 0, 0xec), MMX, WRR, Pq, Pq, Qq) +/* 66 0F EC /r: PADDSB xmm1, xmm2/m128 */ +OPCODE(paddsb, LEG(66, 0F, 0, 0xec), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F ED /r: PADDSW mm, mm/m64 */ OPCODE(paddsw, LEG(NP, 0F, 0, 0xed), MMX, WRR, Pq, Pq, Qq) +/* 66 0F ED /r: PADDSW xmm1, xmm2/m128 */ +OPCODE(paddsw, LEG(66, 0F, 0, 0xed), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F DC /r: PADDUSB mm,mm/m64 */ OPCODE(paddusb, LEG(NP, 0F, 0, 0xdc), MMX, WRR, Pq, Pq, Qq) +/* 66 0F DC /r: PADDUSB xmm1,xmm2/m128 */ +OPCODE(paddusb, LEG(66, 0F, 0, 0xdc), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F DD /r: PADDUSW mm,mm/m64 */ OPCODE(paddusw, LEG(NP, 0F, 0, 0xdd), MMX, WRR, Pq, Pq, Qq) +/* 66 0F DD /r: PADDUSW xmm1,xmm2/m128 */ +OPCODE(paddusw, LEG(66, 0F, 0, 0xdd), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 58 /r: ADDPS xmm1, xmm2/m128 */ OPCODE(addps, LEG(NP, 0F, 0, 0x58), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 58 /r: ADDPD xmm1, xmm2/m128 */ +OPCODE(addpd, LEG(66, 0F, 0, 0x58), SSE2, WRR, Vdq, Vdq, Wdq) /* F3 0F 58 /r: ADDSS xmm1, xmm2/m32 */ OPCODE(addss, LEG(F3, 0F, 0, 0x58), SSE, WRR, Vd, Vd, Wd) +/* F2 0F 58 /r: ADDSD xmm1, xmm2/m64 */ +OPCODE(addsd, LEG(F2, 0F, 0, 0x58), SSE2, WRR, Vq, Vq, Wq) /* NP 0F F8 /r: PSUBB mm, mm/m64 */ OPCODE(psubb, LEG(NP, 0F, 0, 0xf8), MMX, WRR, Pq, Pq, Qq) +/* 66 0F F8 /r: PSUBB xmm1, xmm2/m128 */ +OPCODE(psubb, LEG(66, 0F, 0, 0xf8), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F F9 /r: PSUBW mm, mm/m64 */ OPCODE(psubw, LEG(NP, 0F, 0, 0xf9), MMX, WRR, Pq, Pq, Qq) +/* 66 0F F9 /r: PSUBW xmm1, xmm2/m128 */ +OPCODE(psubw, LEG(66, 0F, 0, 0xf9), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F FA /r: PSUBD mm, mm/m64 */ OPCODE(psubd, LEG(NP, 0F, 0, 0xfa), MMX, WRR, Pq, Pq, Qq) +/* 66 0F FA /r: PSUBD xmm1, xmm2/m128 */ +OPCODE(psubd, LEG(66, 0F, 0, 0xfa), SSE2, WRR, Vdq, Vdq, Wdq) +/* NP 0F FB /r: PSUBQ mm1, mm2/m64 */ +OPCODE(psubq, LEG(NP, 0F, 0, 0xfb), SSE2, WRR, Pq, Pq, Qq) +/* 66 0F FB /r: PSUBQ xmm1, xmm2/m128 */ +OPCODE(psubq, LEG(66, 0F, 0, 0xfb), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E8 /r: PSUBSB mm, mm/m64 */ OPCODE(psubsb, LEG(NP, 0F, 0, 0xe8), MMX, WRR, Pq, Pq, Qq) +/* 66 0F E8 /r: PSUBSB xmm1, xmm2/m128 */ +OPCODE(psubsb, LEG(66, 0F, 0, 0xe8), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E9 /r: PSUBSW mm, mm/m64 */ OPCODE(psubsw, LEG(NP, 0F, 0, 0xe9), MMX, WRR, Pq, Pq, Qq) +/* 66 0F E9 /r: PSUBSW xmm1, xmm2/m128 */ +OPCODE(psubsw, LEG(66, 0F, 0, 0xe9), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F D8 /r: PSUBUSB mm, mm/m64 */ OPCODE(psubusb, LEG(NP, 0F, 0, 0xd8), MMX, WRR, Pq, Pq, Qq) +/* 66 0F D8 /r: PSUBUSB xmm1, xmm2/m128 */ +OPCODE(psubusb, LEG(66, 0F, 0, 0xd8), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F D9 /r: PSUBUSW mm, mm/m64 */ OPCODE(psubusw, LEG(NP, 0F, 0, 0xd9), MMX, WRR, Pq, Pq, Qq) +/* 66 0F D9 /r: PSUBUSW xmm1, xmm2/m128 */ +OPCODE(psubusw, LEG(66, 0F, 0, 0xd9), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 5C /r: SUBPS xmm1, xmm2/m128 */ OPCODE(subps, LEG(NP, 0F, 0, 0x5c), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 5C /r: SUBPD xmm1, xmm2/m128 */ +OPCODE(subpd, LEG(66, 0F, 0, 0x5c), SSE2, WRR, Vdq, Vdq, Wdq) /* F3 0F 5C /r: SUBSS xmm1, xmm2/m32 */ OPCODE(subss, LEG(F3, 0F, 0, 0x5c), SSE, WRR, Vd, Vd, Wd) +/* F2 0F 5C /r: SUBSD xmm1, xmm2/m64 */ +OPCODE(subsd, LEG(F2, 0F, 0, 0x5c), SSE2, WRR, Vq, Vq, Wq) /* NP 0F D5 /r: PMULLW mm, mm/m64 */ OPCODE(pmullw, LEG(NP, 0F, 0, 0xd5), MMX, WRR, Pq, Pq, Qq) +/* 66 0F D5 /r: PMULLW xmm1, xmm2/m128 */ +OPCODE(pmullw, LEG(66, 0F, 0, 0xd5), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E5 /r: PMULHW mm, mm/m64 */ OPCODE(pmulhw, LEG(NP, 0F, 0, 0xe5), MMX, WRR, Pq, Pq, Qq) +/* 66 0F E5 /r: PMULHW xmm1, xmm2/m128 */ +OPCODE(pmulhw, LEG(66, 0F, 0, 0xe5), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E4 /r: PMULHUW mm1, mm2/m64 */ OPCODE(pmulhuw, LEG(NP, 0F, 0, 0xe4), SSE, WRR, Pq, Pq, Qq) +/* 66 0F E4 /r: PMULHUW xmm1, xmm2/m128 */ +OPCODE(pmulhuw, LEG(66, 0F, 0, 0xe4), SSE2, WRR, Vdq, Vdq, Wdq) +/* NP 0F F4 /r: PMULUDQ mm1, mm2/m64 */ +OPCODE(pmuludq, LEG(NP, 0F, 0, 0xf4), SSE2, WRR, Pq, Pq, Qq) +/* 66 0F F4 /r: PMULUDQ xmm1, xmm2/m128 */ +OPCODE(pmuludq, LEG(66, 0F, 0, 0xf4), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 59 /r: MULPS xmm1, xmm2/m128 */ OPCODE(mulps, LEG(NP, 0F, 0, 0x59), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 59 /r: MULPD xmm1, xmm2/m128 */ +OPCODE(mulpd, LEG(66, 0F, 0, 0x59), SSE2, WRR, Vdq, Vdq, Wdq) /* F3 0F 59 /r: MULSS xmm1,xmm2/m32 */ OPCODE(mulss, LEG(F3, 0F, 0, 0x59), SSE, WRR, Vd, Vd, Wd) +/* F2 0F 59 /r: MULSD xmm1,xmm2/m64 */ +OPCODE(mulsd, LEG(F2, 0F, 0, 0x59), SSE2, WRR, Vq, Vq, Wq) /* NP 0F F5 /r: PMADDWD mm, mm/m64 */ OPCODE(pmaddwd, LEG(NP, 0F, 0, 0xf5), MMX, WRR, Pq, Pq, Qq) +/* 66 0F F5 /r: PMADDWD xmm1, xmm2/m128 */ +OPCODE(pmaddwd, LEG(66, 0F, 0, 0xf5), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 5E /r: DIVPS xmm1, xmm2/m128 */ OPCODE(divps, LEG(NP, 0F, 0, 0x5e), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 5E /r: DIVPD xmm1, xmm2/m128 */ +OPCODE(divpd, LEG(66, 0F, 0, 0x5e), SSE2, WRR, Vdq, Vdq, Wdq) /* F3 0F 5E /r: DIVSS xmm1, xmm2/m32 */ OPCODE(divss, LEG(F3, 0F, 0, 0x5e), SSE, WRR, Vd, Vd, Wd) +/* F2 0F 5E /r: DIVSD xmm1, xmm2/m64 */ +OPCODE(divsd, LEG(F2, 0F, 0, 0x5e), SSE2, WRR, Vq, Vq, Wq) /* NP 0F 53 /r: RCPPS xmm1, xmm2/m128 */ OPCODE(rcpps, LEG(NP, 0F, 0, 0x53), SSE, WR, Vdq, Wdq) /* F3 0F 53 /r: RCPSS xmm1, xmm2/m32 */ OPCODE(rcpss, LEG(F3, 0F, 0, 0x53), SSE, WR, Vd, Wd) /* NP 0F 51 /r: SQRTPS xmm1, xmm2/m128 */ OPCODE(sqrtps, LEG(NP, 0F, 0, 0x51), SSE, WR, Vdq, Wdq) +/* 66 0F 51 /r: SQRTPD xmm1, xmm2/m128 */ +OPCODE(sqrtpd, LEG(66, 0F, 0, 0x51), SSE2, WR, Vdq, Wdq) /* F3 0F 51 /r: SQRTSS xmm1, xmm2/m32 */ OPCODE(sqrtss, LEG(F3, 0F, 0, 0x51), SSE, WR, Vd, Wd) +/* F2 0F 51 /r: SQRTSD xmm1,xmm2/m64 */ +OPCODE(sqrtsd, LEG(F2, 0F, 0, 0x51), SSE2, WR, Vq, Wq) /* NP 0F 52 /r: RSQRTPS xmm1, xmm2/m128 */ OPCODE(rsqrtps, LEG(NP, 0F, 0, 0x52), SSE, WR, Vdq, Wdq) /* F3 0F 52 /r: RSQRTSS xmm1, xmm2/m32 */ OPCODE(rsqrtss, LEG(F3, 0F, 0, 0x52), SSE, WR, Vd, Wd) /* NP 0F DA /r: PMINUB mm1, mm2/m64 */ OPCODE(pminub, LEG(NP, 0F, 0, 0xda), SSE, WRR, Pq, Pq, Qq) +/* 66 0F DA /r: PMINUB xmm1, xmm2/m128 */ +OPCODE(pminub, LEG(66, 0F, 0, 0xda), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F EA /r: PMINSW mm1, mm2/m64 */ OPCODE(pminsw, LEG(NP, 0F, 0, 0xea), SSE, WRR, Pq, Pq, Qq) +/* 66 0F EA /r: PMINSW xmm1, xmm2/m128 */ +OPCODE(pminsw, LEG(66, 0F, 0, 0xea), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 5D /r: MINPS xmm1, xmm2/m128 */ OPCODE(minps, LEG(NP, 0F, 0, 0x5d), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 5D /r: MINPD xmm1, xmm2/m128 */ +OPCODE(minpd, LEG(66, 0F, 0, 0x5d), SSE2, WRR, Vdq, Vdq, Wdq) /* F3 0F 5D /r: MINSS xmm1,xmm2/m32 */ OPCODE(minss, LEG(F3, 0F, 0, 0x5d), SSE, WRR, Vd, Vd, Wd) +/* F2 0F 5D /r: MINSD xmm1, xmm2/m64 */ +OPCODE(minsd, LEG(F2, 0F, 0, 0x5d), SSE2, WRR, Vq, Vq, Wq) /* NP 0F DE /r: PMAXUB mm1, mm2/m64 */ OPCODE(pmaxub, LEG(NP, 0F, 0, 0xde), SSE, WRR, Pq, Pq, Qq) +/* 66 0F DE /r: PMAXUB xmm1, xmm2/m128 */ +OPCODE(pmaxub, LEG(66, 0F, 0, 0xde), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F EE /r: PMAXSW mm1, mm2/m64 */ OPCODE(pmaxsw, LEG(NP, 0F, 0, 0xee), SSE, WRR, Pq, Pq, Qq) +/* 66 0F EE /r: PMAXSW xmm1, xmm2/m128 */ +OPCODE(pmaxsw, LEG(66, 0F, 0, 0xee), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 5F /r: MAXPS xmm1, xmm2/m128 */ OPCODE(maxps, LEG(NP, 0F, 0, 0x5f), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 5F /r: MAXPD xmm1, xmm2/m128 */ +OPCODE(maxpd, LEG(66, 0F, 0, 0x5f), SSE2, WRR, Vdq, Vdq, Wdq) /* F3 0F 5F /r: MAXSS xmm1, xmm2/m32 */ OPCODE(maxss, LEG(F3, 0F, 0, 0x5f), SSE, WRR, Vd, Vd, Wd) +/* F2 0F 5F /r: MAXSD xmm1, xmm2/m64 */ +OPCODE(maxsd, LEG(F2, 0F, 0, 0x5f), SSE2, WRR, Vq, Vq, Wq) /* NP 0F E0 /r: PAVGB mm1, mm2/m64 */ OPCODE(pavgb, LEG(NP, 0F, 0, 0xe0), SSE, WRR, Pq, Pq, Qq) +/* 66 0F E0 /r: PAVGB xmm1, xmm2/m128 */ +OPCODE(pavgb, LEG(66, 0F, 0, 0xe0), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E3 /r: PAVGW mm1, mm2/m64 */ OPCODE(pavgw, LEG(NP, 0F, 0, 0xe3), SSE, WRR, Pq, Pq, Qq) +/* 66 0F E3 /r: PAVGW xmm1, xmm2/m128 */ +OPCODE(pavgw, LEG(66, 0F, 0, 0xe3), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F F6 /r: PSADBW mm1, mm2/m64 */ OPCODE(psadbw, LEG(NP, 0F, 0, 0xf6), SSE, WRR, Pq, Pq, Qq) +/* 66 0F F6 /r: PSADBW xmm1, xmm2/m128 */ +OPCODE(psadbw, LEG(66, 0F, 0, 0xf6), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 74 /r: PCMPEQB mm,mm/m64 */ OPCODE(pcmpeqb, LEG(NP, 0F, 0, 0x74), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 74 /r: PCMPEQB xmm1,xmm2/m128 */ +OPCODE(pcmpeqb, LEG(66, 0F, 0, 0x74), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 75 /r: PCMPEQW mm,mm/m64 */ OPCODE(pcmpeqw, LEG(NP, 0F, 0, 0x75), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 75 /r: PCMPEQW xmm1,xmm2/m128 */ +OPCODE(pcmpeqw, LEG(66, 0F, 0, 0x75), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 76 /r: PCMPEQD mm,mm/m64 */ OPCODE(pcmpeqd, LEG(NP, 0F, 0, 0x76), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 76 /r: PCMPEQD xmm1,xmm2/m128 */ +OPCODE(pcmpeqd, LEG(66, 0F, 0, 0x76), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 64 /r: PCMPGTB mm,mm/m64 */ OPCODE(pcmpgtb, LEG(NP, 0F, 0, 0x64), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 64 /r: PCMPGTB xmm1,xmm2/m128 */ +OPCODE(pcmpgtb, LEG(66, 0F, 0, 0x64), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 65 /r: PCMPGTW mm,mm/m64 */ OPCODE(pcmpgtw, LEG(NP, 0F, 0, 0x65), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 65 /r: PCMPGTW xmm1,xmm2/m128 */ +OPCODE(pcmpgtw, LEG(66, 0F, 0, 0x65), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 66 /r: PCMPGTD mm,mm/m64 */ OPCODE(pcmpgtd, LEG(NP, 0F, 0, 0x66), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 66 /r: PCMPGTD xmm1,xmm2/m128 */ +OPCODE(pcmpgtd, LEG(66, 0F, 0, 0x66), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F C2 /r ib: CMPPS xmm1, xmm2/m128, imm8 */ OPCODE(cmpps, LEG(NP, 0F, 0, 0xc2), SSE, WRRR, Vdq, Vdq, Wdq, Ib) +/* 66 0F C2 /r ib: CMPPD xmm1, xmm2/m128, imm8 */ +OPCODE(cmppd, LEG(66, 0F, 0, 0xc2), SSE2, WRRR, Vdq, Vdq, Wdq, Ib) /* F3 0F C2 /r ib: CMPSS xmm1, xmm2/m32, imm8 */ OPCODE(cmpss, LEG(F3, 0F, 0, 0xc2), SSE, WRRR, Vd, Vd, Wd, Ib) +/* F2 0F C2 /r ib: CMPSD xmm1, xmm2/m64, imm8 */ +OPCODE(cmpsd, LEG(F2, 0F, 0, 0xc2), SSE2, WRRR, Vq, Vq, Wq, Ib) /* NP 0F 2E /r: UCOMISS xmm1, xmm2/m32 */ OPCODE(ucomiss, LEG(NP, 0F, 0, 0x2e), SSE, RR, Vd, Wd) +/* 66 0F 2E /r: UCOMISD xmm1, xmm2/m64 */ +OPCODE(ucomisd, LEG(66, 0F, 0, 0x2e), SSE2, RR, Vq, Wq) /* NP 0F 2F /r: COMISS xmm1, xmm2/m32 */ OPCODE(comiss, LEG(NP, 0F, 0, 0x2f), SSE, RR, Vd, Wd) +/* 66 0F 2F /r: COMISD xmm1, xmm2/m64 */ +OPCODE(comisd, LEG(66, 0F, 0, 0x2f), SSE2, RR, Vq, Wq) /* NP 0F DB /r: PAND mm, mm/m64 */ OPCODE(pand, LEG(NP, 0F, 0, 0xdb), MMX, WRR, Pq, Pq, Qq) +/* 66 0F DB /r: PAND xmm1, xmm2/m128 */ +OPCODE(pand, LEG(66, 0F, 0, 0xdb), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 54 /r: ANDPS xmm1, xmm2/m128 */ OPCODE(andps, LEG(NP, 0F, 0, 0x54), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 54 /r: ANDPD xmm1, xmm2/m128 */ +OPCODE(andpd, LEG(66, 0F, 0, 0x54), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F DF /r: PANDN mm, mm/m64 */ OPCODE(pandn, LEG(NP, 0F, 0, 0xdf), MMX, WRR, Pq, Pq, Qq) +/* 66 0F DF /r: PANDN xmm1, xmm2/m128 */ +OPCODE(pandn, LEG(66, 0F, 0, 0xdf), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 55 /r: ANDNPS xmm1, xmm2/m128 */ OPCODE(andnps, LEG(NP, 0F, 0, 0x55), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 55 /r: ANDNPD xmm1, xmm2/m128 */ +OPCODE(andnpd, LEG(66, 0F, 0, 0x55), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F EB /r: POR mm, mm/m64 */ OPCODE(por, LEG(NP, 0F, 0, 0xeb), MMX, WRR, Pq, Pq, Qq) +/* 66 0F EB /r: POR xmm1, xmm2/m128 */ +OPCODE(por, LEG(66, 0F, 0, 0xeb), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 56 /r: ORPS xmm1, xmm2/m128 */ OPCODE(orps, LEG(NP, 0F, 0, 0x56), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 56 /r: ORPD xmm1, xmm2/m128 */ +OPCODE(orpd, LEG(66, 0F, 0, 0x56), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F EF /r: PXOR mm, mm/m64 */ OPCODE(pxor, LEG(NP, 0F, 0, 0xef), MMX, WRR, Pq, Pq, Qq) +/* 66 0F EF /r: PXOR xmm1, xmm2/m128 */ +OPCODE(pxor, LEG(66, 0F, 0, 0xef), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 57 /r: XORPS xmm1, xmm2/m128 */ OPCODE(xorps, LEG(NP, 0F, 0, 0x57), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 57 /r: XORPD xmm1, xmm2/m128 */ +OPCODE(xorpd, LEG(66, 0F, 0, 0x57), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F F1 /r: PSLLW mm, mm/m64 */ OPCODE(psllw, LEG(NP, 0F, 0, 0xf1), MMX, WRR, Pq, Pq, Qq) +/* 66 0F F1 /r: PSLLW xmm1, xmm2/m128 */ +OPCODE(psllw, LEG(66, 0F, 0, 0xf1), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F F2 /r: PSLLD mm, mm/m64 */ OPCODE(pslld, LEG(NP, 0F, 0, 0xf2), MMX, WRR, Pq, Pq, Qq) +/* 66 0F F2 /r: PSLLD xmm1, xmm2/m128 */ +OPCODE(pslld, LEG(66, 0F, 0, 0xf2), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F F3 /r: PSLLQ mm, mm/m64 */ OPCODE(psllq, LEG(NP, 0F, 0, 0xf3), MMX, WRR, Pq, Pq, Qq) +/* 66 0F F3 /r: PSLLQ xmm1, xmm2/m128 */ +OPCODE(psllq, LEG(66, 0F, 0, 0xf3), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F D1 /r: PSRLW mm, mm/m64 */ OPCODE(psrlw, LEG(NP, 0F, 0, 0xd1), MMX, WRR, Pq, Pq, Qq) +/* 66 0F D1 /r: PSRLW xmm1, xmm2/m128 */ +OPCODE(psrlw, LEG(66, 0F, 0, 0xd1), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F D2 /r: PSRLD mm, mm/m64 */ OPCODE(psrld, LEG(NP, 0F, 0, 0xd2), MMX, WRR, Pq, Pq, Qq) +/* 66 0F D2 /r: PSRLD xmm1, xmm2/m128 */ +OPCODE(psrld, LEG(66, 0F, 0, 0xd2), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F D3 /r: PSRLQ mm, mm/m64 */ OPCODE(psrlq, LEG(NP, 0F, 0, 0xd3), MMX, WRR, Pq, Pq, Qq) +/* 66 0F D3 /r: PSRLQ xmm1, xmm2/m128 */ +OPCODE(psrlq, LEG(66, 0F, 0, 0xd3), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E1 /r: PSRAW mm,mm/m64 */ OPCODE(psraw, LEG(NP, 0F, 0, 0xe1), MMX, WRR, Pq, Pq, Qq) +/* 66 0F E1 /r: PSRAW xmm1,xmm2/m128 */ +OPCODE(psraw, LEG(66, 0F, 0, 0xe1), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F E2 /r: PSRAD mm,mm/m64 */ OPCODE(psrad, LEG(NP, 0F, 0, 0xe2), MMX, WRR, Pq, Pq, Qq) +/* 66 0F E2 /r: PSRAD xmm1,xmm2/m128 */ +OPCODE(psrad, LEG(66, 0F, 0, 0xe2), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 63 /r: PACKSSWB mm1, mm2/m64 */ OPCODE(packsswb, LEG(NP, 0F, 0, 0x63), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 63 /r: PACKSSWB xmm1, xmm2/m128 */ +OPCODE(packsswb, LEG(66, 0F, 0, 0x63), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 6B /r: PACKSSDW mm1, mm2/m64 */ OPCODE(packssdw, LEG(NP, 0F, 0, 0x6b), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 6B /r: PACKSSDW xmm1, xmm2/m128 */ +OPCODE(packssdw, LEG(66, 0F, 0, 0x6b), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 67 /r: PACKUSWB mm, mm/m64 */ OPCODE(packuswb, LEG(NP, 0F, 0, 0x67), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 67 /r: PACKUSWB xmm1, xmm2/m128 */ +OPCODE(packuswb, LEG(66, 0F, 0, 0x67), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 68 /r: PUNPCKHBW mm, mm/m64 */ OPCODE(punpckhbw, LEG(NP, 0F, 0, 0x68), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 68 /r: PUNPCKHBW xmm1, xmm2/m128 */ +OPCODE(punpckhbw, LEG(66, 0F, 0, 0x68), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 69 /r: PUNPCKHWD mm, mm/m64 */ OPCODE(punpckhwd, LEG(NP, 0F, 0, 0x69), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 69 /r: PUNPCKHWD xmm1, xmm2/m128 */ +OPCODE(punpckhwd, LEG(66, 0F, 0, 0x69), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 6A /r: PUNPCKHDQ mm, mm/m64 */ OPCODE(punpckhdq, LEG(NP, 0F, 0, 0x6a), MMX, WRR, Pq, Pq, Qq) +/* 66 0F 6A /r: PUNPCKHDQ xmm1, xmm2/m128 */ +OPCODE(punpckhdq, LEG(66, 0F, 0, 0x6a), SSE2, WRR, Vdq, Vdq, Wdq) +/* 66 0F 6D /r: PUNPCKHQDQ xmm1, xmm2/m128 */ +OPCODE(punpckhqdq, LEG(66, 0F, 0, 0x6d), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 60 /r: PUNPCKLBW mm, mm/m32 */ OPCODE(punpcklbw, LEG(NP, 0F, 0, 0x60), MMX, WRR, Pq, Pq, Qd) +/* 66 0F 60 /r: PUNPCKLBW xmm1, xmm2/m128 */ +OPCODE(punpcklbw, LEG(66, 0F, 0, 0x60), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 61 /r: PUNPCKLWD mm, mm/m32 */ OPCODE(punpcklwd, LEG(NP, 0F, 0, 0x61), MMX, WRR, Pq, Pq, Qd) +/* 66 0F 61 /r: PUNPCKLWD xmm1, xmm2/m128 */ +OPCODE(punpcklwd, LEG(66, 0F, 0, 0x61), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 62 /r: PUNPCKLDQ mm, mm/m32 */ OPCODE(punpckldq, LEG(NP, 0F, 0, 0x62), MMX, WRR, Pq, Pq, Qd) +/* 66 0F 62 /r: PUNPCKLDQ xmm1, xmm2/m128 */ +OPCODE(punpckldq, LEG(66, 0F, 0, 0x62), SSE2, WRR, Vdq, Vdq, Wdq) +/* 66 0F 6C /r: PUNPCKLQDQ xmm1, xmm2/m128 */ +OPCODE(punpcklqdq, LEG(66, 0F, 0, 0x6c), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 14 /r: UNPCKLPS xmm1, xmm2/m128 */ OPCODE(unpcklps, LEG(NP, 0F, 0, 0x14), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 14 /r: UNPCKLPD xmm1, xmm2/m128 */ +OPCODE(unpcklpd, LEG(66, 0F, 0, 0x14), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 15 /r: UNPCKHPS xmm1, xmm2/m128 */ OPCODE(unpckhps, LEG(NP, 0F, 0, 0x15), SSE, WRR, Vdq, Vdq, Wdq) +/* 66 0F 15 /r: UNPCKHPD xmm1, xmm2/m128 */ +OPCODE(unpckhpd, LEG(66, 0F, 0, 0x15), SSE2, WRR, Vdq, Vdq, Wdq) /* NP 0F 70 /r ib: PSHUFW mm1, mm2/m64, imm8 */ OPCODE(pshufw, LEG(NP, 0F, 0, 0x70), SSE, WRR, Pq, Qq, Ib) +/* F2 0F 70 /r ib: PSHUFLW xmm1, xmm2/m128, imm8 */ +OPCODE(pshuflw, LEG(F2, 0F, 0, 0x70), SSE2, WRR, Vdq, Wdq, Ib) +/* F3 0F 70 /r ib: PSHUFHW xmm1, xmm2/m128, imm8 */ +OPCODE(pshufhw, LEG(F3, 0F, 0, 0x70), SSE2, WRR, Vdq, Wdq, Ib) +/* 66 0F 70 /r ib: PSHUFD xmm1, xmm2/m128, imm8 */ +OPCODE(pshufd, LEG(66, 0F, 0, 0x70), SSE2, WRR, Vdq, Wdq, Ib) /* NP 0F C6 /r ib: SHUFPS xmm1, xmm3/m128, imm8 */ OPCODE(shufps, LEG(NP, 0F, 0, 0xc6), SSE, WRRR, Vdq, Vdq, Wdq, Ib) +/* 66 0F C6 /r ib: SHUFPD xmm1, xmm2/m128, imm8 */ +OPCODE(shufpd, LEG(66, 0F, 0, 0xc6), SSE2, WRRR, Vdq, Vdq, Wdq, Ib) /* NP 0F C4 /r ib: PINSRW mm, r32/m16, imm8 */ OPCODE(pinsrw, LEG(NP, 0F, 0, 0xc4), SSE, WRRR, Pq, Pq, RdMw, Ib) +/* 66 0F C4 /r ib: PINSRW xmm, r32/m16, imm8 */ +OPCODE(pinsrw, LEG(66, 0F, 0, 0xc4), SSE2, WRRR, Vdq, Vdq, RdMw, Ib) /* NP 0F C5 /r ib: PEXTRW r32, mm, imm8 */ OPCODE(pextrw, LEG(NP, 0F, 0, 0xc5), SSE, WRR, Gd, Nq, Ib) /* NP REX.W 0F C5 /r ib: PEXTRW r64, mm, imm8 */ OPCODE(pextrw, LEG(NP, 0F, 1, 0xc5), SSE, WRR, Gq, Nq, Ib) +/* 66 0F C5 /r ib: PEXTRW r32, xmm, imm8 */ +OPCODE(pextrw, LEG(66, 0F, 0, 0xc5), SSE2, WRR, Gd, Udq, Ib) +/* 66 REX.W 0F C5 /r ib: PEXTRW r64, xmm, imm8 */ +OPCODE(pextrw, LEG(66, 0F, 1, 0xc5), SSE2, WRR, Gq, Udq, Ib) /* NP 0F 2A /r: CVTPI2PS xmm, mm/m64 */ OPCODE(cvtpi2ps, LEG(NP, 0F, 0, 0x2a), SSE, WR, Vdq, Qq) /* F3 0F 2A /r: CVTSI2SS xmm1,r/m32 */ OPCODE(cvtsi2ss, LEG(F3, 0F, 0, 0x2a), SSE, WR, Vd, Ed) /* F3 REX.W 0F 2A /r: CVTSI2SS xmm1,r/m64 */ OPCODE(cvtsi2ss, LEG(F3, 0F, 1, 0x2a), SSE, WR, Vd, Eq) +/* 66 0F 2A /r: CVTPI2PD xmm, mm/m64 */ +OPCODE(cvtpi2pd, LEG(66, 0F, 0, 0x2a), SSE2, WR, Vdq, Qq) +/* F2 0F 2A /r: CVTSI2SD xmm1,r32/m32 */ +OPCODE(cvtsi2sd, LEG(F2, 0F, 0, 0x2a), SSE2, WR, Vq, Ed) +/* F2 REX.W 0F 2A /r: CVTSI2SD xmm1,r/m64 */ +OPCODE(cvtsi2sd, LEG(F2, 0F, 1, 0x2a), SSE2, WR, Vq, Eq) /* NP 0F 2D /r: CVTPS2PI mm, xmm/m64 */ OPCODE(cvtps2pi, LEG(NP, 0F, 0, 0x2d), SSE, WR, Pq, Wq) /* F3 0F 2D /r: CVTSS2SI r32,xmm1/m32 */ OPCODE(cvtss2si, LEG(F3, 0F, 0, 0x2d), SSE, WR, Gd, Wd) /* F3 REX.W 0F 2D /r: CVTSS2SI r64,xmm1/m32 */ OPCODE(cvtss2si, LEG(F3, 0F, 1, 0x2d), SSE, WR, Gq, Wd) +/* 66 0F 2D /r: CVTPD2PI mm, xmm/m128 */ +OPCODE(cvtpd2pi, LEG(66, 0F, 0, 0x2d), SSE2, WR, Pq, Wdq) +/* F2 0F 2D /r: CVTSD2SI r32,xmm1/m64 */ +OPCODE(cvtsd2si, LEG(F2, 0F, 0, 0x2d), SSE2, WR, Gd, Wq) +/* F2 REX.W 0F 2D /r: CVTSD2SI r64,xmm1/m64 */ +OPCODE(cvtsd2si, LEG(F2, 0F, 1, 0x2d), SSE2, WR, Gq, Wq) /* NP 0F 2C /r: CVTTPS2PI mm, xmm/m64 */ OPCODE(cvttps2pi, LEG(NP, 0F, 0, 0x2c), SSE, WR, Pq, Wq) /* F3 0F 2C /r: CVTTSS2SI r32,xmm1/m32 */ OPCODE(cvttss2si, LEG(F3, 0F, 0, 0x2c), SSE, WR, Gd, Wd) /* F3 REX.W 0F 2C /r: CVTTSS2SI r64,xmm1/m32 */ OPCODE(cvttss2si, LEG(F3, 0F, 1, 0x2c), SSE, WR, Gq, Wd) +/* 66 0F 2C /r: CVTTPD2PI mm, xmm/m128 */ +OPCODE(cvttpd2pi, LEG(66, 0F, 0, 0x2c), SSE2, WR, Pq, Wdq) +/* F2 0F 2C /r: CVTTSD2SI r32,xmm1/m64 */ +OPCODE(cvttsd2si, LEG(F2, 0F, 0, 0x2c), SSE2, WR, Gd, Wq) +/* F2 REX.W 0F 2C /r: CVTTSD2SI r64,xmm1/m64 */ +OPCODE(cvttsd2si, LEG(F2, 0F, 1, 0x2c), SSE2, WR, Gq, Wq) +/* F2 0F E6 /r: CVTPD2DQ xmm1, xmm2/m128 */ +OPCODE(cvtpd2dq, LEG(F2, 0F, 0, 0xe6), SSE2, WR, Vdq, Wdq) +/* 66 0F E6 /r: CVTTPD2DQ xmm1, xmm2/m128 */ +OPCODE(cvttpd2dq, LEG(66, 0F, 0, 0xe6), SSE2, WR, Vdq, Wdq) +/* F3 0F E6 /r: CVTDQ2PD xmm1, xmm2/m64 */ +OPCODE(cvtdq2pd, LEG(F3, 0F, 0, 0xe6), SSE2, WR, Vdq, Wq) +/* NP 0F 5A /r: CVTPS2PD xmm1, xmm2/m64 */ +OPCODE(cvtps2pd, LEG(NP, 0F, 0, 0x5a), SSE2, WR, Vdq, Wq) +/* 66 0F 5A /r: CVTPD2PS xmm1, xmm2/m128 */ +OPCODE(cvtpd2ps, LEG(66, 0F, 0, 0x5a), SSE2, WR, Vdq, Wdq) +/* F3 0F 5A /r: CVTSS2SD xmm1, xmm2/m32 */ +OPCODE(cvtss2sd, LEG(F3, 0F, 0, 0x5a), SSE2, WR, Vq, Wd) +/* F2 0F 5A /r: CVTSD2SS xmm1, xmm2/m64 */ +OPCODE(cvtsd2ss, LEG(F2, 0F, 0, 0x5a), SSE2, WR, Vd, Wq) +/* NP 0F 5B /r: CVTDQ2PS xmm1, xmm2/m128 */ +OPCODE(cvtdq2ps, LEG(NP, 0F, 0, 0x5b), SSE2, WR, Vdq, Wdq) +/* 66 0F 5B /r: CVTPS2DQ xmm1, xmm2/m128 */ +OPCODE(cvtps2dq, LEG(66, 0F, 0, 0x5b), SSE2, WR, Vdq, Wdq) +/* F3 0F 5B /r: CVTTPS2DQ xmm1, xmm2/m128 */ +OPCODE(cvttps2dq, LEG(F3, 0F, 0, 0x5b), SSE2, WR, Vdq, Wdq) /* NP 0F F7 /r: MASKMOVQ mm1, mm2 */ OPCODE(maskmovq, LEG(NP, 0F, 0, 0xf7), SSE, RR, Pq, Nq) +/* 66 0F F7 /r: MASKMOVDQU xmm1, xmm2 */ +OPCODE(maskmovdqu, LEG(66, 0F, 0, 0xf7), SSE2, RR, Vdq, Udq) /* NP 0F 2B /r: MOVNTPS m128, xmm1 */ OPCODE(movntps, LEG(NP, 0F, 0, 0x2b), SSE, WR, Mdq, Vdq) +/* 66 0F 2B /r: MOVNTPD m128, xmm1 */ +OPCODE(movntpd, LEG(66, 0F, 0, 0x2b), SSE2, WR, Mdq, Vdq) +/* NP 0F C3 /r: MOVNTI m32, r32 */ +OPCODE(movnti, LEG(NP, 0F, 0, 0xc3), SSE2, WR, Md, Gd) +/* NP REX.W + 0F C3 /r: MOVNTI m64, r64 */ +OPCODE(movnti, LEG(NP, 0F, 1, 0xc3), SSE2, WR, Mq, Gq) /* NP 0F E7 /r: MOVNTQ m64, mm */ OPCODE(movntq, LEG(NP, 0F, 0, 0xe7), SSE, WR, Mq, Pq) +/* 66 0F E7 /r: MOVNTDQ m128, xmm1 */ +OPCODE(movntdq, LEG(66, 0F, 0, 0xe7), SSE2, WR, Mdq, Vdq) +/* F3 90: PAUSE */ +OPCODE(pause, LEG(F3, NA, 0, 0x90), SSE2, ) /* NP 0F 77: EMMS */ OPCODE(emms, LEG(NP, 0F, 0, 0x77), MMX, ) =20 +OPCODE_GRP(grp12_LEG_66, LEG(66, 0F, 0, 0x71)) +OPCODE_GRP_BEGIN(grp12_LEG_66) + /* 66 0F 71 /6 ib: PSLLW xmm1, imm8 */ + OPCODE_GRPMEMB(grp12_LEG_66, psllw, 6, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 71 /2 ib: PSRLW xmm1, imm8 */ + OPCODE_GRPMEMB(grp12_LEG_66, psrlw, 2, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 71 /4 ib: PSRAW xmm1,imm8 */ + OPCODE_GRPMEMB(grp12_LEG_66, psraw, 4, SSE2, WRR, Udq, Udq, Ib) +OPCODE_GRP_END(grp12_LEG_66) + OPCODE_GRP(grp12_LEG_NP, LEG(NP, 0F, 0, 0x71)) OPCODE_GRP_BEGIN(grp12_LEG_NP) /* NP 0F 71 /6 ib: PSLLW mm1, imm8 */ @@ -288,6 +582,16 @@ OPCODE_GRP_BEGIN(grp12_LEG_NP) OPCODE_GRPMEMB(grp12_LEG_NP, psraw, 4, MMX, WRR, Nq, Nq, Ib) OPCODE_GRP_END(grp12_LEG_NP) =20 +OPCODE_GRP(grp13_LEG_66, LEG(66, 0F, 0, 0x72)) +OPCODE_GRP_BEGIN(grp13_LEG_66) + /* 66 0F 72 /6 ib: PSLLD xmm1, imm8 */ + OPCODE_GRPMEMB(grp13_LEG_66, pslld, 6, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 72 /2 ib: PSRLD xmm1, imm8 */ + OPCODE_GRPMEMB(grp13_LEG_66, psrld, 2, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 72 /4 ib: PSRAD xmm1,imm8 */ + OPCODE_GRPMEMB(grp13_LEG_66, psrad, 4, SSE2, WRR, Udq, Udq, Ib) +OPCODE_GRP_END(grp13_LEG_66) + OPCODE_GRP(grp13_LEG_NP, LEG(NP, 0F, 0, 0x72)) OPCODE_GRP_BEGIN(grp13_LEG_NP) /* NP 0F 72 /6 ib: PSLLD mm, imm8 */ @@ -298,6 +602,18 @@ OPCODE_GRP_BEGIN(grp13_LEG_NP) OPCODE_GRPMEMB(grp13_LEG_NP, psrad, 4, MMX, WRR, Nq, Nq, Ib) OPCODE_GRP_END(grp13_LEG_NP) =20 +OPCODE_GRP(grp14_LEG_66, LEG(66, 0F, 0, 0x73)) +OPCODE_GRP_BEGIN(grp14_LEG_66) + /* 66 0F 73 /6 ib: PSLLQ xmm1, imm8 */ + OPCODE_GRPMEMB(grp14_LEG_66, psllq, 6, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 73 /7 ib: PSLLDQ xmm1, imm8 */ + OPCODE_GRPMEMB(grp14_LEG_66, pslldq, 7, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 73 /2 ib: PSRLQ xmm1, imm8 */ + OPCODE_GRPMEMB(grp14_LEG_66, psrlq, 2, SSE2, WRR, Udq, Udq, Ib) + /* 66 0F 73 /3 ib: PSRLDQ xmm1, imm8 */ + OPCODE_GRPMEMB(grp14_LEG_66, psrldq, 3, SSE2, WRR, Udq, Udq, Ib) +OPCODE_GRP_END(grp14_LEG_66) + OPCODE_GRP(grp14_LEG_NP, LEG(NP, 0F, 0, 0x73)) OPCODE_GRP_BEGIN(grp14_LEG_NP) /* NP 0F 73 /6 ib: PSLLQ mm, imm8 */ @@ -309,7 +625,12 @@ OPCODE_GRP_END(grp14_LEG_NP) OPCODE_GRP(grp15_LEG_NP, LEG(NP, 0F, 0, 0xae)) OPCODE_GRP_BEGIN(grp15_LEG_NP) /* NP 0F AE /7: SFENCE */ - OPCODE_GRPMEMB(grp15_LEG_NP, sfence, 7, SSE, ) + /* NP 0F AE /7: CLFLUSH m8 */ + OPCODE_GRPMEMB(grp15_LEG_NP, sfence_clflush, 7, SSE, RR, modrm_mod, mo= drm) + /* NP 0F AE /5: LFENCE */ + OPCODE_GRPMEMB(grp15_LEG_NP, lfence, 5, SSE2, ) + /* NP 0F AE /6: MFENCE */ + OPCODE_GRPMEMB(grp15_LEG_NP, mfence, 6, SSE2, ) /* NP 0F AE /2: LDMXCSR m32 */ OPCODE_GRPMEMB(grp15_LEG_NP, ldmxcsr, 2, SSE, R, Md) /* NP 0F AE /3: STMXCSR m32 */ --=20 2.20.1 From nobody Sun May 5 11:28:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565837452; cv=none; d=zoho.com; s=zohoarc; b=fa9HP7ouHawWLNwCEOcwBRgKw3oDShlAfdEAtBMVLkLxy/KXjl4xDZrR4VdsFVaPC+EzmYNwbNmUBjv2yOdraPWtimLwL8R79PSywh9/UbexHISzl254xF48FBk7s5x6xLPCrG4qJqdqwEqSuRfQ4itniQdqYAROgeKfXZ/u/Ao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565837452; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=SqwvmHDVPtJ1VNAOlSBVqkwXsS/iGALpdig8lvEHZDs=; b=V+B4srrftHP6BaC2XCiXRlxN85ka2lN+ObZ3+sNlS/EgF+DjEUDXMEuPPFgW9HWTiUIhOvXt4P+R7scU5iTEQ1zxj8RLVvSJCM6vBylPQl8MkdGhUUZAXQ13NivZkrAxYibXs4Wrvc8RVTFiAgQ9RhHZtaJFvi1lCWadwZZ2EOw= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565837452255892.3331530855263; Wed, 14 Aug 2019 19:50:52 -0700 (PDT) Received: from localhost ([::1]:37802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5qi-00062J-U4 for importer@patchew.org; Wed, 14 Aug 2019 22:50:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47125) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Do-0006Z3-7Y for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dn-0000YG-5N for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:36 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:33202) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dn-0000XQ-0T for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:35 -0400 Received: by mail-yw1-xc43.google.com with SMTP id e65so307255ywh.0 for ; Wed, 14 Aug 2019 19:10:34 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SqwvmHDVPtJ1VNAOlSBVqkwXsS/iGALpdig8lvEHZDs=; b=pEP4EwYSCl0eoTRTLDxgbEueOqOUDq3cd+AHfufZNJWGaY7vIymbULm/w+1pn3da1B su3h6ac7OdYF2Fgeh8YE8+4IEGzUoDj92ss+ERhJh9z2U/uFAbuTLWDVWUYpBJqSSRsV LQgvqnJaK2c5LvR/2V35LTW8MoVtjtmX/KkPPssk1SjcD+Qdg09tjyY2Grr8qTOPt7kY Lso+EzJ0aKxKXw0+i/xqaiecm7X2GYqpPGL2p9dp7PlgaY3ZlogQvnl7jFyvdw7fyDM4 XcKerBSLF7zOqXzXlQelFbLg8kx4Hs9nUa5cVSkG1YeSI68cld2rfT88cNiHR501EUiV b3vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SqwvmHDVPtJ1VNAOlSBVqkwXsS/iGALpdig8lvEHZDs=; b=H+v75hb8Hr/+SNrhBj6BLkIsjzzvSz2EDREFAKyZ6yP/MRY5OuGyEUqKod1FleABP1 Sut9t9ny/8eBgMOgpWY4XqfpSTiQIx1ANdguXlU+ep2FNNnRlIWOGrkH1sGsdc9kAZBb 8xlYBc/QNtghpVcktZREmDpDuTbQEX/kUeRvtuTZgiqSxCzoGvOv0H6CtwFMFcjjft3z ArDdxJLzUq5gCys7mNCV1tJi8QF0SE6ExWb2b7ZpNiz07tcJuB5tR8DybtCvh9CPrlzJ D+6jBVTIfv8eTlVf9G7sqSTsOGKq3biSmeY6uiuQ5xCK2OnnuYYIP5IwQBjlHbP92gvF aemg== X-Gm-Message-State: APjAAAXmKBOEyMuM0wLYi56vLZWsCG69mXIQ+Z3qwgQnPdvajwNaQb4E Xi2y1kCXL30FvuQv9TQbM1v5EOV8 X-Google-Smtp-Source: APXvYqz9kBoCNGkdBsZedl7VDQlgMj/lp8aLcB0nFhMi8Wga5E2tf7pINVwy0rYA33Wrzy/YK7ki8w== X-Received: by 2002:a0d:e897:: with SMTP id r145mr1671733ywe.80.1565835034345; Wed, 14 Aug 2019 19:10:34 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:26 -0400 Message-Id: <20190815020928.9679-45-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::c43 Subject: [Qemu-devel] [RFC PATCH v3 44/46] target/i386: introduce SSE3 translators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use the translator macros to define translators required by SSE3 instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index 7ec082e79d..c72138014a 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -6363,6 +6363,7 @@ DEF_TRANSLATE_INSN2(Vd, Wd) DEF_TRANSLATE_INSN2(Vd, Wq) DEF_TRANSLATE_INSN2(Vdq, Ed) DEF_TRANSLATE_INSN2(Vdq, Eq) +DEF_TRANSLATE_INSN2(Vdq, Mdq) DEF_TRANSLATE_INSN2(Vdq, Nq) DEF_TRANSLATE_INSN2(Vdq, Qq) DEF_TRANSLATE_INSN2(Vdq, Udq) --=20 2.20.1 From nobody Sun May 5 11:28:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565835844; cv=none; d=zoho.com; s=zohoarc; b=avaaOtBRckVCwCP9E5zB6lKSfnOJOvfh6rCfyuPFHNUptRUmSNbgLCTx2cZksfahmpmgqxtLhUCOXbfWkKYf/0e89fFuGzfoRjVswYCk75ayRyW5GFqlCoFaP7qiCpoxo5us5ss8I6e77oIwiQt/F1JTtv2ruTBEaJDPHl/DDLs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565835844; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=pFADS3F1d6u0mR4HCrPET+k4id9MakH4mSbzpX9nHM8=; b=kUP9vR0kAHoIQ2zwgf/hxNhDMVp8f/5zio3AoAIfFNxGal0WTgbmJRtzOa8JSSzos84MEUqMN3b6yUZyhwYRdwPxMcWyFPG/VuNrFLMXuP+b45W+EVSumwCwAVTLwQ/39EL6g3TLiE/HtcKVXBK74HpiHiXIBZq83VI/seyVdPs= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565835844110400.7927175430938; Wed, 14 Aug 2019 19:24:04 -0700 (PDT) Received: from localhost ([::1]:37466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Qo-0005W8-5E for importer@patchew.org; Wed, 14 Aug 2019 22:24:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47142) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dp-0006ao-4f for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Dn-0000Z3-Uf for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:37 -0400 Received: from mail-yb1-xb2c.google.com ([2607:f8b0:4864:20::b2c]:45757) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Dn-0000Yh-QG for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:35 -0400 Received: by mail-yb1-xb2c.google.com with SMTP id u32so388576ybi.12 for ; Wed, 14 Aug 2019 19:10:35 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pFADS3F1d6u0mR4HCrPET+k4id9MakH4mSbzpX9nHM8=; b=iYMMB5w0bUeCsTR+AhD5NV6+gOFw4u/GKvwBD5fFcTiV+tlK7ccWQqEYrFN4jnI/19 HyVS8mltAvBI7Xt1ZfokX4dYLAO1NFH6w7b0UrX/NEYyiQPp+N9YP9MO8QtSDKQ7gdl/ Jh61CYnmXsq0hHnrEoqVkQgvk4cgi1tXPwGhylT+mtuA4TdItkWg5j+EYGPVPNns/bKD gARLpvWURnrFBqwEnrmgzunHnvX+ZlCUUfYZ4XJLsUztQJ6rwyGB2a/nmxFqRsBHrReJ N9duhybrxi8Rtxr+RLKHfCZGgjdlUG3mF7TvtkaPLzq7+8Z071vqTm3zc2cnqMFunJKN 3E+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pFADS3F1d6u0mR4HCrPET+k4id9MakH4mSbzpX9nHM8=; b=ESztXYe7r6WIyRfJQILuOwU92aGaNrrYJ7t7bIw0mzh3KuAxm3TplFxyyVleSmFtM2 2ZZezdpbMdG7+Mu2YJxeLZxNHHmGMchqmGI5ri5Qf1nrzvDMo5HO6/yKaYc9II2/VqEd pEPyzTrlqtpXDHDX/eliPy0K6WVV5RAD2OG04oa5J91O+KtVjj2w9pBulpgnlEEdHCwH 93ggV0UlHAXT3Pnj0t8uOHM6J1fvakivCblTNOAi/LWMkhXNYJeeGv5dgMQjFrev7XN0 6GA+IuS11QutBkm9xo4RQ4tX/7TB6g2b7aOSvdlzrxxStfz1GkZU6i46r+YoZhD1YKkc rJbw== X-Gm-Message-State: APjAAAUYcgoZcs6x4F9+t/heSr/bLmYZn3sN3rbA9hX9ykI3UcHxcCWP xRYu8g1epL59hIctUf9Yh2v1xrXI X-Google-Smtp-Source: APXvYqzEwX6ocbm49pePMuu+JBa/bNrWt86R0bk6xr59jBZ+esZCCIJ7af8CJ4cjnwVU6xPvy7tiDQ== X-Received: by 2002:a25:c486:: with SMTP id u128mr1986161ybf.428.1565835035102; Wed, 14 Aug 2019 19:10:35 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:27 -0400 Message-Id: <20190815020928.9679-46-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b2c Subject: [Qemu-devel] [RFC PATCH v3 45/46] target/i386: introduce SSE3 code generators X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Introduce code generators required by SSE3 instructions. Signed-off-by: Jan Bobek --- target/i386/translate.c | 64 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/target/i386/translate.c b/target/i386/translate.c index c72138014a..9da3fbb611 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -5627,6 +5627,63 @@ GEN_INSN2(movmskpd, Gq, Udq) tcg_temp_free_i32(arg1_r32); } =20 +GEN_INSN2(lddqu, Vdq, Mdq) +{ + assert(arg2 =3D=3D s->A0); + gen_ldo_env_A0(s, arg1); +} + +GEN_INSN2(movshdup, Vdq, Wdq) +{ + const TCGv_i32 r32 =3D tcg_temp_new_i32(); + + tcg_gen_ld_i32(r32, cpu_env, arg2 + offsetof(ZMMReg, ZMM_L(1))); + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(0))); + if (arg1 !=3D arg2) { + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(1))); + } + + tcg_gen_ld_i32(r32, cpu_env, arg2 + offsetof(ZMMReg, ZMM_L(3))); + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(2))); + if (arg1 !=3D arg2) { + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(3))); + } + + tcg_temp_free_i32(r32); +} + +GEN_INSN2(movsldup, Vdq, Wdq) +{ + const TCGv_i32 r32 =3D tcg_temp_new_i32(); + + tcg_gen_ld_i32(r32, cpu_env, arg2 + offsetof(ZMMReg, ZMM_L(0))); + if (arg1 !=3D arg2) { + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(0))); + } + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(1))); + + tcg_gen_ld_i32(r32, cpu_env, arg2 + offsetof(ZMMReg, ZMM_L(2))); + if (arg1 !=3D arg2) { + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(2))); + } + tcg_gen_st_i32(r32, cpu_env, arg1 + offsetof(ZMMReg, ZMM_L(3))); + + tcg_temp_free_i32(r32); +} + +GEN_INSN2(movddup, Vdq, Wq) +{ + const TCGv_i64 r64 =3D tcg_temp_new_i64(); + + tcg_gen_ld_i64(r64, cpu_env, arg2 + offsetof(ZMMReg, ZMM_Q(0))); + if (arg1 !=3D arg2) { + tcg_gen_st_i64(r64, cpu_env, arg1 + offsetof(ZMMReg, ZMM_Q(0))); + } + tcg_gen_st_i64(r64, cpu_env, arg1 + offsetof(ZMMReg, ZMM_Q(1))); + + tcg_temp_free_i64(r64); +} + DEF_GEN_INSN3_GVEC_MM(paddb, add, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_XMM(paddb, add, Vdq, Vdq, Wdq, MO_8) DEF_GEN_INSN3_GVEC_MM(paddw, add, Pq, Pq, Qq, MO_16) @@ -5647,6 +5704,8 @@ DEF_GEN_INSN3_HELPER_EPP(addps, addps, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(addss, addss, Vd, Vd, Wd) DEF_GEN_INSN3_HELPER_EPP(addpd, addpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(addsd, addsd, Vq, Vq, Wq) +DEF_GEN_INSN3_HELPER_EPP(haddps, haddps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(haddpd, haddpd, Vdq, Vdq, Wdq) =20 DEF_GEN_INSN3_GVEC_MM(psubb, sub, Pq, Pq, Qq, MO_8) DEF_GEN_INSN3_GVEC_XMM(psubb, sub, Vdq, Vdq, Wdq, MO_8) @@ -5668,6 +5727,11 @@ DEF_GEN_INSN3_HELPER_EPP(subps, subps, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(subpd, subpd, Vdq, Vdq, Wdq) DEF_GEN_INSN3_HELPER_EPP(subss, subss, Vd, Vd, Wd) DEF_GEN_INSN3_HELPER_EPP(subsd, subsd, Vq, Vq, Wq) +DEF_GEN_INSN3_HELPER_EPP(hsubps, hsubps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(hsubpd, hsubpd, Vdq, Vdq, Wdq) + +DEF_GEN_INSN3_HELPER_EPP(addsubps, addsubps, Vdq, Vdq, Wdq) +DEF_GEN_INSN3_HELPER_EPP(addsubpd, addsubpd, Vdq, Vdq, Wdq) =20 DEF_GEN_INSN3_HELPER_EPP(pmullw, pmullw_mmx, Pq, Pq, Qq) DEF_GEN_INSN3_HELPER_EPP(pmullw, pmullw_xmm, Vdq, Vdq, Wdq) --=20 2.20.1 From nobody Sun May 5 11:28:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565836003; cv=none; d=zoho.com; s=zohoarc; b=MHCX94DlEkB6LPWO1ud5381Sug9kK6OnDoOvqu5OOvbA5gM7cBf/3wjLCi/Hyuc8yU+fCUC6b0WG2QDSkYkzdVmVmfu9wB3p+nP7SCl60lC7LBx/u0G+OSaATYuBhNzMMHjujZkEtTzwsJlGDP1ZwaaSIZm1UVEOE8O2t/KNPyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565836003; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=gKZDBNbs0Rv4p03odiZWPA215sxOPuT/ZV9NL1iqxbM=; b=VYyIr5Q6+rHWfGwSSJY3UFsCm69mnTpwcdEa7oFuZO3cpdHsHQF8IpKKdX0hr4KMEBXdt5zDCeyq3RhkryPHUy3mhOvhKT4omoRygoWfKiGTNQf1OTKAO+Jehgsb5kT0gdsfZfB4AiH/eKSmTVAd3oPD1S5PxrIeKIvwHRgPUcY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1565836003027282.3131441888373; Wed, 14 Aug 2019 19:26:43 -0700 (PDT) Received: from localhost ([::1]:37494 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5TN-0000gq-Ey for importer@patchew.org; Wed, 14 Aug 2019 22:26:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47149) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hy5Dp-0006bh-Q4 for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hy5Do-0000a2-Js for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:37 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:36582) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hy5Do-0000Za-Fd for qemu-devel@nongnu.org; Wed, 14 Aug 2019 22:10:36 -0400 Received: by mail-yb1-xb42.google.com with SMTP id m9so407196ybm.3 for ; Wed, 14 Aug 2019 19:10:36 -0700 (PDT) Received: from dionysus.attlocal.net ([2601:c0:c67f:e390:8a9a:e33f:caf8:f018]) by smtp.gmail.com with ESMTPSA id j3sm374882ywk.21.2019.08.14.19.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2019 19:10:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gKZDBNbs0Rv4p03odiZWPA215sxOPuT/ZV9NL1iqxbM=; b=nJBUBkolxuvyTsrjC0TjPZ1Bu1lObbPiC+rYzufGIxXui2HG2haMglAFbRX78fOF3U X5mfS1lf6Xs3pZ4cdgJhZnmfUEZabkwj3+90mEOILkHJ6IR6+dFGCYh7ZhXxUdssqu8d OYyyObHEElUVSn3E8aGzbqFuweb65+KjGbWlTBNn7bwAtYMX8TseQIkuwsnga+ax2C1p ZE5/xUb0/L4tr3ZO7m93mQqqa5kchCMvPe111MrPxfrU/zX9lYKMO1ooi2jeNw2/J1nl YHtivYcgPsokDhzhBJPR1qhYGlYLNVYJ5JqnqI7O99B+wTZGm6DkpwNNW0TgM+znHVrL ZX2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gKZDBNbs0Rv4p03odiZWPA215sxOPuT/ZV9NL1iqxbM=; b=FEZgNczgVEOvejpv/eqzVf8/mLZt/1ESR/DIUBWjm3z75OHGgE5MFD/1zVDkpF46hh E52ylGO2M7mX+ekE/OA8Yi7qNdzOUf6Nuu7Yk4xFk9eWb5BvF5tf+5Wh9/Y0kH+TpVbB ALGmrQQoovn5sbqiRz0riOpd+oJjjK8S/wzESWTniqgd19RtDf61G54GPEPVKv3WL7Uc Bcpo0nLpOsIiAT17RDrb7rWCwkyvigj+sO/Xk79TRtAwtvTRlnWySFc+rowPREvlTkan RFsQpZVbn19cHzUuUg4pwr4yKgJhdM5SEbTqlx6RhMQb2omYbtsFejlvv4dNbJU9+3Cy TCyg== X-Gm-Message-State: APjAAAU5wvx6eWz7zxst/B5MK6Mn9luuzEh9PjGLyMvjsQKNi/THJJzH +bTq5MCIU1+7Kqcffn+iuvMZ0+ne X-Google-Smtp-Source: APXvYqxVMjkdKoKZdrUpal11xyw7QN2lUAfxC1hAMZHpVm/onk5XhLGyO02/f6vQj4dc6kSlR8gmjw== X-Received: by 2002:a25:d7d0:: with SMTP id o199mr1961431ybg.162.1565835035878; Wed, 14 Aug 2019 19:10:35 -0700 (PDT) From: Jan Bobek To: qemu-devel@nongnu.org Date: Wed, 14 Aug 2019 22:09:28 -0400 Message-Id: <20190815020928.9679-47-jan.bobek@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190815020928.9679-1-jan.bobek@gmail.com> References: <20190815020928.9679-1-jan.bobek@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::b42 Subject: [Qemu-devel] [RFC PATCH v3 46/46] target/i386: introduce SSE3 instructions to sse-opcode.inc.h X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Bobek , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add all the SSE3 instruction entries to sse-opcode.inc.h. Signed-off-by: Jan Bobek --- target/i386/sse-opcode.inc.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/i386/sse-opcode.inc.h b/target/i386/sse-opcode.inc.h index efa67b7ce2..0cfe6fbe31 100644 --- a/target/i386/sse-opcode.inc.h +++ b/target/i386/sse-opcode.inc.h @@ -133,6 +133,14 @@ OPCODE(movmskps, LEG(NP, 0F, 1, 0x50), SSE, WR, Gq, Ud= q) OPCODE(movmskpd, LEG(66, 0F, 0, 0x50), SSE2, WR, Gd, Udq) /* 66 REX.W 0F 50 /r: MOVMSKPD r64, xmm */ OPCODE(movmskpd, LEG(66, 0F, 1, 0x50), SSE2, WR, Gq, Udq) +/* F2 0F F0 /r: LDDQU xmm1, m128 */ +OPCODE(lddqu, LEG(F2, 0F, 0, 0xf0), SSE3, WR, Vdq, Mdq) +/* F3 0F 16 /r: MOVSHDUP xmm1, xmm2/m128 */ +OPCODE(movshdup, LEG(F3, 0F, 0, 0x16), SSE3, WR, Vdq, Wdq) +/* F3 0F 12 /r: MOVSLDUP xmm1, xmm2/m128 */ +OPCODE(movsldup, LEG(F3, 0F, 0, 0x12), SSE3, WR, Vdq, Wdq) +/* F2 0F 12 /r: MOVDDUP xmm1, xmm2/m64 */ +OPCODE(movddup, LEG(F2, 0F, 0, 0x12), SSE3, WR, Vdq, Wq) /* NP 0F FC /r: PADDB mm, mm/m64 */ OPCODE(paddb, LEG(NP, 0F, 0, 0xfc), MMX, WRR, Pq, Pq, Qq) /* 66 0F FC /r: PADDB xmm1, xmm2/m128 */ @@ -173,6 +181,10 @@ OPCODE(addpd, LEG(66, 0F, 0, 0x58), SSE2, WRR, Vdq, Vd= q, Wdq) OPCODE(addss, LEG(F3, 0F, 0, 0x58), SSE, WRR, Vd, Vd, Wd) /* F2 0F 58 /r: ADDSD xmm1, xmm2/m64 */ OPCODE(addsd, LEG(F2, 0F, 0, 0x58), SSE2, WRR, Vq, Vq, Wq) +/* F2 0F 7C /r: HADDPS xmm1, xmm2/m128 */ +OPCODE(haddps, LEG(F2, 0F, 0, 0x7c), SSE3, WRR, Vdq, Vdq, Wdq) +/* 66 0F 7C /r: HADDPD xmm1, xmm2/m128 */ +OPCODE(haddpd, LEG(66, 0F, 0, 0x7c), SSE3, WRR, Vdq, Vdq, Wdq) /* NP 0F F8 /r: PSUBB mm, mm/m64 */ OPCODE(psubb, LEG(NP, 0F, 0, 0xf8), MMX, WRR, Pq, Pq, Qq) /* 66 0F F8 /r: PSUBB xmm1, xmm2/m128 */ @@ -213,6 +225,14 @@ OPCODE(subpd, LEG(66, 0F, 0, 0x5c), SSE2, WRR, Vdq, Vd= q, Wdq) OPCODE(subss, LEG(F3, 0F, 0, 0x5c), SSE, WRR, Vd, Vd, Wd) /* F2 0F 5C /r: SUBSD xmm1, xmm2/m64 */ OPCODE(subsd, LEG(F2, 0F, 0, 0x5c), SSE2, WRR, Vq, Vq, Wq) +/* F2 0F 7D /r: HSUBPS xmm1, xmm2/m128 */ +OPCODE(hsubps, LEG(F2, 0F, 0, 0x7d), SSE3, WRR, Vdq, Vdq, Wdq) +/* 66 0F 7D /r: HSUBPD xmm1, xmm2/m128 */ +OPCODE(hsubpd, LEG(66, 0F, 0, 0x7d), SSE3, WRR, Vdq, Vdq, Wdq) +/* F2 0F D0 /r: ADDSUBPS xmm1, xmm2/m128 */ +OPCODE(addsubps, LEG(F2, 0F, 0, 0xd0), SSE3, WRR, Vdq, Vdq, Wdq) +/* 66 0F D0 /r: ADDSUBPD xmm1, xmm2/m128 */ +OPCODE(addsubpd, LEG(66, 0F, 0, 0xd0), SSE3, WRR, Vdq, Vdq, Wdq) /* NP 0F D5 /r: PMULLW mm, mm/m64 */ OPCODE(pmullw, LEG(NP, 0F, 0, 0xd5), MMX, WRR, Pq, Pq, Qq) /* 66 0F D5 /r: PMULLW xmm1, xmm2/m128 */ --=20 2.20.1