From patchwork Sat May 18 19:01:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 164453 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp3708060ili; Sat, 18 May 2019 12:13:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqyjd1slggZEIfugelbINWYcjGBQ2/Wh8kOFhA8qx+QuBUVb5E/NUFKwVYgkrtNN7zImrcyO X-Received: by 2002:a17:906:610:: with SMTP id s16mr38558617ejb.108.1558206790232; Sat, 18 May 2019 12:13:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558206790; cv=none; d=google.com; s=arc-20160816; b=KLanrOHpYmwWl3vcKvhqsQ6tUwEfk6Oy+iZXxPxl4wtQRD5yHE9EmyV+fQszC2xsMz MkWmrTgxruhWdBgzkj2qiYTxZw+Yow+FLleCc0fBCvWGXOK1p5EPpG65oEo+A3x/+iPL BjxztUwkwCM469yOGDpiUUXn9GJZZciXk5J3r9ULsNar35nEqX4cMqWS9bYTpfFsbtV0 R9p1pMl+VT9D0Nmw/64KRmnr2kBrZjrHa3GIcZ/uHoA4lrTXJnWsZRfLqk5Dz5tMVp9G 1UYFkwx7hjOKDLwusrdCzJgO7uchcwRSpwbHvrYRcBwF0Z/hhIEyhKRTvxBzthDnsaWU VNdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=zNWg+mhzIutP4OXH8oQYhx8VNmbWwXkoO09kfRoiQ1WTCWNUN2CWi7K7C3TP3ewBbQ VoScmV+/vJ3wM3B5Vpm+ImCbN0CmsDrd07sB0r2br3fFOUTY4eMvTrpjNPDOZ7u5WTWH 5u7EPFEkg7PY/IJDRB3Ki4Vi4qujBFIRoRaKqwbGZEejU6xlMeTPqGL4SPbKyY+VWUCg gmvi7juu0v5goeBvtOnrzp+Y5gY9SaOzkrBna+aAd8kxalX8XjEVu5EVebCNYhCdohWg I9z7Ka1jQRL+KlN+15grQDCUVvI9zbo4dPcUNyKazspDXhH+vFPwxmhK4T5LwV7m2tj5 4K7Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=HVuQsC8X; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id e52si9125758edb.265.2019.05.18.12.13.09 for (version=TLS1 cipher=AES128-SHA bits=128/128); Sat, 18 May 2019 12:13:10 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=HVuQsC8X; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:37693 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4lZ-00022y-39 for patch@linaro.org; Sat, 18 May 2019 15:13:09 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dT-0002qF-3f for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4au-0002cY-ON for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:09 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:36039) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4au-0002c3-Ic for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:08 -0400 Received: by mail-pl1-x641.google.com with SMTP id d21so4845499plr.3 for ; Sat, 18 May 2019 12:02:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=HVuQsC8XioIdkqzl++KY5DDIhwSzp0gt2VFiod5/uuzQwlO/KSs8XXQMt5KQ8/LLQG e+29egElL+VfsYpq/jFghEae7CcYDtHHsBt+f2/JvfmJjWtKn+s4Pomxt3YqIxptnQ+N nEBAU9kdlni+5SDdbfD2u6AOOoSH63HivAKleDvSW+JmQqQfUd0jEDY5G/rl+PBKdstw maKzy2rsarxG6RTY1U2eMl7yMzJoJos/waik5OLOszwl9pwOfCGAUaaIJol0qn5kGte2 QOJx8qzuwzj231McQB0VvaKDbb1HfPz9Vpu7/ALTNxsz5K1bbutpTPjU1VSpwoihNa2B FoZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=gJF+qwr5Z/kmhhyx9vFOLy7Kj5nefykdoE5aVp3EsrXmX7x/L11cidJe1LJHXfiVvO /gD3o1UrCygCJIeYMfzs/ZjbjeqVpWoSiGIXwm9cQvZCxNzQaGh9Gd21KfsmQooWeVC9 hCC2tz6Ci7xNUMaDalFOBnmpHw5GSW1kjkP80P4USPzUQqyKstuS1WeBcXitV11+srCe C6z83yDunDWdfEqM1S2U3tGGK3ORki+dFFLgt8rzBY8UXD49VlIXRww5341IK+bpCofF K4NZkYfD2EMus275P9YaOGWP6QAnW+DR13XcMMKetRFRilBSxjoiW5/LkK/P0sQXTDRE jYPQ== X-Gm-Message-State: APjAAAWFTDManvDSkl/aLkqEkG7HjSgaMvvohUNvhVJy/4vH9vjdQ1CR 3DKLctGkY5zqO1kPLccykTYChxEKkUg= X-Received: by 2002:a17:902:d917:: with SMTP id c23mr63258017plz.14.1558206127251; Sat, 18 May 2019 12:02:07 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:46 -0700 Message-Id: <20190518190157.21255-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 Subject: [Qemu-devel] [PATCH 05/16] tcg: Introduce do_op3_nofail for vector expansion 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This makes do_op3 match do_op2 in allowing for failure, and thus fall back expansions. Signed-off-by: Richard Henderson --- tcg/tcg-op-vec.c | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) -- 2.17.1 diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index a888c02df8..004a34935b 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -562,7 +562,7 @@ void tcg_gen_cmp_vec(TCGCond cond, unsigned vece, } } -static void do_op3(unsigned vece, TCGv_vec r, TCGv_vec a, +static bool do_op3(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b, TCGOpcode opc) { TCGTemp *rt = tcgv_vec_temp(r); @@ -580,82 +580,91 @@ static void do_op3(unsigned vece, TCGv_vec r, TCGv_vec a, can = tcg_can_emit_vec_op(opc, type, vece); if (can > 0) { vec_gen_3(opc, type, vece, ri, ai, bi); - } else { + } else if (can < 0) { const TCGOpcode *hold_list = tcg_swap_vecop_list(NULL); - tcg_debug_assert(can < 0); tcg_expand_vec_op(opc, type, vece, ri, ai, bi); tcg_swap_vecop_list(hold_list); + } else { + return false; } + return true; +} + +static void do_op3_nofail(unsigned vece, TCGv_vec r, TCGv_vec a, + TCGv_vec b, TCGOpcode opc) +{ + bool ok = do_op3(vece, r, a, b, opc); + tcg_debug_assert(ok); } void tcg_gen_add_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_add_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_add_vec); } void tcg_gen_sub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_sub_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_sub_vec); } void tcg_gen_mul_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_mul_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_mul_vec); } void tcg_gen_ssadd_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_ssadd_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_ssadd_vec); } void tcg_gen_usadd_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_usadd_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_usadd_vec); } void tcg_gen_sssub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_sssub_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_sssub_vec); } void tcg_gen_ussub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_ussub_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_ussub_vec); } void tcg_gen_smin_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_smin_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_smin_vec); } void tcg_gen_umin_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_umin_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_umin_vec); } void tcg_gen_smax_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_smax_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_smax_vec); } void tcg_gen_umax_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_umax_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_umax_vec); } void tcg_gen_shlv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_shlv_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_shlv_vec); } void tcg_gen_shrv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_shrv_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_shrv_vec); } void tcg_gen_sarv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_sarv_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_sarv_vec); } static void do_shifts(unsigned vece, TCGv_vec r, TCGv_vec a, @@ -691,7 +700,7 @@ static void do_shifts(unsigned vece, TCGv_vec r, TCGv_vec a, } else { tcg_gen_dup_i32_vec(vece, vec_s, s); } - do_op3(vece, r, a, vec_s, opc_v); + do_op3_nofail(vece, r, a, vec_s, opc_v); tcg_temp_free_vec(vec_s); } tcg_swap_vecop_list(hold_list);