From patchwork Mon Sep 20 21:23:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Simpson X-Patchwork-Id: 1530355 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcdkim header.b=ryOIw+gP; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4HCyKS4sWZz9s5P for ; Tue, 21 Sep 2021 07:26:04 +1000 (AEST) Received: from localhost ([::1]:39658 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mSQnZ-0001Zo-0F for incoming@patchwork.ozlabs.org; Mon, 20 Sep 2021 17:26:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60252) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mSQmI-0001Wn-Bf for qemu-devel@nongnu.org; Mon, 20 Sep 2021 17:24:42 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:52025) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1mSQmF-00022D-R5 for qemu-devel@nongnu.org; Mon, 20 Sep 2021 17:24:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1632173079; x=1663709079; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=o38nCTnSTAT7LBUVjhyNPJR6Q2T2uGbyWZMupPalO2w=; b=ryOIw+gPiOMkQ4VYf+0IP2NMMp3tuX24k49pbAp5U2pVfsWKQeYZasvZ z8V1TtgEw7ivECWHsffMEf+Y2gRKVfaXFOXFnUleNRgZ4V15YlkMsPXpk o4yd+yGEI0zRO1NTdqSZqummTUpNDlPYk9xSyt9bvrLa7uaZJx65y3xLS E=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 20 Sep 2021 14:24:36 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 20 Sep 2021 14:24:36 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 91CD411C0; Mon, 20 Sep 2021 16:24:35 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v3 00/30] Hexagon HVX (target/hexagon) patch series Date: Mon, 20 Sep 2021 16:23:55 -0500 Message-Id: <1632173065-18522-1-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-Spam_score_int: -39 X-Spam_score: -4.0 X-Spam_bar: ---- X-Spam_report: (-4.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: ale@rev.ng, bcain@quicinc.com, tsimpson@quicinc.com, richard.henderson@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" This series adds support for the Hexagon Vector eXtensions (HVX) These instructions are documented here https://developer.qualcomm.com/downloads/qualcomm-hexagon-v66-hvx-programmer-s-reference-manual Hexagon HVX is a wide vector engine with 128 byte vectors. See patch 01 Hexagon HVX README for more information. *** Known checkpatch issues *** The following are known checkpatch errors in the series target/hexagon/gen_semantics.c Suspicious ; after while (0) tests/tcg/hexagon/hvx_misc.c Spaces around operator in macro invocation *** Changes in v3 *** Clean up gen_log_vreg_write - Remove has_vhist parameter Remove VRegs_updated_tmp from runtime state - Check there is exactly one tmp for vhist at TCG generation time Remove VRegs_select from runtime state Add test_max_temps test to tests/tcg/hexagon/hvx_misc.c Don't pass slot to HVX helpers *** Changes in v2 *** Address feedback from Richard Henderson - Remove zero_vector from CPUHexagonState - Remove gather_issued from CPUHexagonState - Remove is_gather_store_insn from DisasContext and CPUHexagonState - Change VStoreLog.mask to a bitmap - Change VTCMStoreLog.mask to a bitmap - Convert future_VRegs, tmp_Vregs to allocate as-needed - Don't cast away const - Remove/simplify count_leading_ones_2 - Control HVX dump with CPU_DUMP_FPU Remove HVX support from target/hexagon/gdbstub.c - Hexagon uses lldb which will require support for qRegisterInfo in the target-independent gdbstub. Will contribute this separately Convert the histogram instructions to execute at the end of packet commit - This is necessary to allocate future_VRegs as-needed Additional tests added in tests/tcg/hexagon Added helper overrides for several instructions - As a result, cleaned up utility functions Additional_cleanup - Change TCGv_ptr to not _local_ - Remove env argument from gen_commit_hvx Taylor Simpson (30): Hexagon HVX (target/hexagon) README Hexagon HVX (target/hexagon) add Hexagon Vector eXtensions (HVX) to core Hexagon HVX (target/hexagon) register names Hexagon HVX (target/hexagon) instruction attributes Hexagon HVX (target/hexagon) macros Hexagon HVX (target/hexagon) import macro definitions Hexagon HVX (target/hexagon) semantics generator Hexagon HVX (target/hexagon) semantics generator - part 2 Hexagon HVX (target/hexagon) C preprocessor for decode tree Hexagon HVX (target/hexagon) instruction utility functions Hexagon HVX (target/hexagon) helper functions Hexagon HVX (target/hexagon) TCG generation Hexagon HVX (target/hexagon) helper overrides infrastructure Hexagon HVX (target/hexagon) helper overrides for histogram instructions Hexagon HVX (target/hexagon) helper overrides - vector assign & cmov Hexagon HVX (target/hexagon) helper overrides - vector add & sub Hexagon HVX (target/hexagon) helper overrides - vector shifts Hexagon HVX (target/hexagon) helper overrides - vector max/min Hexagon HVX (target/hexagon) helper overrides - vector logical ops Hexagon HVX (target/hexagon) helper overrides - vector compares Hexagon HVX (target/hexagon) helper overrides - vector splat and abs Hexagon HVX (target/hexagon) helper overrides - vector loads Hexagon HVX (target/hexagon) helper overrides - vector stores Hexagon HVX (target/hexagon) import semantics Hexagon HVX (target/hexagon) instruction decoding Hexagon HVX (target/hexagon) import instruction encodings Hexagon HVX (tests/tcg/hexagon) vector_add_int test Hexagon HVX (tests/tcg/hexagon) hvx_misc test Hexagon HVX (tests/tcg/hexagon) scatter_gather test Hexagon HVX (tests/tcg/hexagon) histogram test target/hexagon/cpu.h | 35 +- target/hexagon/gen_tcg_hvx.h | 915 +++++++++ target/hexagon/helper.h | 14 + target/hexagon/hex_arch_types.h | 5 + target/hexagon/hex_regs.h | 1 + target/hexagon/insn.h | 3 + target/hexagon/internal.h | 3 + target/hexagon/macros.h | 22 + target/hexagon/mmvec/decode_ext_mmvec.h | 24 + target/hexagon/mmvec/macros.h | 341 ++++ target/hexagon/mmvec/mmvec.h | 83 + target/hexagon/mmvec/system_ext_mmvec.h | 29 + target/hexagon/translate.h | 61 + tests/tcg/hexagon/hvx_histogram_input.h | 717 +++++++ tests/tcg/hexagon/hvx_histogram_row.h | 24 + target/hexagon/attribs_def.h.inc | 22 + target/hexagon/cpu.c | 80 +- target/hexagon/decode.c | 28 +- target/hexagon/gen_dectree_import.c | 13 + target/hexagon/gen_semantics.c | 33 + target/hexagon/genptr.c | 191 ++ target/hexagon/mmvec/decode_ext_mmvec.c | 236 +++ target/hexagon/mmvec/system_ext_mmvec.c | 66 + target/hexagon/op_helper.c | 223 ++- target/hexagon/translate.c | 213 ++- tests/tcg/hexagon/hvx_histogram.c | 88 + tests/tcg/hexagon/hvx_misc.c | 414 ++++ tests/tcg/hexagon/scatter_gather.c | 1011 ++++++++++ tests/tcg/hexagon/vector_add_int.c | 61 + target/hexagon/README | 81 +- target/hexagon/gen_helper_funcs.py | 115 +- target/hexagon/gen_helper_protos.py | 19 +- target/hexagon/gen_tcg_funcs.py | 261 ++- target/hexagon/hex_common.py | 13 + target/hexagon/imported/allext.idef | 25 + target/hexagon/imported/allext_macros.def | 25 + target/hexagon/imported/allextenc.def | 20 + target/hexagon/imported/allidefs.def | 1 + target/hexagon/imported/encode.def | 1 + target/hexagon/imported/macros.def | 88 + target/hexagon/imported/mmvec/encode_ext.def | 794 ++++++++ target/hexagon/imported/mmvec/ext.idef | 2606 ++++++++++++++++++++++++++ target/hexagon/imported/mmvec/macros.def | 842 +++++++++ target/hexagon/meson.build | 15 +- tests/tcg/hexagon/Makefile.target | 12 + tests/tcg/hexagon/hvx_histogram_row.S | 294 +++ 46 files changed, 10123 insertions(+), 45 deletions(-) create mode 100644 target/hexagon/gen_tcg_hvx.h create mode 100644 target/hexagon/mmvec/decode_ext_mmvec.h create mode 100644 target/hexagon/mmvec/macros.h create mode 100644 target/hexagon/mmvec/mmvec.h create mode 100644 target/hexagon/mmvec/system_ext_mmvec.h create mode 100644 tests/tcg/hexagon/hvx_histogram_input.h create mode 100644 tests/tcg/hexagon/hvx_histogram_row.h create mode 100644 target/hexagon/mmvec/decode_ext_mmvec.c create mode 100644 target/hexagon/mmvec/system_ext_mmvec.c create mode 100644 tests/tcg/hexagon/hvx_histogram.c create mode 100644 tests/tcg/hexagon/hvx_misc.c create mode 100644 tests/tcg/hexagon/scatter_gather.c create mode 100644 tests/tcg/hexagon/vector_add_int.c create mode 100644 target/hexagon/imported/allext.idef create mode 100644 target/hexagon/imported/allext_macros.def create mode 100644 target/hexagon/imported/allextenc.def create mode 100644 target/hexagon/imported/mmvec/encode_ext.def create mode 100644 target/hexagon/imported/mmvec/ext.idef create mode 100755 target/hexagon/imported/mmvec/macros.def create mode 100644 tests/tcg/hexagon/hvx_histogram_row.S