From nobody Tue Nov 26 20:23:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1705356969; cv=none; d=zohomail.com; s=zohoarc; b=W94BLcmncNVBZbx5ki/iR3IYWogA5yucJtMd/VOD2xHPOJbY1A6g6u4nVyRHGquWRKBgr4Nd/lprHkMif1Dqvsk+f/NEk+R5aJUML4mwXyCEei+aCLD5U7QprwIpYVB2crEYCY9glxuqSQ4E949UighCwrj9CKtfZc0w2TwXwvU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1705356969; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5CQMNsqDYVJFtw0BgtE/JYHek/AJye7s+PIheMJLRNg=; b=BaPp5wir9/2N/v4868QEf5BvZRU6RPJ5MVTdFJzRIiCxkQelcLNPvO+4y8aSNUGtyyl8AyZUv7BSUAOPjepsv10f3MXLI/yb8JUjiTti975FKoqX19Hd5yfEdVuGY5C143gwHyMOxHIkDEqjaCjXCeOkKyLQM3vN2ENV+HX/lhk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1705356969451202.7605443042038; Mon, 15 Jan 2024 14:16:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rPVEO-0004nx-Ch; Mon, 15 Jan 2024 17:14:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rPVEK-0004nS-51 for qemu-devel@nongnu.org; Mon, 15 Jan 2024 17:14:52 -0500 Received: from mail-io1-xd36.google.com ([2607:f8b0:4864:20::d36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rPVEH-0003Xs-N4 for qemu-devel@nongnu.org; Mon, 15 Jan 2024 17:14:51 -0500 Received: by mail-io1-xd36.google.com with SMTP id ca18e2360f4ac-7bed8fee278so311622239f.2 for ; Mon, 15 Jan 2024 14:14:49 -0800 (PST) Received: from taylor-ubuntu.hsd1.co.comcast.net (c-73-169-12-54.hsd1.co.comcast.net. [73.169.12.54]) by smtp.gmail.com with ESMTPSA id gm25-20020a0566382b9900b0046df77733acsm2579705jab.102.2024.01.15.14.14.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 14:14:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705356888; x=1705961688; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5CQMNsqDYVJFtw0BgtE/JYHek/AJye7s+PIheMJLRNg=; b=UZBJVQocn1Ab6iIaD93+z46uszXGjZ/qfAGC6IxHgH4IYMfUWvpi4cdvOTmZqnJEI8 5ispmOJ85qZALe47x4es1i/TRftMuJWR48tbOwNBgtl/THXbzQfpqlk7oGx0VdcTBX/5 291XBlg4xruZVJelCs34r7V0qJzU11VPB2yztHKrLgdy9nREjnW2S9L74i8Es9gWXif1 dcqc9OXuM8nHWaLBdgDAFecGmhBNAteALsVIYazh239aMhNhe3y22KR8Tc+KldB8UsN0 EwTB9gI6VixVAJ9dK+SLGrBw2OZ2UiDig1ZnUKIYsGLL4x92lbTbwFLiFn8d3r9xtuUf rKfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705356888; x=1705961688; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5CQMNsqDYVJFtw0BgtE/JYHek/AJye7s+PIheMJLRNg=; b=G7eewynFpmkaf5NbLMgZ2je8/mKwVuC1EcA69/tFG2Gel57xkbeBJxTriPsWBbOEs6 fR2RTtHhhIFA7yLH1aiRTuC4bGvsdCm5DE48SU7QMQzSm3bmk6thvFRIkM8qzXObIlz+ nDuCRFZsVkCN+AFYsMx2Xd9KuEvqnifKyZPe+MHYtLzMhFDMbTZJeqE5XeNw1WipFrw9 0yRnUROQTXZiQx6INZ8/fkyi2XaZmHCQOurK5i3TvzWTomeC/2MqcwhyxeBmRy3wP8Ss Gs8XxOZwg22KWnvMIFzKDmaWJK3ZIaOtuLdJyDbdbIxTsll7Uy96mngl2W8Jf3CiWqio 6kEQ== X-Gm-Message-State: AOJu0YzRDRrnTCS1XHxNW3ie0PRrSJKhzaTVfHbpLI5VQgpz+ZUsy33V feagM7Q4A4cUMqSMGQkim296BNcNn0WAtQ== X-Google-Smtp-Source: AGHT+IH3HVN1UglGAFijUpJEz1gQda93cEFu+oyphuYJ9yVEhrTYF8Xwyw1h4ImYv5BoTrPWgMfDig== X-Received: by 2002:a5d:958d:0:b0:7bf:4e0:9c6b with SMTP id a13-20020a5d958d000000b007bf04e09c6bmr6738628ioo.35.1705356887802; Mon, 15 Jan 2024 14:14:47 -0800 (PST) From: Taylor Simpson To: qemu-devel@nongnu.org Cc: bcain@quicinc.com, quic_mathbern@quicinc.com, sidneym@quicinc.com, quic_mliebel@quicinc.com, richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com Subject: [PATCH v2 2/3] Hexagon (target/hexagon) Use QEMU decodetree (16-bit instructions) Date: Mon, 15 Jan 2024 15:14:42 -0700 Message-Id: <20240115221443.365287-3-ltaylorsimpson@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240115221443.365287-1-ltaylorsimpson@gmail.com> References: <20240115221443.365287-1-ltaylorsimpson@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::d36; envelope-from=ltaylorsimpson@gmail.com; helo=mail-io1-xd36.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1705356970341100003 Section 10.3 of the Hexagon V73 Programmer's Reference Manual A duplex is encoded as a 32-bit instruction with bits [15:14] set to 00. The sub-instructions that comprise a duplex are encoded as 13-bit fields in the duplex. Create a decoder for each subinstruction class (a, l1, l2, s1, s2). Extend gen_trans_funcs.py to handle all instructions rather than filter by instruction class. There is a g_assert_not_reached() in decode_insns() in decode.c to verify we never try to use the old decoder on 16-bit instructions. Signed-off-by: Taylor Simpson Reviewed-by: Brian Cain --- target/hexagon/decode.c | 85 +++++++++++++++++++++++++++++ target/hexagon/README | 1 + target/hexagon/gen_decodetree.py | 12 ++++- target/hexagon/gen_trans_funcs.py | 12 +---- target/hexagon/meson.build | 90 +++++++++++++++++++++++++++++++ 5 files changed, 188 insertions(+), 12 deletions(-) diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index bddad1f75e..160b23a895 100644 --- a/target/hexagon/decode.c +++ b/target/hexagon/decode.c @@ -60,6 +60,7 @@ static int decode_mapped_reg_##NAME(DisasContext *ctx, in= t x) \ } DECODE_MAPPED(R_16) DECODE_MAPPED(R_8) +DECODE_MAPPED(R__8) =20 /* Helper function for decodetree_trans_funcs_generated.c.inc */ static int shift_left(DisasContext *ctx, int x, int n, int immno) @@ -77,6 +78,13 @@ static int shift_left(DisasContext *ctx, int x, int n, i= nt immno) #include "decode_normal_generated.c.inc" #include "decode_hvx_generated.c.inc" =20 +/* Include the generated decoder for 16 bit insn */ +#include "decode_subinsn_a_generated.c.inc" +#include "decode_subinsn_l1_generated.c.inc" +#include "decode_subinsn_l2_generated.c.inc" +#include "decode_subinsn_s1_generated.c.inc" +#include "decode_subinsn_s2_generated.c.inc" + /* Include the generated helpers for the decoder */ #include "decodetree_trans_funcs_generated.c.inc" =20 @@ -790,6 +798,63 @@ decode_insns_tablewalk(Insn *insn, const DectreeTable = *table, } } =20 +/* + * Section 10.3 of the Hexagon V73 Programmer's Reference Manual + * + * A duplex is encoded as a 32-bit instruction with bits [15:14] set to 00. + * The sub-instructions that comprise a duplex are encoded as 13-bit fields + * in the duplex. + * + * Per table 10-4, the 4-bit duplex iclass is encoded in bits 31:29, 13 + */ +static uint32_t get_duplex_iclass(uint32_t encoding) +{ + uint32_t iclass =3D extract32(encoding, 13, 1); + iclass =3D deposit32(iclass, 1, 3, extract32(encoding, 29, 3)); + return iclass; +} + +/* + * Per table 10-5, the duplex ICLASS field values that specify the group of + * each sub-instruction in a duplex + * + * This table points to the decode instruction for each entry in the table + */ +typedef bool (*subinsn_decode_func)(DisasContext *ctx, uint16_t insn); +typedef struct { + subinsn_decode_func decode_slot0_subinsn; + subinsn_decode_func decode_slot1_subinsn; +} subinsn_decode_groups; + +static const subinsn_decode_groups decode_groups[16] =3D { + [0x0] =3D { decode_subinsn_l1, decode_subinsn_l1 }, + [0x1] =3D { decode_subinsn_l2, decode_subinsn_l1 }, + [0x2] =3D { decode_subinsn_l2, decode_subinsn_l2 }, + [0x3] =3D { decode_subinsn_a, decode_subinsn_a }, + [0x4] =3D { decode_subinsn_l1, decode_subinsn_a }, + [0x5] =3D { decode_subinsn_l2, decode_subinsn_a }, + [0x6] =3D { decode_subinsn_s1, decode_subinsn_a }, + [0x7] =3D { decode_subinsn_s2, decode_subinsn_a }, + [0x8] =3D { decode_subinsn_s1, decode_subinsn_l1 }, + [0x9] =3D { decode_subinsn_s1, decode_subinsn_l2 }, + [0xa] =3D { decode_subinsn_s1, decode_subinsn_s1 }, + [0xb] =3D { decode_subinsn_s2, decode_subinsn_s1 }, + [0xc] =3D { decode_subinsn_s2, decode_subinsn_l1 }, + [0xd] =3D { decode_subinsn_s2, decode_subinsn_l2 }, + [0xe] =3D { decode_subinsn_s2, decode_subinsn_s2 }, + [0xf] =3D { NULL, NULL }, /* Reserved */ +}; + +static uint16_t get_slot0_subinsn(uint32_t encoding) +{ + return extract32(encoding, 0, 13); +} + +static uint16_t get_slot1_subinsn(uint32_t encoding) +{ + return extract32(encoding, 16, 13); +} + static unsigned int decode_insns(DisasContext *ctx, Insn *insn, uint32_t encoding) { @@ -805,8 +870,28 @@ decode_insns(DisasContext *ctx, Insn *insn, uint32_t e= ncoding) table =3D &dectree_table_DECODE_ROOT_32; g_assert_not_reached(); } else { + uint32_t iclass =3D get_duplex_iclass(encoding); + unsigned int slot0_subinsn =3D get_slot0_subinsn(encoding); + unsigned int slot1_subinsn =3D get_slot1_subinsn(encoding); + subinsn_decode_func decode_slot0_subinsn =3D + decode_groups[iclass].decode_slot0_subinsn; + subinsn_decode_func decode_slot1_subinsn =3D + decode_groups[iclass].decode_slot1_subinsn; + + /* The slot1 subinsn needs to be in the packet first */ + if (decode_slot1_subinsn(ctx, slot1_subinsn)) { + insn->generate =3D opcode_genptr[insn->opcode]; + insn->iclass =3D iclass_bits(encoding); + ctx->insn =3D ++insn; + if (decode_slot0_subinsn(ctx, slot0_subinsn)) { + insn->generate =3D opcode_genptr[insn->opcode]; + insn->iclass =3D iclass_bits(encoding); + return 2; + } + } /* start with EE table - duplex instructions */ table =3D &dectree_table_DECODE_ROOT_EE; + g_assert_not_reached(); } return decode_insns_tablewalk(insn, table, encoding); } diff --git a/target/hexagon/README b/target/hexagon/README index 1b2a4d0eac..746ebec378 100644 --- a/target/hexagon/README +++ b/target/hexagon/README @@ -195,6 +195,7 @@ Step 1 is to run target/hexagon/gen_dectree_import.c to= produce Step 2 is to import iset.py into target/hexagon/gen_decodetree.py to produ= ce /target/hexagon/normal_decode_generated /target/hexagon/hvx_decode_generated + /target/hexagon/subinsn_*_decode_generated Step 3 is to process the above files with QEMU's decodetree.py to produce /target/hexagon/decode_*_generated.c.inc Step 4 is to import iset.py into target/hexagon/gen_trans_funcs.py to prod= uce diff --git a/target/hexagon/gen_decodetree.py b/target/hexagon/gen_decodetr= ee.py index 9634554142..a4fcd622c5 100755 --- a/target/hexagon/gen_decodetree.py +++ b/target/hexagon/gen_decodetree.py @@ -96,8 +96,10 @@ def skip_tag(tag, class_to_decode): ## A2_add ..................-.....---..... @A2_add ## def gen_decodetree_file(f, class_to_decode): + is_subinsn =3D class_to_decode.startswith("SUBINSN_") f.write(f"## DO NOT MODIFY - This file is generated by {sys.argv[0]}\n= \n") - f.write("%PP\t14:2\n\n") + if not is_subinsn: + f.write("%PP\t14:2\n\n") for tag in sorted(encs.keys(), key=3Diset.tags.index): if skip_tag(tag, class_to_decode): continue @@ -108,6 +110,10 @@ def gen_decodetree_file(f, class_to_decode): f"## {tag}:\t{enc_str}\n" "##\n") =20 + # The subinstructions come with a 13-bit encoding, but + # decodetree.py needs 16 bits + if is_subinsn: + enc_str =3D "---" + enc_str =20 regs =3D ordered_unique(regre.findall(iset.iset[tag]["syntax"])) imms =3D ordered_unique(immre.findall(iset.iset[tag]["syntax"])) @@ -174,7 +180,9 @@ def gen_decodetree_file(f, class_to_decode): imm_letter =3D "i" if imm_type.islower() else "I" f.write(f" {imm_type}{imm_letter}=3D%{tag}_{imm_type}{imm_lett= er}") =20 - f.write(" %PP\n") + if not is_subinsn: + f.write(" %PP") + f.write("\n") =20 # Replace the 0s and 1s with . enc_str =3D enc_str.replace("0", ".").replace("1", ".") diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_f= uncs.py index c907131009..53e844a44b 100755 --- a/target/hexagon/gen_trans_funcs.py +++ b/target/hexagon/gen_trans_funcs.py @@ -40,11 +40,6 @@ def ordered_unique(l): return sorted(set(l), key=3Dl.index) =20 =20 -def skip_tag(tag, classes): - enc_class =3D iset.iset[tag]["enc_class"] - return enc_class not in classes - - def code_fmt(txt): return textwrap.indent(textwrap.dedent(txt), " ") =20 @@ -76,12 +71,9 @@ def mark_which_imm_extended(f, tag): ## return true; ## } ## -def gen_trans_funcs(f, classes): +def gen_trans_funcs(f): f.write(f"/* DO NOT MODIFY - This file is generated by {sys.argv[0]} *= /\n\n") for tag in sorted(encs.keys(), key=3Diset.tags.index): - if skip_tag(tag, classes): - continue - regs =3D ordered_unique(regre.findall(iset.iset[tag]["syntax"])) imms =3D ordered_unique(immre.findall(iset.iset[tag]["syntax"])) =20 @@ -129,4 +121,4 @@ def gen_trans_funcs(f, classes): if __name__ =3D=3D "__main__": hex_common.read_semantics_file(sys.argv[1]) with open(sys.argv[2], "w") as f: - gen_trans_funcs(f, { "NORMAL", "EXT_mmvec" }) + gen_trans_funcs(f) diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build index 831bd5716a..1bd1ebcba1 100644 --- a/target/hexagon/meson.build +++ b/target/hexagon/meson.build @@ -154,6 +154,51 @@ hvx_decode_generated =3D custom_target( ) hexagon_ss.add(hvx_decode_generated) =20 +subinsn_a_decode_generated =3D custom_target( + 'subinsn_a_decode_generated', + output: 'subinsn_a_decode_generated', + depends: [iset_py, semantics_generated], + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files('gen_decodetree.py'), semantics_generated, 'SU= BINSN_A', '@OUTPUT@'], +) +hexagon_ss.add(subinsn_a_decode_generated) + +subinsn_l1_decode_generated =3D custom_target( + 'subinsn_l1_decode_generated', + output: 'subinsn_l1_decode_generated', + depends: [iset_py, semantics_generated], + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files('gen_decodetree.py'), semantics_generated, 'SU= BINSN_L1', '@OUTPUT@'], +) +hexagon_ss.add(subinsn_l1_decode_generated) + +subinsn_l2_decode_generated =3D custom_target( + 'subinsn_l2_decode_generated', + output: 'subinsn_l2_decode_generated', + depends: [iset_py, semantics_generated], + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files('gen_decodetree.py'), semantics_generated, 'SU= BINSN_L2', '@OUTPUT@'], +) +hexagon_ss.add(subinsn_l2_decode_generated) + +subinsn_s1_decode_generated =3D custom_target( + 'subinsn_s1_decode_generated', + output: 'subinsn_s1_decode_generated', + depends: [iset_py, semantics_generated], + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files('gen_decodetree.py'), semantics_generated, 'SU= BINSN_S1', '@OUTPUT@'], +) +hexagon_ss.add(subinsn_s1_decode_generated) + +subinsn_s2_decode_generated =3D custom_target( + 'subinsn_s2_decode_generated', + output: 'subinsn_s2_decode_generated', + depends: [iset_py, semantics_generated], + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files('gen_decodetree.py'), semantics_generated, 'SU= BINSN_S2', '@OUTPUT@'], +) +hexagon_ss.add(subinsn_s2_decode_generated) + # # Run the QEMU decodetree.py script to produce the instruction decoder # @@ -176,6 +221,51 @@ decode_hvx_generated =3D custom_target( ) hexagon_ss.add(decode_hvx_generated) =20 +decode_subinsn_a_generated =3D custom_target( + 'decode_subinsn_a_generated.c.inc', + output: 'decode_subinsn_a_generated.c.inc', + input: subinsn_a_decode_generated, + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files(decodetree_py), subinsn_a_decode_generated, ['= --static-decode=3Ddecode_subinsn_a', '--insnwidth=3D16'], '-o', '@OUTPUT@'], +) +hexagon_ss.add(decode_subinsn_a_generated) + +decode_subinsn_l1_generated =3D custom_target( + 'decode_subinsn_l1_generated.c.inc', + output: 'decode_subinsn_l1_generated.c.inc', + input: subinsn_l1_decode_generated, + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files(decodetree_py), subinsn_l1_decode_generated, [= '--static-decode=3Ddecode_subinsn_l1', '--insnwidth=3D16'], '-o', '@OUTPUT@= '], +) +hexagon_ss.add(decode_subinsn_l1_generated) + +decode_subinsn_l2_generated =3D custom_target( + 'decode_subinsn_l2_generated.c.inc', + output: 'decode_subinsn_l2_generated.c.inc', + input: subinsn_l2_decode_generated, + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files(decodetree_py), subinsn_l2_decode_generated, [= '--static-decode=3Ddecode_subinsn_l2', '--insnwidth=3D16'], '-o', '@OUTPUT@= '], +) +hexagon_ss.add(decode_subinsn_l2_generated) + +decode_subinsn_s1_generated =3D custom_target( + 'decode_subinsn_s1_generated.c.inc', + output: 'decode_subinsn_s1_generated.c.inc', + input: subinsn_s1_decode_generated, + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files(decodetree_py), subinsn_s1_decode_generated, [= '--static-decode=3Ddecode_subinsn_s1', '--insnwidth=3D16'], '-o', '@OUTPUT@= '], +) +hexagon_ss.add(decode_subinsn_s1_generated) + +decode_subinsn_s2_generated =3D custom_target( + 'decode_subinsn_s2_generated.c.inc', + output: 'decode_subinsn_s2_generated.c.inc', + input: subinsn_s2_decode_generated, + env: {'PYTHONPATH': meson.current_build_dir()}, + command: [python, files(decodetree_py), subinsn_s2_decode_generated, [= '--static-decode=3Ddecode_subinsn_s2', '--insnwidth=3D16'], '-o', '@OUTPUT@= '], +) +hexagon_ss.add(decode_subinsn_s2_generated) + # # Generate the trans_* functions that the decoder will use # --=20 2.34.1