From nobody Fri Dec 19 19:55:42 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149375343612553.56770149354713; Tue, 2 May 2017 12:30:36 -0700 (PDT) Received: from localhost ([::1]:33320 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d5dVJ-0008P5-Np for importer@patchew.org; Tue, 02 May 2017 15:30:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59464) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d5dOK-0001nk-QF for qemu-devel@nongnu.org; Tue, 02 May 2017 15:23:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d5dOJ-0001cj-KF for qemu-devel@nongnu.org; Tue, 02 May 2017 15:23:20 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:35810) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d5dOJ-0001cR-Eh for qemu-devel@nongnu.org; Tue, 02 May 2017 15:23:19 -0400 Received: by mail-qk0-x244.google.com with SMTP id u68so7539189qkd.2 for ; Tue, 02 May 2017 12:23:19 -0700 (PDT) Received: from bigtime.twiddle.net.com ([2602:47:d954:1500:5e51:4fff:fe40:9c64]) by smtp.gmail.com with ESMTPSA id d65sm10664657qkc.53.2017.05.02.12.23.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 May 2017 12:23:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Sx8VeNiHYqaw+o/aOtYXyhpMRTHBwDTJUlE4NWD2wIk=; b=UA+ecQ2RFd+HfRJTfwnz5+t8zQuXyOUBh5HJvfTBfOd5knKa68PZfgj/ww6PHg5ItT ENj13ApXqQUN8fHSZMAGUQfmyWOk/TVo11h5Akfq9vZzWYVt9wN7kDY3EzmDfXF4TQBZ 95QdgArqaxcsxbJIEjTNqW3D5lpJxS/krt3dTWDWVCMwXcPPeba6wmxZ3RtaL/kHxI8l yMtPfE00PwX98IjsEK3hEnrMgX1hLrISQzELrLiOEsDtNNzCtcVzSd/NB81fEQWPHuEH YNIHnKOGja2+ou8mTpJBFN5CI1h4sq0ECKW+tb1SYozzbMx/y075+WX7cobcU4R89/Bt x70A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Sx8VeNiHYqaw+o/aOtYXyhpMRTHBwDTJUlE4NWD2wIk=; b=QoQzA3ArxLt3eSAjXQCCIY2trBeH4q/5noOcGvMnRDYeFvo0TuNEgeQvooWuoN8y/v m0ftFJObhaiEm3eO/0t78rwooe9ok0+QLXYMmgKW+RshcXo50R8YjRJR5TFK7SW/TGJm R9XUx6i8z9QzMz2P3f3TNi67P5ey6GOEDXy4NqjfxqOzWvSTGitv62KWJXMH2/g1f6ib ZQSDE0ritvpxtL+op6UFS91cI0LVhFeKpiATgZhmbqW04iMuNKC1MIyQQK7YQZxxhWf8 McJPFXMjVn5CTRDyFYDyWiekUM/f85WZCLz7VczxyTEZkq9Qmp6+9bA10T/H8/Jyraa1 KjCQ== X-Gm-Message-State: AN3rC/5c668rgYSCS8hcoaJgLgjzeCtc3dAdumLCocqNuEs9PVuOA18a 5W2p44UhubPvTdBDYyU= X-Received: by 10.55.22.131 with SMTP id 3mr26876775qkw.16.1493752998714; Tue, 02 May 2017 12:23:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 2 May 2017 12:22:45 -0700 Message-Id: <20170502192300.2124-11-rth@twiddle.net> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170502192300.2124-1-rth@twiddle.net> References: <20170502192300.2124-1-rth@twiddle.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [PATCH v6 10/25] target/i386: optimize indirect branches X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: cota@braap.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 From: "Emilio G. Cota" Speed up indirect branches by jumping to the target if it is valid. Softmmu measurements (see later commit for user-mode numbers): Note: baseline (i.e. speedup =3D=3D 1x) is QEMU v2.9.0. - SPECint06 (test set), x86_64-softmmu (Ubuntu 16.04 guest= ). Host: Intel i7-4790K @ 4.00GHz 2.4x +-+------------------------------------------------------------------= --------------------------------------------+-+ | = | | cross = | 2.2x +cross+jr............................................................= ..............+++...........................+-+ | = | | | = +++ | | 2x +-+..................................................................= ............|..|............................+-+ | = | | | | = | | | 1.8x +-+..................................................................= ............|####...........................+-+ | = |# |# | | = **** |# | 1.6x +-+..................................................................= ..........*.|*.|#...........................+-+ | = * |* |# | | = * |* |# | 1.4x +-+..................................................................= .....+++..*.|*.|#...........................+-+ | ++++++ = #### * |*++# +++ | | +++ | | = #++# *++* # +++ | | 1.2x +-+......................###.....####....+++............|..|.........= ..****..#.*..*..#....####...|.###.....####..+-+ | +++ **** # **** # #### ***### = *++* # * * # #++# ****|# +++#++# | | ****### +++ *++* # *++* # ++# # #### *|* |# +++= * * # * * # *** # *| *|# **** # | 1x +-++-*++*++#++***###++*++*+#++*+-*++#+****++#++***++#+-*+*++#-+****##= ++*++*-+#+*++*-+#++*+*++#++*-+*+#++*++*++#-++-+ | * * # * * # * * # * * # * * # * * # *|* |# *++* #= * * # * * # * * # * * # * * # | | * * # * * # * * # * * # * * # * * # *+*++# * * #= * * # * * # * * # * * # * * # | 0.8x +-+--****###--***###--****##--****###-****###--***###--***###--****##= --****###-****###--***###--****##--****###--+-+ astar bzip2 gcc gobmk h264ref hmmlibquantum mcf om= netpperlbench sjengxalancbmk hmean png: http://imgur.com/DU36YFU NB. 'cross' represents the previous commit. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Richard Henderson Signed-off-by: Emilio G. Cota Message-Id: <1493263764-18657-11-git-send-email-cota@braap.org> Signed-off-by: Richard Henderson --- target/i386/translate.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/target/i386/translate.c b/target/i386/translate.c index ea113fe..674ec96 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -4996,7 +4996,7 @@ static target_ulong disas_insn(CPUX86State *env, Disa= sContext *s, gen_push_v(s, cpu_T1); gen_op_jmp_v(cpu_T0); gen_bnd_jmp(s); - gen_eob(s); + gen_jr(s, cpu_T0); break; case 3: /* lcall Ev */ gen_op_ld_v(s, ot, cpu_T1, cpu_A0); @@ -5014,7 +5014,8 @@ static target_ulong disas_insn(CPUX86State *env, Disa= sContext *s, tcg_const_i32(dflag - 1), tcg_const_i32(s->pc - s->cs_base)); } - gen_eob(s); + tcg_gen_ld_tl(cpu_tmp4, cpu_env, offsetof(CPUX86State, eip)); + gen_jr(s, cpu_tmp4); break; case 4: /* jmp Ev */ if (dflag =3D=3D MO_16) { @@ -5022,7 +5023,7 @@ static target_ulong disas_insn(CPUX86State *env, Disa= sContext *s, } gen_op_jmp_v(cpu_T0); gen_bnd_jmp(s); - gen_eob(s); + gen_jr(s, cpu_T0); break; case 5: /* ljmp Ev */ gen_op_ld_v(s, ot, cpu_T1, cpu_A0); @@ -5037,7 +5038,8 @@ static target_ulong disas_insn(CPUX86State *env, Disa= sContext *s, gen_op_movl_seg_T0_vm(R_CS); gen_op_jmp_v(cpu_T1); } - gen_eob(s); + tcg_gen_ld_tl(cpu_tmp4, cpu_env, offsetof(CPUX86State, eip)); + gen_jr(s, cpu_tmp4); break; case 6: /* push Ev */ gen_push_v(s, cpu_T0); @@ -6417,7 +6419,7 @@ static target_ulong disas_insn(CPUX86State *env, Disa= sContext *s, /* Note that gen_pop_T0 uses a zero-extending load. */ gen_op_jmp_v(cpu_T0); gen_bnd_jmp(s); - gen_eob(s); + gen_jr(s, cpu_T0); break; case 0xc3: /* ret */ ot =3D gen_pop_T0(s); @@ -6425,7 +6427,7 @@ static target_ulong disas_insn(CPUX86State *env, Disa= sContext *s, /* Note that gen_pop_T0 uses a zero-extending load. */ gen_op_jmp_v(cpu_T0); gen_bnd_jmp(s); - gen_eob(s); + gen_jr(s, cpu_T0); break; case 0xca: /* lret im */ val =3D cpu_ldsw_code(env, s->pc); --=20 2.9.3