From patchwork Thu Dec 7 15:02:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lyut Nersisyan X-Patchwork-Id: 175192 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4840214vqy; Thu, 7 Dec 2023 07:02:53 -0800 (PST) X-Google-Smtp-Source: AGHT+IEunGRUkxzCvLFyZEIApLzDeQAOsYHtfhWmOi4jS+YWq/+1ZAeJorGyoa9Lbea964Fer65y X-Received: by 2002:ac8:7f87:0:b0:425:99af:bb31 with SMTP id z7-20020ac87f87000000b0042599afbb31mr92473qtj.62.1701961372625; Thu, 07 Dec 2023 07:02:52 -0800 (PST) Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id m24-20020ab073d8000000b007c5ad4a1355si206847uaq.212.2023.12.07.07.02.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 07:02:52 -0800 (PST) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=TXIeEPjA; arc=fail (body hash mismatch); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2D51E385E00E for ; Thu, 7 Dec 2023 15:02:52 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com [IPv6:2607:f8b0:4864:20::b2f]) by sourceware.org (Postfix) with ESMTPS id D329A385AC12 for ; Thu, 7 Dec 2023 15:02:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D329A385AC12 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D329A385AC12 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b2f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701961367; cv=none; b=jqSTF2X45w+T7y9H9krTg59Uq8wtSyjkaEWIapZPhD0YN8v2PuvL/DdtYFks5orf6k6DUY2vygnMIiH2Hon54TqIHxZRISoq57A8W963o9jnfFo1GsXgJ0AUwd+xtnZ8G4WHPEIo+HShHIIkgGgRX+fMc6TQX9MKw7oV+h8f90I= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701961367; c=relaxed/simple; bh=pqO2x92eO12CKkMGP7h2CxY76dMIrWJZSHWkvoPLOTE=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=SpR0UWxsbzo0jhh2eJ2NgEfry63oktt2qvyrFDUW2DfXwxMDAk7qG+tk1joe0g0MFY77Kr8jT/6xdm4W9sGjKLCFOQnfBfJGNdDis1IsGB49AVFUCav0jGia6gpU3iCSZwAE0IPzii712pHDngUmep+HmB6hyIa83YtR6AQmRRY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb2f.google.com with SMTP id 3f1490d57ef6-db8892a5f96so1089910276.2 for ; Thu, 07 Dec 2023 07:02:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701961356; x=1702566156; darn=sourceware.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=u2weSwhe1Je8VlUz/BvHG+AtAHFpwhxarW6qdTLjfeE=; b=TXIeEPjADzmjUfKZTuSzD8HtuMT7pLooBKhhR67QUJq7Nui+r58Bty5Lw7PQ1hmEhX U0s+7CA4KGrgho21F0/HycQQIQVpkWfFFKbs13kuPyfaft0U7dbFg1AaR4/jBm9/fJ12 RsX8nwlgAm/WnxrO7QBoqTNAH9BEeaspZIjasaXCc/akiC66UQQ1ch11xI+huLJfm3Mx Qag8+OO7qHw3clk4/Z6KhZv/DUFZ79Fv3UsOYNXz04N1hVXUYRL6jQLhO++wce2f29lC +mNfOun7+cHkmUfrg3f1Uaeegit/s5UI0bN5DsyTJdWlNtpSw/qURb5uiRZQkGOBiYwQ Z7Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701961356; x=1702566156; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=u2weSwhe1Je8VlUz/BvHG+AtAHFpwhxarW6qdTLjfeE=; b=E4+dUy/Q2Y4mc6F+uieIuIeademiOwhVRGQ9aiHzWktaU98RcoCrVQbgdDUGXnTIPV 2HSefK2X3HT0yOI0Z/qluryAYHKpEsNeYW0ikNM9svoCj72nyksJUPRdXzTjgrNfzMpq YRVd6v0XdbOAR1Gkh1EfFCe56CRLs2/qJIhFGqMhN+UiCAPoKvwJGUo6EBjkE5+cGCBV 7Gw78I08gsdSVE7h/wM0sTMD1xJsOVzO5xm5azetDCueAdX4lRRvXceu3pqgxoh3Rfgy S1fKKRZqEvb3XWEFLveGUw2i/atBvT60BWF8rqGMYmTp/DaZL1n2GzmyOtJsR7FMU1fC 2WAQ== X-Gm-Message-State: AOJu0Yzf24tHU/SaBrf8w/4WxMmVmJJ6nO3JSV3VXMnMWQgyojZiY7Wl dRaHUERBYnbXWd9ir9yrZmgZP7rw/3xxyOeFmb4OgR/Kfs994Q== X-Received: by 2002:a25:ce88:0:b0:db5:4b23:534 with SMTP id x130-20020a25ce88000000b00db54b230534mr2402893ybe.17.1701961355846; Thu, 07 Dec 2023 07:02:35 -0800 (PST) MIME-Version: 1.0 From: Lyut Nersisyan Date: Thu, 7 Dec 2023 19:02:24 +0400 Message-ID: Subject: [REVIEW ONLY v2] UNRATIFIED RISC-V: Add support for the 'Zimop' extension To: binutils@sourceware.org Cc: Sevak Sargsyan , jivanhakobyan9@gmail.com, Jeff Law X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784635848014782856 X-GMAIL-MSGID: 1784635848014782856 [DO NOT MERGE] Until this extension is frozen/ratified and final version number is determined, this patch should not be merged upstream. This commit uses unratified version 0.1 as in the documentation file name (instead of possible 1.0 after ratification). The 'Zimop' extension provides may be operations instructions. This commit adds instruction and extension support for this extension. This is based on the draft specification: bfd/ChangeLog: * elfxx-riscv.c (riscv_supported_std_z_ext): Add 'Zimop' to the supported list. (riscv_multi_subset_supports, riscv_multi_subset_supports_ext): Add handling for new instruction class. gas/ChangeLog: * testsuite/gas/riscv/zimop.s: New test. * testsuite/gas/riscv/zimop-32.d: Likewise. * testsuite/gas/riscv/zimop-64.d: Likewise. include/ChangeLog: * opcode/riscv-opc.h (MATCH_MOP_R_[0...31], MASK_MOP_R, MATCH_MOP_RR_[0...7], MASK_MOP_RR): New. * opcode/riscv.h (enum riscv_insn_class): Add new instruction class INSN_CLASS_ZIMOP. opcodes/ChangeLog: * riscv-opc.c (riscv_opcodes): Add instructions from the 'Zimop' extension. diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index 567631e7d96..46417dd91c9 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1268,6 +1268,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] = {"zihintpause", ISA_SPEC_CLASS_DRAFT, 2, 0, 0 }, {"zmmul", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zawrs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"zimop", ISA_SPEC_CLASS_DRAFT, 0, 1, 0 }, {"zfa", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zfh", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zfhmin", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, @@ -2430,6 +2431,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, return riscv_subset_supports (rps, "a"); case INSN_CLASS_ZAWRS: return riscv_subset_supports (rps, "zawrs"); + case INSN_CLASS_ZIMOP: + return riscv_subset_supports (rps, "zimop"); case INSN_CLASS_F: return riscv_subset_supports (rps, "f"); case INSN_CLASS_D: @@ -2648,6 +2651,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, return "a"; case INSN_CLASS_ZAWRS: return "zawrs"; + case INSN_CLASS_ZIMOP: + return "zimop"; case INSN_CLASS_F: return "f"; case INSN_CLASS_D: diff --git a/gas/testsuite/gas/riscv/zimop-32.d b/gas/testsuite/gas/riscv/zimop-32.d new file mode 100644 index 00000000000..9420a4f1f38 --- /dev/null +++ b/gas/testsuite/gas/riscv/zimop-32.d @@ -0,0 +1,12 @@ +#as: -march=rv32gc_zimop +#source: zimop.s +#objdump: -d + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+000 : +[ ]+0:[ ]+81c5c573[ ]+mop.r.0[ ]+a0,a1 +[ ]+4:[ ]+ced64573[ ]+mop.rr.7[ ]+a0,a2,a3 diff --git a/gas/testsuite/gas/riscv/zimop-64.d b/gas/testsuite/gas/riscv/zimop-64.d new file mode 100644 index 00000000000..1d6d6f9f8f3 --- /dev/null +++ b/gas/testsuite/gas/riscv/zimop-64.d @@ -0,0 +1,12 @@ +#as: -march=rv64gc_zimop +#source: zimop.s +#objdump: -d + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+000 : +[ ]+0:[ ]+81c5c573[ ]+mop.r.0[ ]+a0,a1 +[ ]+4:[ ]+ced64573[ ]+mop.rr.7[ ]+a0,a2,a3 diff --git a/gas/testsuite/gas/riscv/zimop.s b/gas/testsuite/gas/riscv/zimop.s new file mode 100644 index 00000000000..2333a56715c --- /dev/null +++ b/gas/testsuite/gas/riscv/zimop.s @@ -0,0 +1,3 @@ +target: + mop.r.0 a0, a1 + mop.rr.7 a0, a2, a3 diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index 1e417217b7d..cfe9fc7ca85 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -2320,6 +2320,49 @@ #define MASK_WRS_NTO 0xffffffff #define MATCH_WRS_STO 0x01d00073 #define MASK_WRS_STO 0xffffffff +/* Zimop instructions. */ +#define MATCH_MOP_R_0 0x81c04073 +#define MATCH_MOP_R_1 0x81d04073 +#define MATCH_MOP_R_2 0x81e04073 +#define MATCH_MOP_R_3 0x81f04073 +#define MATCH_MOP_R_4 0x85c04073 +#define MATCH_MOP_R_5 0x85d04073 +#define MATCH_MOP_R_6 0x85e04073 +#define MATCH_MOP_R_7 0x85f04073 +#define MATCH_MOP_R_8 0x89c04073 +#define MATCH_MOP_R_9 0x89d04073 +#define MATCH_MOP_R_10 0x89e04073 +#define MATCH_MOP_R_11 0x89f04073 +#define MATCH_MOP_R_12 0x8dc04073 +#define MATCH_MOP_R_13 0x8dd04073 +#define MATCH_MOP_R_14 0x8de04073 +#define MATCH_MOP_R_15 0x8df04073 +#define MATCH_MOP_R_16 0xc1c04073 +#define MATCH_MOP_R_17 0xc1d04073 +#define MATCH_MOP_R_18 0xc1e04073 +#define MATCH_MOP_R_19 0xc1f04073 +#define MATCH_MOP_R_20 0xc5c04073 +#define MATCH_MOP_R_21 0xc5d04073 +#define MATCH_MOP_R_22 0xc5e04073 +#define MATCH_MOP_R_23 0xc5f04073 +#define MATCH_MOP_R_24 0xc9c04073 +#define MATCH_MOP_R_25 0xc9d04073 +#define MATCH_MOP_R_26 0xc9e04073 +#define MATCH_MOP_R_27 0xc9f04073 +#define MATCH_MOP_R_28 0xcdc04073 +#define MATCH_MOP_R_29 0xcdd04073 +#define MATCH_MOP_R_30 0xcde04073 +#define MATCH_MOP_R_31 0xcdf04073 +#define MASK_MOP_R 0xfff0707f +#define MATCH_MOP_RR_0 0x82004073 +#define MATCH_MOP_RR_1 0x86004073 +#define MATCH_MOP_RR_2 0x8a004073 +#define MATCH_MOP_RR_3 0x8e004073 +#define MATCH_MOP_RR_4 0xc2004073 +#define MATCH_MOP_RR_5 0xc6004073 +#define MATCH_MOP_RR_6 0xca004073 +#define MATCH_MOP_RR_7 0xce004073 +#define MASK_MOP_RR 0xfe00707f /* Vendor-specific (CORE-V) Xcvmac instructions. */ #define MATCH_CV_MAC 0x9000302b #define MASK_CV_MAC 0xfe00707f diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index 25486869606..991f8097a45 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -407,6 +407,7 @@ enum riscv_insn_class INSN_CLASS_ZIHINTPAUSE, INSN_CLASS_ZMMUL, INSN_CLASS_ZAWRS, + INSN_CLASS_ZIMOP, INSN_CLASS_F_INX, INSN_CLASS_D_INX, INSN_CLASS_Q_INX, diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c index bf19978e025..041fff03202 100644 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -988,6 +988,48 @@ const struct riscv_opcode riscv_opcodes[] = {"wrs.nto", 0, INSN_CLASS_ZAWRS, "", MATCH_WRS_NTO, MASK_WRS_NTO, match_opcode, 0 }, {"wrs.sto", 0, INSN_CLASS_ZAWRS, "", MATCH_WRS_STO, MASK_WRS_STO, match_opcode, 0 }, +/* Zimop instructions. */ +{"mop.r.0", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_0, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.1", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_1, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.2", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_2, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.3", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_3, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.4", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_4, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.5", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_5, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.6", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_6, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.7", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_7, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.8", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_8, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.9", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_9, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.10", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_10, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.11", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_11, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.12", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_12, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.13", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_13, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.14", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_14, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.15", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_15, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.16", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_16, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.17", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_17, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.18", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_18, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.19", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_19, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.20", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_20, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.21", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_21, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.22", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_22, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.23", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_23, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.24", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_24, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.25", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_25, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.26", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_26, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.27", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_27, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.28", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_28, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.29", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_29, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.30", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_30, MASK_MOP_R, match_opcode, 0 }, +{"mop.r.31", 0, INSN_CLASS_ZIMOP, "d,s", MATCH_MOP_R_31, MASK_MOP_R, match_opcode, 0 }, +{"mop.rr.0", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_0, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.1", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_1, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.2", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_2, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.3", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_3, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.4", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_4, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.5", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_5, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.6", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_6, MASK_MOP_RR, match_opcode, 0 }, +{"mop.rr.7", 0, INSN_CLASS_ZIMOP, "d,s,t", MATCH_MOP_RR_7, MASK_MOP_RR, match_opcode, 0 }, + /* Zfa instructions. */ {"fli.s", 0, INSN_CLASS_ZFA, "D,Wfv", MATCH_FLI_S, MASK_FLI_S, match_opcode, 0 }, {"fli.d", 0, INSN_CLASS_D_AND_ZFA, "D,Wfv", MATCH_FLI_D, MASK_FLI_D, match_opcode, 0 },