Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2215703/?format=api
{ "id": 2215703, "url": "http://patchwork.ozlabs.org/api/patches/2215703/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/387794d9-199a-4373-97be-5e70e772e014@hygon.cn/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<387794d9-199a-4373-97be-5e70e772e014@hygon.cn>", "list_archive_url": null, "date": "2026-03-25T06:17:14", "name": "i386: Support HYGON c86-4g series processors", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "67f25744f7f7285b8b2ad3b820a178ae1611ab56", "submitter": { "id": 92962, "url": "http://patchwork.ozlabs.org/api/people/92962/?format=api", "name": "Kewen Lin", "email": "linkewen@hygon.cn" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/387794d9-199a-4373-97be-5e70e772e014@hygon.cn/mbox/", "series": [ { "id": 497383, "url": "http://patchwork.ozlabs.org/api/series/497383/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=497383", "date": "2026-03-25T06:17:14", "name": "i386: Support HYGON c86-4g series processors", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497383/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2215703/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2215703/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=hygon.cn", "sourceware.org; spf=pass smtp.mailfrom=hygon.cn", "server2.sourceware.org;\n arc=none smtp.remote-ip=101.204.27.37" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fgcDC0l6sz1xy3\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 17:18:33 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id D649D4BB58A4\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 06:18:31 +0000 (GMT)", "from mailgw1.hygon.cn (unknown [101.204.27.37])\n by sourceware.org (Postfix) with ESMTP id 234BF4BAE7DD\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 06:17:20 +0000 (GMT)", "from maildlp1.hygon.cn (unknown [127.0.0.1])\n by mailgw1.hygon.cn (Postfix) with ESMTP id 4fgcBh2QB5zrfWC;\n Wed, 25 Mar 2026 14:17:16 +0800 (CST)", "from maildlp1.hygon.cn (unknown [172.23.18.60])\n by mailgw1.hygon.cn (Postfix) with ESMTP id 4fgcBf07V3zv6n3;\n Wed, 25 Mar 2026 14:17:14 +0800 (CST)", "from cncheex04.Hygon.cn (unknown [172.23.18.114])\n by maildlp1.hygon.cn (Postfix) with ESMTPS id C18017515;\n Wed, 25 Mar 2026 14:17:08 +0800 (CST)", "from cncheex04.Hygon.cn (172.23.18.114) by cncheex04.Hygon.cn\n (172.23.18.114) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Wed, 25 Mar\n 2026 14:17:14 +0800", "from cncheex04.Hygon.cn ([fe80::1b6f:6c58:58a4:430d]) by\n cncheex04.Hygon.cn ([fe80::1b6f:6c58:58a4:430d%10]) with mapi id\n 15.02.1544.036; Wed, 25 Mar 2026 14:17:14 +0800" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org D649D4BB58A4", "OpenDKIM Filter v2.11.0 sourceware.org 234BF4BAE7DD" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 234BF4BAE7DD", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 234BF4BAE7DD", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774419442; cv=none;\n b=vuy58pBok7KJnW++e1PJN//BisryZ6ltR+A12NBOFgELD+PWoLrjhr0P110el9J5phEcQpx5B9TE++8Fdw3YK3TLibB1Za3q9AYsGiaRrS0bOnRCFJqaIAjZsCOKgQReGZWO9XYP8jjmm7/QUbwZZX1h65xoGlORxpVQvfBdTac=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774419442; c=relaxed/simple;\n bh=dvTy6DVfx4wLTl2U+bSVY/MKWERdUcLqI4sfcRP8+ww=;\n h=From:To:Subject:Date:Message-ID:MIME-Version;\n b=i2A+txxROfpeejybeoAvlXgasZpghQM7uQGV50V6cHVZrFEzqgck2M9fRpFJFrJLnOk/sQEoMXnMIsd2sZsiR3lP9dLws8Cer4d6uYfH+6vUbhVhNHUBDiWNmKOwF4GTKk9OKe2W9bupnvStTCiltemh2vFfn1MOobHqzVAiYrU=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "From": "Kewen Lin <linkewen@hygon.cn>", "To": "\"gcc-patches@gcc.gnu.org\" <gcc-patches@gcc.gnu.org>", "CC": "Liulxx <liulxx@hygon.cn>, Qingkuan Lai <laiqingkuan@hygon.cn>, Feng Xue\n <xuefeng@hygon.cn>, \"hubicka@ucw.cz\" <hubicka@ucw.cz>, \"ubizjak@gmail.com\"\n <ubizjak@gmail.com>, \"hongtao.liu@intel.com\" <hongtao.liu@intel.com>", "Subject": "[PATCH] i386: Support HYGON c86-4g series processors", "Thread-Topic": "[PATCH] i386: Support HYGON c86-4g series processors", "Thread-Index": "AQHcvB8F8MzZmDrqtE2CcI18SgipNw==", "Date": "Wed, 25 Mar 2026 06:17:14 +0000", "Message-ID": "<387794d9-199a-4373-97be-5e70e772e014@hygon.cn>", "Accept-Language": "zh-CN, en-US", "Content-Language": "zh-CN", "X-MS-Has-Attach": "", "X-MS-TNEF-Correlator": "", "x-originating-ip": "[172.19.23.14]", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-ID": "<DF1D0E0B454C1B4CAABE65FA14462A1C@Hygon.cn>", "Content-Transfer-Encoding": "base64", "MIME-Version": "1.0", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "Hi,\n\nThis patch enables new x86 CPU vendor HYGON ID detection\nand adds c86-4g series c86-4g-m{4,6,7} processor supports.\nWithout such support, if users use -march=native option on\nHYGON machines, they can get some old arch like core2, it\nwould be suboptimal. It also enables -m{arch,tune}=c86-4g\n-m{4,6,7} supports. Based on the hardware characteristics,\nappropriate cost models and tuning parameters are provided.\n\nNew machine description files are introduced: c86-4g.md is\nused to describe the pipeline for c86-4g-m4 and c86-4g-m6,\nwhile c86-4g-m7.md describes the pipeline for c86-4g-m7.\nTo better model some pipeline information, it introduces\nnew attrs c86_attr and c86_decode by following existing\npractice.\n\nBootstrapped and regtested on hygon c86-4g-m4 and c86-4g-m7\nmachine, as well as a cfarm x86-64 machine.\n\nIt's late stage 4 now, I guess it has to be next stage 1\nmaterials? If so, is it ok for trunk once gcc-17 stage1\nopens?\n\nBR,\nKewen\n-----\n\nFrom: Xin Liu <liulxx@hygon.cn>\nCo-authored-by: Zhaoling Bao <baozhaoling@hygon.cn>\nSigned-off-by: Xin Liu <liulxx@hygon.cn>\nSigned-off-by: Zhaoling Bao <baozhaoling@hygon.cn>\n\ngcc/ChangeLog:\n\n\t* common/config/i386/cpuinfo.h (get_hygon_cpu): Detect the specific\n\ttype of HYGON CPU and return HYGON CPU name.\n\t(cpu_indicator_init): Handle HYGON CPU.\n\t* common/config/i386/i386-common.cc (processor_names): Add HYGON\n\tC86-4G processors c86-4g-m{4,6,7}.\n\t(processor_alias_table): Add hygon, hygonfam18h and c86-4g-m{4,6,7}\n\tentries.\n\t(ARRAY_SIZE): Update as new entries added.\n\t* common/config/i386/i386-cpuinfo.h (enum processor_vendor): Add\n\tVENDOR_HYGON.\n\t(enum processor_types): Add HYGONFAM18H.\n\t(enum processor_subtypes): Add HYGONFAM18H_C86_4G_M{4,6,7}.\n\t* config.gcc: Add support for c86_4g_m{4,6,7}.\n\t* config/i386/cpuid.h (signature_HYGON_ebx): Add signature for HYGON.\n\t(signature_HYGON_ecx): Ditto.\n\t(signature_HYGON_edx): Ditto.\n\t* config/i386/driver-i386.cc (host_detect_local_cpu): Support HYGON\n\tc86-4g-m4{4,6,7} processors.\n\t* config/i386/i386-c.cc (ix86_target_macros_internal): Ditto.\n\t* config/i386/i386-options.cc (m_C86_4G_M4): New definition.\n\t(m_C86_4G_M6): Ditto.\n\t(m_C86_4G_M7): Ditto.\n\t(m_C86_4G): Ditto.\n\t(processor_cost_table): Add cost entries for c86-4g-m4{4,6,7}.\n\t* config/i386/i386.cc (ix86_reassociation_width): Add handlings for\n\tPROCESSOR_C86_4G_M{4,6,7}.\n\t* config/i386/i386.h (enum processor_type): Define\n\tPROCESSOR_C86_4G_M{4,6,7}.\n\t(PTA_C86_4G_M4): New define.\n\t(PTA_C86_4G_M6): Ditto.\n\t(PTA_C86_4G_M7): Ditto.\n\t* config/i386/x86-tune-costs.h (c86_4g_m4_memcpy): New stringop_algs.\n\t(c86_4g_m4_cost): New processor_costs.\n\t(c86_4g_m6_cost): Ditto.\n\t(c86_4g_m7_cost): Ditto.\n\t* config/i386/x86-tune-sched.cc (ix86_issue_rate): Handle\n\tPROCESSOR_C86_4G_M{4,6,7}.\n\t(ix86_adjust_cost): Ditto.\n\t* config/i386/x86-tune.def (X86_TUNE_SCHEDULE): Handle m_C86_4G.\n\t(X86_TUNE_PARTIAL_REG_DEPENDENCY): Ditto.\n\t(X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY): Ditto.\n\t(X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY): Ditto.\n\t(X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Ditto.\n\t(X86_TUNE_MEMORY_MISMATCH_STALL): Ditto.\n\t(X86_TUNE_FUSE_CMP_AND_BRANCH_32): Ditto.\n\t(X86_TUNE_FUSE_CMP_AND_BRANCH_64): Ditto.\n\t(X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS): Ditto.\n\t(X86_TUNE_USE_LEAVE): Ditto.\n\t(X86_TUNE_PUSH_MEMORY): Ditto.\n\t(X86_TUNE_INTEGER_DFMODE_MOVES): Ditto.\n\t(X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Ditto.\n\t(X86_TUNE_USE_SAHF): Ditto.\n\t(X86_TUNE_USE_BT): Ditto.\n\t(X86_TUNE_AVOID_MFENCE): Ditto.\n\t(X86_TUNE_USE_FFREEP): Ditto.\n\t(X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL): Ditto.\n\t(X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL): Ditto.\n\t(X86_TUNE_SSE_TYPELESS_STORES): Ditto.\n\t(X86_TUNE_SSE_LOAD0_BY_PXOR): Ditto.\n\t(X86_TUNE_USE_GATHER_2PARTS): Ditto.\n\t(X86_TUNE_USE_GATHER_4PARTS): Ditto.\n\t(X86_TUNE_USE_GATHER_8PARTS): Ditto.\n\t(X86_TUNE_AVOID_128FMA_CHAINS): Ditto.\n\t(X86_TUNE_AVOID_256FMA_CHAINS): Ditto.\n\t(X86_TUNE_USE_RCR): Ditto.\n\t(X86_TUNE_AVX256_MOVE_BY_PIECES): Handle m_C86_4G_M{4,6}.\n\t(X86_TUNE_USE_SCATTER_2PARTS): Handle m_C86_4G_M7.\n\t(X86_TUNE_USE_SCATTER_4PARTS): Ditto.\n\t(X86_TUNE_USE_SCATTER_8PARTS): Ditto.\n\t(X86_TUNE_SSE_REDUCTION_PREFER_PSHUF): Ditto.\n\t(X86_TUNE_AVX512_SPLIT_REGS): Ditto.\n\t(X86_TUNE_AVX512_MOVE_BY_PIECES): Ditto.\n\t(X86_TUNE_AVX512_MASKED_EPILOGUES): Ditto.\n\t* doc/extend.texi: Document about hygonfam18h and c86-4g-m{4,6,7}.\n\t* doc/invoke.texi: Document about c86-4g-m{4,6,7}.\n\t* config/i386/c86-4g-m7.md: New file for c86-4g-m7 scheduling model\n\tinformation.\n\t* config/i386/c86-4g.md: New file for c86-4g-m{4,6} scheduling model\n\tinformation.\n\t* config/i386/i386.md (cpu attr): Add c86_4g_m{4,6,7}.\n\t(c86-4g.md): New include.\n\t(c86-4g-m7.md): Ditto.\n\t(*cmpi<unord>xf_i387): Set attr c86_decode.\n\t(*cmpi<unord><MODEF:mode>): Ditto.\n\t(swap<mode>): Ditto.\n\t(*swap<mode>): Ditto.\n\t(extendhisi2): Ditto.\n\t(floathi<mode>2): Ditto.\n\t(float<SWI48x:mode>xf2): Ditto.\n\t(*float<SWI48:mode><MODEF:mode>2): Ditto.\n\t(*floatdi<MODEF:mode>2_i387): Ditto.\n\t(*anddi_1_bt): Ditto.\n\t(*iordi_1_bts): Ditto.\n\t(*xordi_1_btc): Ditto.\n\t(*<btsc><mode>): Ditto.\n\t(*btr<mode>): Ditto.\n\t(*btsq_imm): Ditto.\n\t(*btrq_imm): Ditto.\n\t(*btcq_imm): Ditto.\n\t(*tzcnt<mode>_1): Ditto.\n\t(*tzcnt<mode>_1_falsedep): Ditto.\n\t(*bsf<mode>_1): Ditto.\n\t(*ctz<mode>2_falsedep): Ditto.\n\t(*ctzsi2_zext): Ditto.\n\t(*ctzsi2_zext_falsedep): Ditto.\n\t(bsr_rex64): Ditto.\n\t(bsr_rex64_1): Ditto.\n\t(bsr_rex64_1_zext): Ditto.\n\t(bsr): Ditto.\n\t(bsr_1): Ditto.\n\t(bsr_zext_1): Ditto.\n\t(*bswaphi2_movbe): Ditto.\n\t(*bswaphi2): Ditto.\n\t(bswaphisi2_lowpart): Ditto.\n\t(fpremxf4_i387): Ditto.\n\t(fprem1xf4_i387): Ditto.\n\t(<sincos>xf2): Ditto.\n\t(sincosxf3): Ditto.\n\t(fptanxf4_i387): Ditto.\n\t(atan2xf3): Ditto.\n\t(fyl2xxf3_i387): Ditto.\n\t(fyl2xp1xf3_i387): Ditto.\n\t(fxtractxf3_i387): Ditto.\n\t(*f2xm1xf2_i387): Ditto.\n\t(fscalexf4_i387): Ditto.\n\t(rintxf2): Ditto.\n\t(*movxi_internal_avx512f): Set attr c86_attr.\n\t(*movoi_internal_avx): Ditto.\n\t(*movti_internal): Ditto.\n\t(*movdi_internal): Ditto.\n\t(*movsi_internal): Ditto.\n\t(*movhi_internal): Ditto.\n\t(*movtf_internal): Ditto.\n\t(*movdf_internal): Ditto.\n\t(*movsf_internal): Ditto.\n\t(*zero_extendsidi2): Ditto.\n\t(sqrtxf2): Ditto.\n\t(<smaxmin:code><mode>3): Ditto.\n\t(*ieee_s<ieee_maxmin><mode>3): Ditto.\n\t* config/i386/mmx.md (*mmx_maskmovq): Set attr c86_decode.\n\t(*mmx_maskmovq): Ditto.\n\t(sse_movntq): Set attr c86_attr.\n\t(*mmx_blendps): Ditto.\n\t(mmx_blendvps): Ditto.\n\t(*mmx_pmaddwd): Ditto.\n\t(mmx_pblendvb_v8qi): Ditto.\n\t(mmx_pblendvb_<mode>): Ditto.\n\t(sse4_1_<code>v4qiv4hi2): Ditto.\n\t(sse4_1_<code>v2hiv2si2): Ditto.\n\t(sse4_1_<code>v2qiv2si2): Ditto.\n\t(sse4_1_<code>v2qiv2hi2): Ditto.\n\t(*mmx_pinsrd): Ditto.\n\t(*mmx_pinsrw): Ditto.\n\t(*mmx_pinsrb): Ditto.\n\t(*mmx_pextrw): Ditto.\n\t(*mmx_pextrw<mode>): Ditto.\n\t(*mmx_pextrw_zext): Ditto.\n\t(*mmx_pextrb): Ditto.\n\t(*mmx_pextrb_zext): Ditto.\n\t(*mmx_pblendw64): Ditto.\n\t(*mmx_pblendw32): Ditto.\n\t(*vec_extractv2si_1): Ditto.\n\t(*vec_extractv2si_1_zext): Ditto.\n\t(*pinsrw): Ditto.\n\t(*pinsrb): Ditto.\n\t(*pextrw): Ditto.\n\t(*pextrw<mode>): Ditto.\n\t(*pextrw_zext): Ditto.\n\t(*pextrb): Ditto.\n\t(*pextrb_zext): Ditto.\n\t(*mmx_psadbw): Ditto.\n\t* config/i386/sse.md (ktest<mode>): Set attr c86_decode.\n\t(*kortest<mode>): Ditto.\n\t(sse_cvtsi2ss<rex64namesuffix><round_name>): Ditto.\n\t(sse2_cvtsi2sd): Ditto.\n\t(sse2_maskmovdqu): Ditto.\n\t(*<sse>_dp<ssemodesuffix><avxsizesuffix>): Ditto.\n\t(*<sse4_1_avx2>_mpsadbw): Ditto.\n\t(pclmulqdq): Ditto.\n\t(<mask_codefor>conflict<mode><mask_name>): Ditto.\n\t(<avx512>_blendm<mode>): Set attr c86_attr.\n\t(sse2_movnti<mode>): Ditto.\n\t(<sse>_movnt<mode>): Ditto.\n\t(<sse2>_movnt<mode>): Ditto.\n\t(<sse>_rcp<mode>2): Ditto.\n\t(sse_vmrcpv4sf2): Ditto.\n\t(<mask_codefor>rcp14<mode><mask_name>): Ditto.\n\t(srcp14<mode>): Ditto.\n\t(srcp14<mode>_mask): Ditto.\n\t(<sse>_sqrt<mode>2<mask_name><round_name>): Ditto.\n\t(<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>): Ditto.\n\t(*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>): Ditto.\n\t(<mask_codefor>rsqrt14<mode><mask_name>): Ditto.\n\t(rsqrt14<mode>): Ditto.\n\t(rsqrt14_<mode>_mask\"): Ditto.\n\t(*<code><mode>3<mask_name><round_saeonly_name>): Ditto.\n\t(ieee_<ieee_maxmin><mode>3<mask_name><round_saeonly_name>): Ditto.\n\t(*<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>):\n\tDitto.\n\t(<sse>_ieee_vm<ieee_maxmin><mode>3<mask_scalar_name>\n\t<round_saeonly_scalar_name>): Ditto.\n\t(*ieee_<ieee_maxmin><mode>3): Ditto.\n\t(avx_h<insn>v4df3): Ditto.\n\t(*sse3_haddv2df3): Ditto.\n\t(sse3_hsubv2df3): Ditto.\n\t(*sse3_haddv2df3_low): Ditto.\n\t(*sse3_hsubv2df3_low): Ditto.\n\t(avx_h<insn>v8sf3): Ditto.\n\t(sse3_h<insn>v4sf3): Ditto.\n\t(*<mask_codefor>reducep<mode><mask_name><round_saeonly_name>): Ditto.\n\t(reduces<mode><mask_scalar_name><round_saeonly_scalar_name>): Ditto.\n\t(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Ditto.\n\t(<sse>_andnot<mode>3<mask_name>): Ditto.\n\t(*<code><mode>3<mask_name>): Ditto.\n\t(*andnot<mode>3): Ditto.\n\t(<code><mode>3): Ditto.\n\t(*<code>tf3): Ditto.\n\t(vec_set<mode>_0): Ditto.\n\t(@vec_set<mode>_0): Ditto.\n\t(*sse4_1_extractps): Ditto.\n\t(vec_extract<mode>): Ditto.\n\t(<mask_codefor><avx512>_align<mode><mask_name>): Ditto.\n\t(avx512bw_pmaddwd512<mode><mask_name>): Ditto.\n\t(*avx2_pmaddw): Ditto.\n\t(*sse2_pmaddwd): Ditto.\n\t(*avx2_<code><mode>3): Ditto.\n\t(*avx512f_<code><mode>3<mask_name>): Ditto.\n\t(*avx512bw_<code><mode>3<mask_name>): Ditto.\n\t(*sse4_1_<code><mode>3<mask_name>): Ditto.\n\t(*<code>v8hi3): Ditto.\n\t(*<code>v16qi3): Ditto.\n\t(*andnot<mode>3_mask): Ditto.\n\t(*<code><mode>3): Ditto.\n\t(<code>v1ti3): Ditto.\n\t(<sse2p4_1>_pinsr<ssemodesuffix>): Ditto.\n\t(*<extract_type>_vinsert<shuffletype><extract_suf>_0): Ditto.\n\t(<mask_codefor><extract_type>_vinsert<shuffletype><extract_suf>\n\t_1<mask_name>): Ditto.\n\t(vec_set_lo_<mode><mask_name>): Ditto.\n\t(vec_set_hi_<mode><mask_name>): Ditto.\n\t(<mask_codefor>avx512dq_shuf_<shuffletype>64x2_1<mask_name>): Ditto.\n\t(avx512f_shuf_<shuffletype>64x2_1<mask_name>): Ditto.\n\t(*avx512f_shuf_<shuffletype>64x2_1<mask_name>_1): Ditto.\n\t(avx512vl_shuf_<shuffletype>32x4_1<mask_name>): Ditto.\n\t(avx512f_shuf_<shuffletype>32x4_1<mask_name>): Ditto.\n\t(*avx512f_shuf_<shuffletype>32x4_1<mask_name>_1): Ditto.\n\t(*vec_extract<mode>): Ditto.\n\t(*vec_extract<PEXTR_MODE12:mode>_zext): Ditto.\n\t(*vec_extractv16qi_zext): Ditto.\n\t(*vec_extractv4si): Ditto.\n\t(*vec_extractv4si_zext): Ditto.\n\t(*vec_extractv2di_1): Ditto.\n\t(*vec_concatv2si_sse4_1): Ditto.\n\t(vec_concatv2di): Ditto.\n\t(*<sse2_avx2>_uavg<mode>3<mask_name>): Ditto.\n\t(*<sse2_avx2>_psadbw): Ditto.\n\t(<sse>_movmsk<ssemodesuffix><avxsizesuffix>): Ditto.\n\t(*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_<u>ext): Ditto.\n\t(<sse2_avx2>_pmovmskb): Ditto.\n\t(*<sse2_avx2>_pmovmskb_zext): Ditto.\n\t(*sse2_maskmovdqu): Ditto.\n\t(avx2_ph<plusminus_mnemonic>wv16hi3): Ditto.\n\t(ssse3_ph<plusminus_mnemonic>wv8hi3): Ditto.\n\t(ssse3_ph<plusminus_mnemonic>dv4si3): Ditto.\n\t(avx2_ph<plusminus_mnemonic>dv8si3): Ditto.\n\t(avx2_pmaddubsw256): Ditto.\n\t(avx512bw_pmaddubsw512<mode><mask_name>): Ditto.\n\t(ssse3_pmaddubsw128): Ditto.\n\t(<ssse3_avx2>_psign<mode>3): Ditto.\n\t(ssse3_psign<mode>3): Ditto.\n\t(*abs<mode>2): Ditto.\n\t(abs<mode>2_mask): Ditto.\n\t(abs<mode>2_mask): Ditto.\n\t(sse4a_movnt<mode>): Ditto.\n\t(sse4a_vmmovnt<mode>): Ditto.\n\t(<sse4_1>_blend<ssemodesuffix><avxsizesuffix>): Ditto.\n\t(<sse4_1>_blendv<ssemodesuffix><avxsizesuffix>): Ditto.\n\t(sse4_1_blendv<ssemodesuffix>): Ditto.\n\t(<vi8_sse4_1_avx2_avx512>_movntdqa): Ditto.\n\t(<sse4_1_avx2>_pblendvb): Ditto.\n\t(sse4_1_pblend<ssemodesuffix>): Ditto.\n\t(*avx2_pblend<ssemodesuffix>): Ditto.\n\t(avx2_pblendd<mode>): Ditto.\n\t(avx2_<code>v16qiv16hi2<mask_name>): Ditto.\n\t(avx512bw_<code>v32qiv32hi2<mask_name>): Ditto.\n\t(sse4_1_<code>v8qiv8hi2<mask_name>): Ditto.\n\t(*sse4_1_<code>v8qiv8hi2<mask_name>_1): Ditto.\n\t(<mask_codefor>avx512f_<code>v16qiv16si2<mask_name>): Ditto.\n\t(avx2_<code>v8qiv8si2<mask_name>): Ditto.\n\t(*avx2_<code>v8qiv8si2<mask_name>_1): Ditto.\n\t(sse4_1_<code>v4qiv4si2<mask_name>): Ditto.\n\t(*sse4_1_<code>v4qiv4si2<mask_name>_1): Ditto.\n\t(avx512f_<code>v16hiv16si2<mask_name>): Ditto.\n\t(avx2_<code>v8hiv8si2<mask_name>): Ditto.\n\t(sse4_1_<code>v4hiv4si2<mask_name>): Ditto.\n\t(*sse4_1_<code>v4hiv4si2<mask_name>_1): Ditto.\n\t(avx512f_<code>v8qiv8di2<mask_name>): Ditto.\n\t(*avx512f_<code>v8qiv8di2<mask_name>_1): Ditto.\n\t(avx2_<code>v4qiv4di2<mask_name>): Ditto.\n\t(*avx2_<code>v4qiv4di2<mask_name>_1): Ditto.\n\t(sse4_1_<code>v2qiv2di2<mask_name>): Ditto.\n\t(*sse4_1_<code>v2qiv2di2<mask_name>_1): Ditto.\n\t(avx512f_<code>v8hiv8di2<mask_name>): Ditto.\n\t(avx2_<code>v4hiv4di2<mask_name>): Ditto.\n\t(*avx2_<code>v4hiv4di2<mask_name>_1): Ditto.\n\t(sse4_1_<code>v2hiv2di2<mask_name>): Ditto.\n\t(*sse4_1_<code>v2hiv2di2<mask_name>_1): Ditto.\n\t(avx512f_<code>v8siv8di2<mask_name>): Ditto.\n\t(avx2_<code>v4siv4di2<mask_name>): Ditto.\n\t(sse4_1_<code>v2siv2di2<mask_name>): Ditto.\n\t(*sse4_1_<code>v2siv2di2<mask_name>_1): Ditto.\n\t(sse4_1_round<ssescalarmodesuffix>): Ditto.\n\t(*sse4_1_round<ssescalarmodesuffix>\"): Ditto.\n\t(sse4_2_pcmpestri): Ditto.\n\t(sse4_2_pcmpestrm): Ditto.\n\t(sse4_2_pcmpestr_cconly): Ditto.\n\t(sse4_2_pcmpistri): Ditto.\n\t(sse4_2_pcmpistrm): Ditto.\n\t(sse4_2_pcmpistr_cconly): Ditto.\n\t(xop_phadd<u>bw): Ditto.\n\t(xop_phadd<u>bd): Ditto.\n\t(xop_phadd<u>bq): Ditto.\n\t(xop_phadd<u>wd): Ditto.\n\t(xop_phadd<u>wq): Ditto.\n\t(xop_phadd<u>dq): Ditto.\n\t(xop_phsubbw): Ditto.\n\t(xop_phsubwd): Ditto.\n\t(xop_phsubdq): Ditto.\n\t(aesenc): Ditto.\n\t(aesenclast): Ditto.\n\t(aesdec): Ditto.\n\t(aesdeclast): Ditto.\n\t(aesimc): Ditto.\n\t(aeskeygenassist): Ditto.\n\t(<avx2_avx512>_permvar<mode><mask_name>): Ditto.\n\t(avx2_perm<mode>_1<mask_name>): Ditto.\n\t(<avx512>_permvar<mode><mask_name>): Ditto.\n\t(avx512f_perm<mode>_1<mask_name>): Ditto.\n\t(<mask_codefor>avx512f_broadcast<mode><mask_name>): Ditto.\n\t(avx_vbroadcastf128_<mode>): Ditto.\n\t(<mask_codefor>avx512vl_broadcast<mode><mask_name>_1): Ditto.\n\t(<mask_codefor>avx512dq_broadcast<mode><mask_name>_1): Ditto.\n\t(*<avx512>_vpermi2var<mode>3_mask): Ditto.\n\t(<avx512>_vpermt2var<mode>3<sd_maskz_name>): Ditto.\n\t(<avx512>_vpermt2var<mode>3_mask): Ditto.\n\t(*avx_vperm2f128<mode>_nozero): Ditto.\n\t(vec_set_lo_<mode><mask_name>): Ditto.\n\t(vec_set_hi_<mode><mask_name>): Ditto.\n\t(vec_set_lo_<mode>): Ditto.\n\t(vec_set_hi_<mode>): Ditto.\n\t(vec_set_lo_v32qi): Ditto.\n\t(<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>): Ditto.\n\t(<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>): Ditto.\n\t(avx_vec_concat<mode>): Ditto.\n\t(<avx512>_compress<mode>_mask): Ditto.\n\t(compress<mode>_mask): Ditto.\n\t(<avx512>_compressstore<mode>_mask): Ditto.\n\t(compressstore<mode>_mask): Ditto.\n\t(expand<mode>_mask): Ditto.\n\t(<mask_codefor>avx512bw_dbpsadbw<mode><mask_name>): Ditto.\n\t(clz<mode>2<mask_name>): Ditto.\n\t(vpmadd52<vpmadd52type>v8di): Ditto.\n\t(vpmadd52<vpmadd52type><mode>): Ditto.\n\t(vpmadd52<vpmadd52type><mode>_maskz_1): Ditto.\n\t(vpmadd52<vpmadd52type><mode>_mask): Ditto.\n\t(vaesdec_<mode>): Ditto.\n\t(vaesdeclast_<mode>): Ditto.\n\t(vaesenc_<mode>): Ditto.\n\t(vaesenclast_<mode>): Ditto.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.target/i386/builtin_target.c: Add handling for HYGON CPUs by\n\tvalidating the vendor and invoking HYGON-specific CPU detection.\n\t* gcc.target/i386/funcspec-56.inc: Test function target attribute on\n\t{arch,tune}=c86-4g-m{4,6,7}.\n\t* g++.target/i386/mv33.C: New test.\n---\n gcc/common/config/i386/cpuinfo.h | 57 +\n gcc/common/config/i386/i386-common.cc | 20 +-\n gcc/common/config/i386/i386-cpuinfo.h | 5 +\n gcc/config.gcc | 26 +-\n gcc/config/i386/c86-4g-m7.md | 1996 +++++++++++++++++\n gcc/config/i386/c86-4g.md | 1204 ++++++++++\n gcc/config/i386/cpuid.h | 4 +\n gcc/config/i386/driver-i386.cc | 19 +\n gcc/config/i386/i386-c.cc | 22 +-\n gcc/config/i386/i386-options.cc | 9 +-\n gcc/config/i386/i386.cc | 5 +-\n gcc/config/i386/i386.h | 18 +\n gcc/config/i386/i386.md | 95 +-\n gcc/config/i386/mmx.md | 31 +\n gcc/config/i386/sse.md | 241 ++\n gcc/config/i386/x86-tune-costs.h | 300 +++\n gcc/config/i386/x86-tune-sched.cc | 7 +\n gcc/config/i386/x86-tune.def | 86 +-\n gcc/doc/extend.texi | 12 +\n gcc/doc/invoke.texi | 21 +\n gcc/testsuite/g++.target/i386/mv33.C | 42 +\n .../gcc.target/i386/builtin_target.c | 6 +\n gcc/testsuite/gcc.target/i386/funcspec-56.inc | 6 +\n 23 files changed, 4187 insertions(+), 45 deletions(-)\n create mode 100644 gcc/config/i386/c86-4g-m7.md\n create mode 100644 gcc/config/i386/c86-4g.md\n create mode 100644 gcc/testsuite/g++.target/i386/mv33.C", "diff": "diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h\r\nindex 583e0acf8..62e9210b0 100644\r\n--- a/gcc/common/config/i386/cpuinfo.h\r\n+++ b/gcc/common/config/i386/cpuinfo.h\r\n@@ -349,6 +349,48 @@ get_amd_cpu (struct __processor_model *cpu_model,\r\n return cpu;\r\n }\r\n \r\n+/* Get the specific type of HYGON CPU and return HYGON CPU name. Return\r\n+ NULL for unknown HYGON CPU. */\r\n+\r\n+static inline const char *\r\n+get_hygon_cpu (struct __processor_model *cpu_model,\r\n+\t struct __processor_model2 *cpu_model2,\r\n+\t unsigned int *cpu_features2 __attribute__((unused)))\r\n+{\r\n+ const char *cpu = NULL;\r\n+ unsigned int family = cpu_model2->__cpu_family;\r\n+ unsigned int model = cpu_model2->__cpu_model;\r\n+\r\n+ switch (family)\r\n+ {\r\n+ case 0x18:\r\n+ cpu_model->__cpu_type = HYGONFAM18H;\r\n+ if (model == 0x4)\r\n+\t{\r\n+\t cpu = \"c86-4g-m4\";\r\n+\t CHECK___builtin_cpu_is (\"c86-4g-m4\");\r\n+\t cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M4;\r\n+\t}\r\n+ else if (model == 0x6)\r\n+\t{\r\n+\t cpu = \"c86-4g-m6\";\r\n+\t CHECK___builtin_cpu_is (\"c86-4g-m6\");\r\n+\t cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M6;\r\n+\t}\r\n+ else if (model == 0x7)\r\n+\t{\r\n+\t cpu = \"c86-4g-m7\";\r\n+\t CHECK___builtin_cpu_is (\"c86-4g-m7\");\r\n+\t cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M7;\r\n+\t}\r\n+ break;\r\n+ default:\r\n+ break;\r\n+ }\r\n+\r\n+ return cpu;\r\n+}\r\n+\r\n /* Get the specific type of Intel CPU and return Intel CPU name. Return\r\n NULL for unknown Intel CPU. */\r\n \r\n@@ -1259,6 +1301,21 @@ cpu_indicator_init (struct __processor_model *cpu_model,\r\n cpu_model->__cpu_vendor = VENDOR_CYRIX;\r\n else if (vendor == signature_NSC_ebx)\r\n cpu_model->__cpu_vendor = VENDOR_NSC;\r\n+ else if (vendor == signature_HYGON_ebx)\r\n+ {\r\n+ /* Adjust model and family for HYGON CPUS. */\r\n+ if (family == 0x0f)\r\n+\t{\r\n+\t family += extended_family;\r\n+\t model += extended_model;\r\n+\t}\r\n+ cpu_model2->__cpu_family = family;\r\n+ cpu_model2->__cpu_model = model;\r\n+\r\n+ /* Get CPU type. */\r\n+ get_hygon_cpu (cpu_model, cpu_model2, cpu_features2);\r\n+ cpu_model->__cpu_vendor = VENDOR_HYGON;\r\n+ }\r\n else\r\n cpu_model->__cpu_vendor = VENDOR_OTHER;\r\n \r\ndiff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc\r\nindex 4b924e09b..1dd9819c3 100644\r\n--- a/gcc/common/config/i386/i386-common.cc\r\n+++ b/gcc/common/config/i386/i386-common.cc\r\n@@ -2205,7 +2205,10 @@ const char *const processor_names[] =\r\n \"znver3\",\r\n \"znver4\",\r\n \"znver5\",\r\n- \"znver6\"\r\n+ \"znver6\",\r\n+ \"c86-4g-m4\",\r\n+ \"c86-4g-m6\",\r\n+ \"c86-4g-m7\"\r\n };\r\n \r\n /* Guarantee that the array is aligned with enum processor_type. */\r\n@@ -2473,6 +2476,15 @@ const pta processor_alias_table[] =\r\n {\"btver2\", PROCESSOR_BTVER2, CPU_BTVER2,\r\n PTA_BTVER2,\r\n M_CPU_TYPE (AMD_BTVER2), P_PROC_BMI},\r\n+ {\"c86-4g-m4\", PROCESSOR_C86_4G_M4, CPU_C86_4G_M4,\r\n+ PTA_C86_4G_M4,\r\n+ M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M4), P_PROC_AVX2},\r\n+ {\"c86-4g-m6\", PROCESSOR_C86_4G_M6, CPU_C86_4G_M6,\r\n+ PTA_C86_4G_M6,\r\n+ M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M6), P_PROC_AVX2},\r\n+ {\"c86-4g-m7\", PROCESSOR_C86_4G_M7, CPU_C86_4G_M7,\r\n+ PTA_C86_4G_M7,\r\n+ M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M7), P_PROC_AVX512F},\r\n \r\n {\"generic\", PROCESSOR_GENERIC, CPU_GENERIC,\r\n PTA_64BIT\r\n@@ -2493,10 +2505,14 @@ const pta processor_alias_table[] =\r\n M_CPU_SUBTYPE (AMDFAM10H_SHANGHAI), P_NONE},\r\n {\"istanbul\", PROCESSOR_GENERIC, CPU_GENERIC, 0,\r\n M_CPU_SUBTYPE (AMDFAM10H_ISTANBUL), P_NONE},\r\n+ {\"hygon\", PROCESSOR_GENERIC, CPU_GENERIC, 0,\r\n+ M_VENDOR (VENDOR_HYGON), P_NONE},\r\n+ {\"hygonfam18h\", PROCESSOR_GENERIC, CPU_GENERIC, 0,\r\n+ M_CPU_TYPE (HYGONFAM18H), P_NONE},\r\n };\r\n \r\n /* NB: processor_alias_table stops at the \"generic\" entry. */\r\n-unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 7;\r\n+unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 9;\r\n unsigned int const num_arch_names = ARRAY_SIZE (processor_alias_table);\r\n \r\n /* Provide valid option values for -march and -mtune options. */\r\ndiff --git a/gcc/common/config/i386/i386-cpuinfo.h b/gcc/common/config/i386/i386-cpuinfo.h\r\nindex 562942467..5407d9d9e 100644\r\n--- a/gcc/common/config/i386/i386-cpuinfo.h\r\n+++ b/gcc/common/config/i386/i386-cpuinfo.h\r\n@@ -30,6 +30,7 @@ enum processor_vendor\r\n VENDOR_INTEL = 1,\r\n VENDOR_AMD,\r\n VENDOR_ZHAOXIN,\r\n+ VENDOR_HYGON,\r\n VENDOR_OTHER,\r\n VENDOR_CENTAUR,\r\n VENDOR_CYRIX,\r\n@@ -62,6 +63,7 @@ enum processor_types\r\n INTEL_GRANDRIDGE,\r\n INTEL_CLEARWATERFOREST,\r\n AMDFAM1AH,\r\n+ HYGONFAM18H,\r\n CPU_TYPE_MAX,\r\n BUILTIN_CPU_TYPE_MAX = CPU_TYPE_MAX\r\n };\r\n@@ -108,6 +110,9 @@ enum processor_subtypes\r\n INTEL_COREI7_DIAMONDRAPIDS,\r\n INTEL_COREI7_NOVALAKE,\r\n AMDFAM1AH_ZNVER6,\r\n+ HYGONFAM18H_C86_4G_M4,\r\n+ HYGONFAM18H_C86_4G_M6,\r\n+ HYGONFAM18H_C86_4G_M7,\r\n CPU_SUBTYPE_MAX\r\n };\r\n \r\ndiff --git a/gcc/config.gcc b/gcc/config.gcc\r\nindex 35958b170..5a672f85f 100644\r\n--- a/gcc/config.gcc\r\n+++ b/gcc/config.gcc\r\n@@ -766,7 +766,7 @@ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \\\r\n nano-x2 eden-x4 nano-x4 lujiazui yongfeng shijidadao x86-64 x86-64-v2 \\\r\n x86-64-v3 x86-64-v4 sierraforest graniterapids graniterapids-d grandridge \\\r\n arrowlake arrowlake-s clearwaterforest pantherlake diamondrapids novalake \\\r\n-native\"\r\n+c86-4g-m4 c86-4g-m6 c86-4g-m7 native\"\r\n \r\n # Additional x86 processors supported by --with-cpu=. Each processor\r\n # MUST be separated by exactly one space.\r\n@@ -4004,6 +4004,18 @@ case ${target} in\r\n \tcpu=pentiumpro\r\n \tarch_without_sse2=yes\r\n \t;;\r\n+ c86_4g_m4-*)\r\n+\tarch=c86-4g-m4\r\n+\tcpu=c86-4g-m4\r\n+\t;;\r\n+ c86_4g_m6-*)\r\n+\tarch=c86-4g-m6\r\n+\tcpu=c86-4g-m6\r\n+\t;;\r\n+ c86_4g_m7-*)\r\n+\tarch=c86-4g-m7\r\n+\tcpu=c86-4g-m7\r\n+\t;;\r\n *)\r\n \tarch=pentiumpro\r\n \tcpu=generic\r\n@@ -4106,6 +4118,18 @@ case ${target} in\r\n \tarch=corei7\r\n \tcpu=corei7\r\n \t;;\r\n+ c86_4g_m4-*)\r\n+\tarch=c86-4g-m4\r\n+\tcpu=c86-4g-m4\r\n+\t;;\r\n+ c86_4g_m6-*)\r\n+\tarch=c86-4g-m6\r\n+\tcpu=c86-4g-m6\r\n+\t;;\r\n+ c86_4g_m7-*)\r\n+\tarch=c86-4g-m7\r\n+\tcpu=c86-4g-m7\r\n+\t;;\r\n *)\r\n \tarch=x86-64\r\n \tcpu=generic\r\ndiff --git a/gcc/config/i386/c86-4g-m7.md b/gcc/config/i386/c86-4g-m7.md\r\nnew file mode 100644\r\nindex 000000000..7eda123ac\r\n--- /dev/null\r\n+++ b/gcc/config/i386/c86-4g-m7.md\r\n@@ -0,0 +1,1996 @@\r\n+;; Copyright (C) 2026 Free Software Foundation, Inc.\r\n+;;\r\n+;; This file is part of GCC.\r\n+;;\r\n+;; GCC is free software; you can redistribute it and/or modify\r\n+;; it under the terms of the GNU General Public License as published by\r\n+;; the Free Software Foundation; either version 3, or (at your option)\r\n+;; any later version.\r\n+;;\r\n+;; GCC is distributed in the hope that it will be useful,\r\n+;; but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n+;; GNU General Public License for more details.\r\n+;;\r\n+;; You should have received a copy of the GNU General Public License\r\n+;; along with GCC; see the file COPYING3. If not see\r\n+;; <http://www.gnu.org/licenses/>.\r\n+;;\r\n+\r\n+;; HYGON c86-4g-m7 Scheduling\r\n+;; Modeling automatons for decoders, integer execution pipes,\r\n+;; AGU pipes, branch, floating point execution and fp store units.\r\n+(define_automaton \"c86_4g_m7, c86_4g_m7_ieu, c86_4g_m7_agu, c86_4g_m7_fpu\")\r\n+\r\n+;; Decoders unit has 4 decoders and all of them can decode fast path\r\n+;; and vector type instructions.\r\n+(define_cpu_unit \"c86-4g-m7-decode0\" \"c86_4g_m7\")\r\n+(define_cpu_unit \"c86-4g-m7-decode1\" \"c86_4g_m7\")\r\n+(define_cpu_unit \"c86-4g-m7-decode2\" \"c86_4g_m7\")\r\n+(define_cpu_unit \"c86-4g-m7-decode3\" \"c86_4g_m7\")\r\n+\r\n+;; Currently blocking all decoders for vector path instructions as\r\n+;; they are dispatched separetely as microcode sequence.\r\n+(define_reservation \"c86-4g-m7-vector\" \"c86-4g-m7-decode0+c86-4g-m7-decode1+c86-4g-m7-decode2+c86-4g-m7-decode3\")\r\n+\r\n+;; Direct instructions can be issued to any of the four decoders.\r\n+(define_reservation \"c86-4g-m7-direct\" \"c86-4g-m7-decode0|c86-4g-m7-decode1|c86-4g-m7-decode2|c86-4g-m7-decode3\")\r\n+\r\n+;; Fix me: Need to revisit this later to simulate fast path double behavior.\r\n+(define_reservation \"c86-4g-m7-double\" \"c86-4g-m7-direct\")\r\n+\r\n+;; Integer unit 4 ALU pipes.\r\n+(define_cpu_unit \"c86-4g-m7-ieu0\" \"c86_4g_m7_ieu\")\r\n+(define_cpu_unit \"c86-4g-m7-ieu1\" \"c86_4g_m7_ieu\")\r\n+(define_cpu_unit \"c86-4g-m7-ieu2\" \"c86_4g_m7_ieu\")\r\n+(define_cpu_unit \"c86-4g-m7-ieu3\" \"c86_4g_m7_ieu\")\r\n+\r\n+;; c86-4g-m7 has an additional branch unit.\r\n+(define_cpu_unit \"c86-4g-m7-bru0\" \"c86_4g_m7_ieu\")\r\n+(define_reservation \"c86-4g-m7-ieu\" \"c86-4g-m7-ieu0|c86-4g-m7-ieu1|c86-4g-m7-ieu2|c86-4g-m7-ieu3\")\r\n+\r\n+;; 3 AGU pipes in c86-4g-m7\r\n+(define_cpu_unit \"c86-4g-m7-agu0\" \"c86_4g_m7_agu\")\r\n+(define_cpu_unit \"c86-4g-m7-agu1\" \"c86_4g_m7_agu\")\r\n+(define_cpu_unit \"c86-4g-m7-agu2\" \"c86_4g_m7_agu\")\r\n+(define_reservation \"c86-4g-m7-agu-reserve\" \"c86-4g-m7-agu0|c86-4g-m7-agu1|c86-4g-m7-agu2\")\r\n+\r\n+;; Load is 4 cycles. We do not model reservation of load unit.\r\n+(define_reservation \"c86-4g-m7-load\" \"c86-4g-m7-agu-reserve\")\r\n+(define_reservation \"c86-4g-m7-store\" \"c86-4g-m7-agu-reserve\")\r\n+\r\n+;; vectorpath (microcoded) instructions are single issue instructions.\r\n+;; So, they occupy all the integer units.\r\n+(define_reservation \"c86-4g-m7-ivector\" \"c86-4g-m7-ieu0+c86-4g-m7-ieu1\r\n+\t\t\t\t +c86-4g-m7-ieu2+c86-4g-m7-ieu3+c86-4g-m7-bru0\r\n+\t\t\t\t +c86-4g-m7-agu0+c86-4g-m7-agu1+c86-4g-m7-agu2\")\r\n+\r\n+;; Floating point unit 4 FP pipes.\r\n+(define_cpu_unit \"c86-4g-m7-fpu0\" \"c86_4g_m7_fpu\")\r\n+(define_cpu_unit \"c86-4g-m7-fpu1\" \"c86_4g_m7_fpu\")\r\n+(define_cpu_unit \"c86-4g-m7-fpu2\" \"c86_4g_m7_fpu\")\r\n+(define_cpu_unit \"c86-4g-m7-fpu3\" \"c86_4g_m7_fpu\")\r\n+(define_reservation \"c86-4g-m7-fpu\" \"c86-4g-m7-fpu0|c86-4g-m7-fpu1|c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+(define_reservation \"c86-4g-m7-fpu_0_2\" \"c86-4g-m7-fpu0|c86-4g-m7-fpu2\")\r\n+(define_reservation \"c86-4g-m7-fpu_1_3\" \"c86-4g-m7-fpu1|c86-4g-m7-fpu3\")\r\n+(define_reservation \"c86-4g-m7-fpu_0_1\" \"c86-4g-m7-fpu0|c86-4g-m7-fpu1\")\r\n+(define_reservation \"c86-4g-m7-fpu_0_2x2\" \"c86-4g-m7-fpu0*2|c86-4g-m7-fpu2*2\")\r\n+(define_reservation \"c86-4g-m7-fpu_0_2x4\" \"c86-4g-m7-fpu0*4|c86-4g-m7-fpu2*4\")\r\n+(define_reservation \"c86-4g-m7-fvector\" \"c86-4g-m7-fpu0+c86-4g-m7-fpu1\r\n+\t\t\t\t +c86-4g-m7-fpu2+c86-4g-m7-fpu3\r\n+\t\t\t\t +c86-4g-m7-agu0+c86-4g-m7-agu1+c86-4g-m7-agu2\")\r\n+\r\n+;; IMOV/IMOVX\r\n+(define_insn_reservation \"c86_4g_m7_imov_xchg\" 1\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imov\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_imov_xchg_load\" 5\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imov\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_imovx_cwde\" 2\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imovx\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_imov\" 1\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imov,imovx\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t \"c86-4g-m7-direct,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_imov_load\" 5\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imov,imovx\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"!vector\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_imov_store\" 1\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imov,imovx\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"!vector\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-ieu\")\r\n+\r\n+;; PUSH\r\n+(define_insn_reservation \"c86_4g_m7_push\" 1\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"push,sse\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_push_mem\" 5\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"push\")\r\n+\t\t\t\t (eq_attr \"memory\" \"both\")))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-store\")\r\n+\r\n+;; POP\r\n+(define_insn_reservation \"c86_4g_m7_pop\" 4\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"pop\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_pop_mem\" 5\r\n+\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t (and (eq_attr \"type\" \"pop\")\r\n+\t\t (eq_attr \"memory\" \"both\")))\r\n+\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store\")\r\n+\r\n+;; IMUL/IMULX\r\n+(define_insn_reservation \"c86_4g_m7_imul\" 3\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imul,imulx\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_imul_load\" 7\r\n+\t\t\t(and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"imul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"!none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu1\")\r\n+\r\n+;; IDIV\r\n+(define_insn_reservation \"c86_4g_m7_idiv_DI\" 41\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"DI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu3*41\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_SI\" 25\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu3*25\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_HI\" 17\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"HI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu3*17\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_QI\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"QI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu3*15\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_DI_load\" 45\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"DI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3*41\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_SI_load\" 29\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3*25\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_HI_load\" 21\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"HI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3*17\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_idiv_QI_load\" 19\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"QI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu3*15\")\r\n+\r\n+;; Integer/genaral Instructions\r\n+(define_insn_reservation \"c86_4g_m7_insn\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,negnot,rotate1,ishift1,test,incdec,icmp,\r\n+\t\t\t\t\t\t rotate,rotatex,ishift,ishiftx,icmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none,unknown\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_insn_load\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,incdec,icmp,test,ishift,\r\n+\t\t\t\t\t\t ishiftx,icmov,rotate,rotatex\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_insn_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ishift1,rotate1,rotate,incdec,\r\n+\t\t\t\t\t\t alu,icmov,ishift,negnot,alu1\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu,c86-4g-m7-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_insn2_store\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"icmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu,c86-4g-m7-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_insn_both\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,negnot,rotate1,ishift1,incdec,rotate,\r\n+\t\t\t\t\t\t rotatex,ishift,ishiftx,icmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"both\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu,c86-4g-m7-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_setcc\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"setcc\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none,unknown\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu0|c86-4g-m7-ieu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_setcc_load\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"setcc\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu0|c86-4g-m7-ieu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_setcc_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"setcc\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-ieu0|c86-4g-m7-ieu3\")\r\n+\r\n+;; ALU1\r\n+(define_insn_reservation \"c86_4g_m7_alu1_double\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_alu1_double_load\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"both\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_alu1_vector\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-ivector*3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_alu1_vector_load\" 7\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"both\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ivector*3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_alu1_direct\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_alu1_direct_load\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"both\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ieu\")\r\n+\r\n+;; CALL/CALLV\r\n+(define_insn_reservation \"c86_4g_m7_call\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (eq_attr \"type\" \"call,callv\"))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu0|c86-4g-m7-bru0,c86-4g-m7-store\")\r\n+\r\n+;; IBR\r\n+(define_insn_reservation \"c86_4g_m7_branch\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ibr\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu0|c86-4g-m7-bru0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_branch_load\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ibr\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu0|c86-4g-m7-bru0\")\r\n+\r\n+;; LEA\r\n+(define_insn_reservation \"c86_4g_m7_lea\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (eq_attr \"type\" \"lea\"))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-ieu\")\r\n+\r\n+;; LEAVE\r\n+(define_insn_reservation \"c86_4g_m7_leave\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (eq_attr \"type\" \"leave\"))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu,c86-4g-m7-store\")\r\n+\r\n+;; STR\r\n+(define_insn_reservation \"c86_4g_m7_str\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"str\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-ivector*3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_str_load\" 7\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"str\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-ivector*3\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_ieu_vector\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"other,multi\")\r\n+\t\t\t\t (and (eq_attr \"unit\" \"!i387\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-ivector*5\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_ieu_vector_load\" 9\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"other,multi\")\r\n+\t\t\t\t (and (eq_attr \"unit\" \"!i387\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-ivector*5\")\r\n+\r\n+;; SSEINS\r\n+(define_insn_reservation \"c86_4g_m7_sse_insertimm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseins\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"length_immediate\" \"2\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu0|c86-4g-m7-fpu3,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_insert\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseins\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"length_immediate\" \"!2\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1\")\r\n+\r\n+;; FCMOV\r\n+(define_insn_reservation \"c86_4g_m7_fp_cmov\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (eq_attr \"type\" \"fcmov\"))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-fvector*3\")\r\n+\r\n+;; FLD\r\n+(define_insn_reservation \"c86_4g_m7_fp_mov_direct_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1\")\r\n+\r\n+;; FST\r\n+(define_insn_reservation \"c86_4g_m7_fp_mov_direct_store\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1,c86-4g-m7-store\")\r\n+\r\n+;; FILD\r\n+(define_insn_reservation \"c86_4g_m7_fp_mov_double_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1\")\r\n+\r\n+;; FIST\r\n+(define_insn_reservation \"c86_4g_m7_fp_mov_double_store\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_mov_direct\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1\")\r\n+\r\n+;; FSQRT\r\n+(define_insn_reservation \"c86_4g_m7fp_sqrt\" 22\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fpspc\")\r\n+\t\t\t\t (eq_attr \"c86_attr\" \"sqrt\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1*22\")\r\n+\r\n+;; FPSPC\r\n+(define_insn_reservation \"c86_4g_m7_fp_spc_direct\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fpspc\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"store\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_spc\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fpspc\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-fvector*6\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_op_mul\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fop,fmul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_op_mul_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fop,fmul\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"false\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_op_imul_load\" 16\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fmul\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"true\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t\"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu0,c86-4g-m7-fpu_0_2\")\r\n+\r\n+;; FDIV\r\n+(define_insn_reservation \"c86_4g_m7_fp_div\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fdiv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_div_load\" 22\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fdiv\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"false\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_idiv_load\" 26\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fdiv\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"true\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_fsgn\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (eq_attr \"type\" \"fsgn\"))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+;; FCMP\r\n+(define_insn_reservation \"c86_4g_m7_fp_fcmp\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fcmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu0,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fp_fcmp_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"fcmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu0,c86-4g-m7-fpu1\")\r\n+\r\n+;; MMX\r\n+(define_insn_reservation \"c86_4g_m7_fp_mmx\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (eq_attr \"type\" \"mmx\"))\r\n+\t\t\t \"c86-4g-m7-direct\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_add_cmp\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxadd,mmxcmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_add_cmp_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxadd,mmxcmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_cvt\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxcvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_cvt_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxcvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_shift\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_shift_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_shift_avg\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"avg\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_shift_avg_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"avg\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+;; SADBW\r\n+(define_insn_reservation \"c86_4g_m7_mmx_shift_sadbw\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_shift_sadbw_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_mov\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_mov_store\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_mov_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_mul\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_mmx_mul_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0\")\r\n+\r\n+;; PINSR\r\n+(define_insn_reservation \"c86_4g_m7_sse_pinsr_reg\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,mmxcvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insr\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-ieu2,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_pinsr_reg_load\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,mmxcvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insr\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_vpinsr_reg\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insr\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu2*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_vpinsr_reg_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insr\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1|c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+;; PERM\r\n+(define_insn_reservation \"c86_4g_m7_avx512_perm_xmm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (ior (and (eq_attr \"c86_attr\" \"perm2\")\r\n+\t\t\t\t\t\t (eq_attr \"mode\" \"V4SF,V2DF,TI\"))\r\n+\t\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t\t\t (eq_attr \"mode\" \"V8SF,V4DF,TI,OI\")))\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_perm_xmm_opload\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (ior (and (eq_attr \"c86_attr\" \"perm2\")\r\n+\t\t\t\t\t\t (eq_attr \"mode\" \"V4SF,V2DF,TI\"))\r\n+\t\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t\t\t (eq_attr \"mode\" \"V8SF,V4DF,TI,OI\")))\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_permi2_ymm\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm2\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_permi2_zmm\" 16\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm2\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_permi2_ymm_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm2\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_permi2_zmm_load\" 23\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm2\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_perm_zmm_imm\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_operand 2 \"immediate_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2x4\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_perm_zmm_imm_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_operand 2 \"immediate_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_perm_zmm_noimm\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_operand 2 \"nonimmediate_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_perm_zmm_noimm_load\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_operand 2 \"nonimmediate_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_perm_ymm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_perm_ymem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"perm\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; VINSERT\r\n+(define_insn_reservation \"c86_4g_m7_avx512_insertx_ymm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_insertx_ymem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load,both\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_insertx_zxmm\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_test \"GET_MODE_SIZE (GET_MODE (operands[2]))==16\")\r\n+\t\t\t\t\t (match_operand 2 \"register_operand\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_0_2x4,c86-4g-m7-fpu_0_2x4\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_insertx_zxmem\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_test \"GET_MODE_SIZE (GET_MODE (operands[2]))==16\")\r\n+\t\t\t\t\t (match_operand 2 \"memory_operand\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4,c86-4g-m7-fpu_0_2x4\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_insertx_zymm\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_test \"GET_MODE_SIZE (GET_MODE (operands[2]))==32\")\r\n+\t\t\t\t\t (match_operand 2 \"register_operand\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_insertx_zymem\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (match_test \"GET_MODE_SIZE (GET_MODE (operands[2]))==32\")\r\n+\t\t\t\t\t (match_operand 2 \"memory_operand\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_insertx_ymm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_insertx_ymem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insertx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0*2\")\r\n+\r\n+;; SHUF/MULTISHIFTQB\r\n+(define_insn_reservation \"c86_4g_m7_avx512_shuf_xymm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"shufx\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"V8DF,V16SF,XI\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_shuf_zmm\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"shufx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V8DF,V16SF,XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_shuf_xymem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"shufx\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"V8DF,V16SF,XI\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_shuf_zmem\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"shufx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V8DF,V16SF,XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; SSELOGIC\r\n+(define_insn_reservation \"c86_4g_m7_sselogic_xymm\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sselogic\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sselogic_xymm_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sselogic\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+;; CMPESTR\r\n+(define_insn_reservation \"c86_4g_m7_avx512_cmpestr\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"cmpestr\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_cmpestr_load\" 13\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"cmpestr\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; SSELOG\r\n+(define_insn_reservation \"c86_4g_m7_avx512_log\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1,sseshuf,sseshuf1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_log_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog,sselog1,sseshuf,sseshuf1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+;; SSELOG1\r\n+;; VDBPSADBW\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vdbpsadbw_xymm\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI,TI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vdbpsadbw_xymem\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI,TI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vdbpsadbw_zmm\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vdbpsadbw_zmem\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; ABS\r\n+(define_insn_reservation \"c86_4g_m7_avx512_abs\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"abs\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_abs_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"abs\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load,both\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+;; SIGN\r\n+(define_insn_reservation \"c86_4g_m7_avx_sign\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sign\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sign_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sign\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu3\")\r\n+\r\n+;; BLEND/ABS/AES\r\n+(define_insn_reservation \"c86_4g_m7_avx_blend\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"abs,blend,aes\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_blend_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"abs,blend,aes\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_aes\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1,ssecvt,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"aes\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_aes_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1,ssecvt,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"aes\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_aes\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"aes\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_aes_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"aes\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu1\")\r\n+\r\n+;; EXTR\r\n+(define_insn_reservation \"c86_4g_m7_extr\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1,sselog,mmxcvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"extr\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_extr_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1,sselog,mmxcvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"extr\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1\")\r\n+\r\n+;; SSECOMI\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecomi_comi\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecomi_comi_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecomi_test\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1|c86-4g-m7-fpu2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecomi_test_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1|c86-4g-m7-fpu2\")\r\n+\r\n+;; SSEIMUL\r\n+(define_insn_reservation \"c86_4g_m7_avx512_imul\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_imul_mem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_imul\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_imul_mem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu3\")\r\n+\r\n+;; SSEMOV\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mov_vmov\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov,sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other,blend,maxmin\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mov_vmov_store\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mov_vmov_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov,sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other,blend,maxmin\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vpmovx_y\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI,V8SF,V4DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vpmovx_y_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI,V8SF,V4DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load,both\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vpmovx_z\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2x4\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vpmovx_z_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vpmovx_x\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,SI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_vpmovx_x_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,SI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_vpmovx_xx\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1|c86-4g-m7-fpu2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_vpmovx_xx_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"vpmovx\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load,both\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1|c86-4g-m7-fpu2\")\r\n+\r\n+;; EXPAND\r\n+(define_insn_reservation \"c86_4g_m7_avx512_expand\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"expand,compress\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"XI,V16SF,V8DF\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu3*2,c86-4g-m7-fpu1*2|c86-4g-m7-fpu3*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_expand_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"expand,compress\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"XI,V16SF,V8DF\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu3*2,c86-4g-m7-fpu1*2|c86-4g-m7-fpu3*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_expand_z\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"expand,compress\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_expand_z_load\" 17\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"expand,compress\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; MOVNT\r\n+(define_insn_reservation \"c86_4g_m7_avx512_movnt_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"movnt\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI,V16SF,V8DF\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_movnt_store\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"movnt\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"store\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_movnt_store\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov,mmxmov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"movnt\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"XI,V16SF,V8DF\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"!none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_movnt_xy\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"movnt\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"XI,V16SF,V8DF\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+;; BLENDV\r\n+(define_insn_reservation \"c86_4g_m7_avx512_blendv\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"blendv\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_blendv_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"blendv\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+;; SSEMOV2\r\n+(define_insn_reservation \"c86_4g_m7_sse_mov2\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov2\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_mov2_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov2\")\r\n+\t\t\t\t (eq_attr \"memory\" \"!none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+;; SSEISHFT\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseishft_aligr\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseishft_aligr_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseishft_vshift\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"!1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseishft_vshift_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"!1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+\r\n+;; SSEADD\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseadd_maxmin_xy\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"maxmin\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseadd_maxmin_xy_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"maxmin\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (ior (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseadd_maxmin\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"maxmin\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"vex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseadd_maxmin_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"maxmin\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"vex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseadd_maxmin\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"maxmin\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseadd_maxmin_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"maxmin\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+;; SUB/ADD\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseadd_xy\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseadd_xy_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu3\")\r\n+\r\n+;; HADD/HSUB\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseadd_hplus\" 7\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sseadd1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"hplus\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseadd_hplus_load\" 14\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd,sseadd1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"hplus\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; SSEIADD\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseiadd_madd\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw,madd\")\r\n+\t\t\t\t\t(and (ior (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t\t (eq_attr \"mode\" \"XI\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseiadd_madd_mem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw,madd\")\r\n+\t\t\t\t\t(and (ior (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t\t (eq_attr \"mode\" \"XI\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseiadd_sadbw\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"vex,maybe_evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,OI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseiadd_sadbw_mem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"vex,maybe_evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,OI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseiadd_sadbw\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseiadd_sadbw_mem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseiadd_madd\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"madd\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseiadd_madd_mem\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"madd\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0\")\r\n+\r\n+;; AVG\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseiadd_avg\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"avg\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sseiadd_avg_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"avg\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseiadd_hplus\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,sseiadd1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"hplus\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"vex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sseiadd_hplus_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,sseiadd1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"hplus\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"vex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseiadd_hplus\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,sseiadd1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"hplus\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-fpu0*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_sseiadd_hplus_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,sseiadd1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"hplus\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"orig\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu0*2\")\r\n+\r\n+;; SSEMUL\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssemul\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssemul_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0\")\r\n+\r\n+;; SSEDIV\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssediv\" 13\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"V16SF,V8DF\"))\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu3*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssediv_mem\" 20\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"V16SF,V8DF\"))\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu3*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssediv_z\" 24\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu3*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssediv_zmem\" 31\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu3*7\")\r\n+\r\n+;; SSECMP\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V2DF,V4DF,V8SF,V4SF,SF,DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V2DF,V4DF,V8SF,V4SF,SF,DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_z\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_z_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V16SF,V8DF,XI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_vp\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,OI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_vp_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,OI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecmp_vp\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecmp_vp_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu\")\r\n+\r\n+;; VPTEST\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_test\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,OI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"ptest\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_test_load\" 13\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,OI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"ptest\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_test_z\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"ptest\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecmp_test_z_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"ptest\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+;; SSECVT\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecvt_xy\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,V4SF,V2DF,OI,V8SF,V4DF\")\r\n+\t\t\t\t (and (not (ior (match_operand:V8DI 1 \"register_operand\")\r\n+\t\t\t\t\t\t (match_operand:V8DF 1 \"register_operand\")))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecvt_xy_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI,V4SF,V2DF,OI,V8SF,V4DF\")\r\n+\t\t\t\t (and (not (ior (match_operand:V8DI 1 \"register_operand\")\r\n+\t\t\t\t\t\t (match_operand:V8DF 1 \"register_operand\")))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"!none\")))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecvt_y_z\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI,V8SF,V4DF\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (ior (match_operand:V8DI 1 \"register_operand\")\r\n+\t\t\t\t\t (match_operand:V8DF 1 \"register_operand\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecvt_y_z_load\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI,V8SF,V4DF\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (ior (match_operand:V8DI 1 \"memory_operand\")\r\n+\t\t\t\t\t (match_operand:V8DF 1 \"memory_operand\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"!none\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecvt_z\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_ssecvt_z_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"!none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecvt\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t (and (eq_attr \"mmx_isa\" \"base\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_ssecvt_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t (and (eq_attr \"mmx_isa\" \"base\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"!none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3\")\r\n+\r\n+;; CVTPI\r\n+(define_insn_reservation \"c86_4g_m7_sse_ssecvt_pspi\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"SF,DI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_ssecvt_pspi_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"SF,DI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_ssecvt_pi\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"SF,DI\"))\r\n+\t\t\t\t (and (eq_attr \"mmx_isa\" \"native\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_sse_ssecvt_pi_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"SF,DI\"))\r\n+\t\t\t\t (and (eq_attr \"mmx_isa\" \"native\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1\")\r\n+\r\n+;; SSEMULADD\r\n+(define_insn_reservation \"c86_4g_m7_avx512_muladd\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (not (eq_attr \"isa\" \"fma,fma4\"))\r\n+\t\t\t\t\t (eq_attr \"mode\" \"V32HF,V16SF,V8DF,XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_muladd_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (not (eq_attr \"isa\" \"fma,fma4\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_muladd_madd\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"madd,rcp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_muladd_madd_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd,sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"madd,rcp\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fma_muladd\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd\")\r\n+\t\t\t\t (and (eq_attr \"isa\" \"fma,fma4\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_fma_muladd_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd\")\r\n+\t\t\t\t (and (eq_attr \"isa\" \"fma,fma4\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+;; SSE\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_range\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"length_immediate\" \"!1\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_range_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"length_immediate\" \"!1\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_conflict_x\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_conflict_x_load\" 9\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"TI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_conflict_y\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_conflict_y_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"OI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_conflict_z\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_conflict_z_load\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"XI\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_class\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"length_immediate\" \"1\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"V32HF,V16SF,V8DF\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_class_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"length_immediate\" \"1\")\r\n+\t\t\t\t (and (not (eq_attr \"mode\" \"V32HF,V16SF,V8DF\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_class_z\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"length_immediate\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V32HF,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_class_z_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t (and (eq_attr \"length_immediate\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"V32HF,V16SF,V8DF\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\"))))))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sse\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"rcp,other\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx_sse_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"rcp,other\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!evex\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_sqrt\" 16\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sqrt\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu1*7|c86-4g-m7-fpu3*7\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_sse_sqrt_load\" 23\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sqrt\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1*7|c86-4g-m7-fpu3*7\")\r\n+\r\n+;; MSKLOG/MSKMOV\r\n+(define_insn_reservation \"c86_4g_m7_avx512_msklog\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"msklog\")\r\n+\t\t\t\t (eq_attr \"c86_decode\" \"direct\")))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_msklog_vector\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"msklog\")\r\n+\t\t\t\t (eq_attr \"c86_decode\" \"vector\")))\r\n+\t\t\t \"c86-4g-m7-vector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mskmov_reg_k\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mskmov\")\r\n+\t\t\t\t (and (match_operand 0 \"register_operand\" \"r\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mskmov_xy_k\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mskmov\")\r\n+\t\t\t\t (ior (match_operand:V2DI 0 \"register_operand\" \"v\")\r\n+\t\t\t\t\t(match_operand:V4DI 0 \"register_operand\" \"v\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mskmov_z_k\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mskmov\")\r\n+\t\t\t\t (match_operand:V8DI 0 \"register_operand\" \"v\")))\r\n+\t\t\t \"c86-4g-m7-vector,c86-4g-m7-fpu3*2,c86-4g-m7-fpu1*2|c86-4g-m7-fpu3*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mskmov_k_k\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mskmov\")\r\n+\t\t\t\t (and (match_operand 0 \"register_operand\" \"k\")\r\n+\t\t\t\t (match_operand 1 \"register_operand\" \"k\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-fpu_1_3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mskmov_k_reg\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mskmov\")\r\n+\t\t\t\t (and (match_operand 0 \"register_operand\" \"k\")\r\n+\t\t\t\t (match_operand 1 \"register_operand\" \"r\"))))\r\n+\t\t\t \"c86-4g-m7-double,c86-4g-m7-fpu1*2,c86-4g-m7-fpu1*2|c86-4g-m7-fpu3*2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_m7_avx512_mskmov_k_m\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m7\")\r\n+\t\t\t (and (eq_attr \"type\" \"mskmov\")\r\n+\t\t\t\t (and (match_operand 0 \"register_operand\" \"k\")\r\n+\t\t\t\t (match_operand 1 \"memory_operand\"))))\r\n+\t\t\t \"c86-4g-m7-direct,c86-4g-m7-load\")\r\ndiff --git a/gcc/config/i386/c86-4g.md b/gcc/config/i386/c86-4g.md\r\nnew file mode 100644\r\nindex 000000000..66c4e2cf7\r\n--- /dev/null\r\n+++ b/gcc/config/i386/c86-4g.md\r\n@@ -0,0 +1,1204 @@\r\n+;; Copyright (C) 2026 Free Software Foundation, Inc.\r\n+;;\r\n+;; This file is part of GCC.\r\n+;;\r\n+;; GCC is free software; you can redistribute it and/or modify\r\n+;; it under the terms of the GNU General Public License as published by\r\n+;; the Free Software Foundation; either version 3, or (at your option)\r\n+;; any later version.\r\n+;;\r\n+;; GCC is distributed in the hope that it will be useful,\r\n+;; but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n+;; GNU General Public License for more details.\r\n+;;\r\n+;; You should have received a copy of the GNU General Public License\r\n+;; along with GCC; see the file COPYING3. If not see\r\n+;; <http://www.gnu.org/licenses/>.\r\n+;;\r\n+\r\n+\r\n+(define_attr \"c86_decode\" \"direct,vector,double\"\r\n+ (const_string \"direct\"))\r\n+\r\n+(define_attr \"c86_attr\" \"other,abs,sqrt,maxmin,blend,blendv,rcp,movnt,avg,\r\n+\t\t\t sign,sadbw,insr,perm2,perm,insertx,shufx,madd,\r\n+\t\t\t compress,sselogic,cmpestr,extr,vpmovx,expand,aes,\r\n+\t\t\t hplus,ptest\"\r\n+ (const_string \"other\"))\r\n+\r\n+;; HYGON Scheduling\r\n+;; Modeling automatons for decoders, integer execution pipes,\r\n+;; AGU pipes and floating point execution units.\r\n+(define_automaton \"c86_4g, c86_4g_ieu, c86_4g_fp, c86_4g_agu\")\r\n+\r\n+;; Decoders unit has 4 decoders and all of them can decode fast path\r\n+;; and vector type instructions.\r\n+(define_cpu_unit \"c86-4g-decode0\" \"c86_4g\")\r\n+(define_cpu_unit \"c86-4g-decode1\" \"c86_4g\")\r\n+(define_cpu_unit \"c86-4g-decode2\" \"c86_4g\")\r\n+(define_cpu_unit \"c86-4g-decode3\" \"c86_4g\")\r\n+\r\n+;; Currently blocking all decoders for vector path instructions as\r\n+;; they are dispatched separetely as microcode sequence.\r\n+;; Fix me: Need to revisit this.\r\n+(define_reservation \"c86-4g-vector\" \"c86-4g-decode0+c86-4g-decode1+c86-4g-decode2+c86-4g-decode3\")\r\n+\r\n+;; Direct instructions can be issued to any of the four decoders.\r\n+(define_reservation \"c86-4g-direct\" \"c86-4g-decode0|c86-4g-decode1|c86-4g-decode2|c86-4g-decode3\")\r\n+\r\n+;; Fix me: Need to revisit this later to simulate fast path double behavior.\r\n+(define_reservation \"c86-4g-double\" \"c86-4g-direct\")\r\n+\r\n+\r\n+;; Integer unit 4 ALU pipes.\r\n+(define_cpu_unit \"c86-4g-ieu0\" \"c86_4g_ieu\")\r\n+(define_cpu_unit \"c86-4g-ieu1\" \"c86_4g_ieu\")\r\n+(define_cpu_unit \"c86-4g-ieu2\" \"c86_4g_ieu\")\r\n+(define_cpu_unit \"c86-4g-ieu3\" \"c86_4g_ieu\")\r\n+(define_reservation \"c86-4g-ieu\" \"c86-4g-ieu0|c86-4g-ieu1|c86-4g-ieu2|c86-4g-ieu3\")\r\n+\r\n+;; 2 AGU pipes in c86_4g\r\n+;; According to CPU diagram last AGU unit is used only for stores.\r\n+(define_cpu_unit \"c86-4g-agu0\" \"c86_4g_agu\")\r\n+(define_cpu_unit \"c86-4g-agu1\" \"c86_4g_agu\")\r\n+(define_reservation \"c86-4g-agu-reserve\" \"c86-4g-agu0|c86-4g-agu1\")\r\n+\r\n+;; Load is 4 cycles. We do not model reservation of load unit.\r\n+;;(define_reservation \"c86-4g-load\" \"c86-4g-agu-reserve, nothing, nothing, nothing\")\r\n+(define_reservation \"c86-4g-load\" \"c86-4g-agu-reserve\")\r\n+(define_reservation \"c86-4g-store\" \"c86-4g-agu-reserve\")\r\n+\r\n+;; vectorpath (microcoded) instructions are single issue instructions.\r\n+;; So, they occupy all the integer units.\r\n+(define_reservation \"c86-4g-ivector\" \"c86-4g-ieu0+c86-4g-ieu1\r\n+\t\t\t\t +c86-4g-ieu2+c86-4g-ieu3\r\n+\t\t\t\t +c86-4g-agu0+c86-4g-agu1\")\r\n+\r\n+;; Floating point unit 4 FP pipes.\r\n+(define_cpu_unit \"c86-4g-fp0\" \"c86_4g_fp\")\r\n+(define_cpu_unit \"c86-4g-fp1\" \"c86_4g_fp\")\r\n+(define_cpu_unit \"c86-4g-fp2\" \"c86_4g_fp\")\r\n+(define_cpu_unit \"c86-4g-fp3\" \"c86_4g_fp\")\r\n+\r\n+(define_reservation \"c86-4g-fpu\" \"c86-4g-fp0|c86-4g-fp1|c86-4g-fp2|c86-4g-fp3\")\r\n+\r\n+(define_reservation \"c86-4g-fvector\" \"c86-4g-fp0+c86-4g-fp1\r\n+\t\t\t\t +c86-4g-fp2+c86-4g-fp3\r\n+\t\t\t\t +c86-4g-agu0+c86-4g-agu1\")\r\n+\r\n+;; Call instruction\r\n+(define_insn_reservation \"c86_4g_call\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (eq_attr \"type\" \"call,callv\"))\r\n+\t\t\t \"c86-4g-double,c86-4g-store,c86-4g-ieu0+c86-4g-ieu3\")\r\n+\r\n+;; General instructions\r\n+(define_insn_reservation \"c86_4g_push\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"push\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_push_load\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"push\")\r\n+\t\t\t\t (eq_attr \"memory\" \"both\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load+c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_pop\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"pop\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_pop_mem\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"pop\")\r\n+\t\t\t\t (eq_attr \"memory\" \"both\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-store\")\r\n+\r\n+;; Leave\r\n+(define_insn_reservation \"c86_4g_leave\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (eq_attr \"type\" \"leave\"))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu+c86-4g-store\")\r\n+\r\n+;; Integer Instructions or General instructions\r\n+;; Multiplications\r\n+;; Reg operands\r\n+(define_insn_reservation \"c86_4g_imul\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"imul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_imul_mem\" 7\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"imul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"!none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load, c86-4g-ieu1\")\r\n+\r\n+;; Divisions\r\n+;; Reg operands\r\n+(define_insn_reservation \"c86_4g_idiv_DI\" 41\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"DI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu2*41\")\r\n+\r\n+(define_insn_reservation \"c86_4g_idiv_SI\" 25\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu2*25\")\r\n+\r\n+(define_insn_reservation \"c86_4g_idiv_HI\" 17\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"HI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu2*17\")\r\n+\r\n+(define_insn_reservation \"c86_4g_idiv_QI\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"QI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu2*15\")\r\n+\r\n+;; Mem operands\r\n+(define_insn_reservation \"c86_4g_idiv_mem_DI\" 45\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"DI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-ieu2*41\")\r\n+\r\n+(define_insn_reservation \"c86_4g_idiv_mem_SI\" 29\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-ieu2*25\")\r\n+\r\n+(define_insn_reservation \"c86_4g_idiv_mem_HI\" 21\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"HI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-ieu2*17\")\r\n+\r\n+(define_insn_reservation \"c86_4g_idiv_mem_QI\" 19\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"idiv\")\r\n+\t\t\t\t (and (eq_attr \"mode\" \"QI\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-ieu2*15\")\r\n+\r\n+;; STR ISHIFT which are micro coded.\r\n+;; Fix me: Latency need to be rechecked.\r\n+(define_insn_reservation \"c86_4g_str_ishift\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"str,ishift\")\r\n+\t\t\t\t (eq_attr \"memory\" \"both,store\")))\r\n+\t\t\t \"c86-4g-vector,c86-4g-ivector\")\r\n+\r\n+;; MOV - integer moves\r\n+(define_insn_reservation \"c86_4g_load_imov_double\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"imovx\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_load_imov_direct\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"!double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"imov,imovx\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_load_imov_double_store\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"imovx\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_load_imov_direct_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"!double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"imov,imovx\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t\t \"c86-4g-direct,c86-4g-ieu,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_load_imov_double_load\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"imovx\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_load_imov_direct_load\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"!double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"imov,imovx\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load\")\r\n+\r\n+;; INTEGER/GENERAL instructions\r\n+;; register/imm operands only: ALU, ICMP, NEG, NOT, ROTATE, ISHIFT, TEST\r\n+(define_insn_reservation \"c86_4g_insn\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,icmp,negnot,rotate,rotate1,ishift,ishift1,test,setcc,incdec,icmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none,unknown\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_insn_load\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,icmp,negnot,rotate,rotate1,ishift,ishift1,test,setcc,incdec,icmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-ieu\")\r\n+\r\n+;; FIXME: The instructions matched here has only two operands, which means memory type can only be none, load or both.\r\n+;; Store memory type handling should never take effect here?\r\n+(define_insn_reservation \"c86_4g_insn_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,icmp,negnot,rotate,rotate1,ishift1,test,setcc,incdec\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_insn_both\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"alu,icmp,negnot,rotate,rotate1,ishift1,test,setcc,incdec\")\r\n+\t\t\t\t (eq_attr \"memory\" \"both\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-ieu,c86-4g-store\")\r\n+\r\n+;; Special latency for multi type.\r\n+(define_insn_reservation \"c86_4g_fp_fcomp\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t (and (eq_attr \"unit\" \"i387\")\r\n+\t\t\t\t\t(eq_attr \"type\" \"multi\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+;; Fix me: Other vector type insns keeping latency 6 as of now.\r\n+(define_insn_reservation \"c86_4g_ieu_vector\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t (and (eq_attr \"unit\" \"!i387\")\r\n+\t\t\t\t\t(eq_attr \"type\" \"other,str,multi\"))))\r\n+\t\t\t \"c86-4g-vector,c86-4g-ivector\")\r\n+\r\n+;; ALU1 register operands.\r\n+(define_insn_reservation \"c86_4g_alu1_vector\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"vector\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-vector,c86-4g-ivector\")\r\n+\r\n+(define_insn_reservation \"c86_4g_alu1_double\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-ieu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_alu1_direct\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"alu1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none,unknown\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu\")\r\n+\r\n+;; Branches : Fix me need to model conditional branches.\r\n+(define_insn_reservation \"c86_4g_branch\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"ibr\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct\")\r\n+\r\n+;; Indirect branches check latencies.\r\n+(define_insn_reservation \"c86_4g_indirect_branch_mem\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"ibr\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-vector,c86-4g-ivector\")\r\n+\r\n+;; LEA executes in ALU units with 1 cycle latency.\r\n+(define_insn_reservation \"c86_4g_lea\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (eq_attr \"type\" \"lea\"))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu\")\r\n+\r\n+;; Floating point\r\n+(define_insn_reservation \"c86_4g_fp_cmov\" 6\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (eq_attr \"type\" \"fcmov\"))\r\n+\t\t\t \"c86-4g-vector,c86-4g-fvector\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_mov_direct_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_mov_direct_store\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp2|c86-4g-fp3,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_mov_double\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_mov_double_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_mov_direct\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fmov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1\")\r\n+\r\n+;; SQRT\r\n+(define_insn_reservation \"c86_4g_fp_sqrt\" 22\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fpspc\")\r\n+\t\t\t\t (eq_attr \"c86_attr\" \"sqrt\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1*22\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sqrt_sf\" 14\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SF,V4SF,V8SF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none,unknown\")\r\n+\t\t\t\t\t(and (eq_attr \"c86_attr\" \"sqrt\")\r\n+\t\t\t\t\t (eq_attr \"type\" \"sse\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1*14\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sqrt_sf_mem\" 21\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SF,V4SF,V8SF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t(and (eq_attr \"c86_attr\" \"sqrt\")\r\n+\t\t\t\t\t (eq_attr \"type\" \"sse\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1*14\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sqrt_df\" 20\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"DF,V2DF,V4DF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none,unknown\")\r\n+\t\t\t\t\t(and (eq_attr \"c86_attr\" \"sqrt\")\r\n+\t\t\t\t\t (eq_attr \"type\" \"sse\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1*20\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sqrt_df_mem\" 27\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"DF,V2DF,V4DF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t(and (eq_attr \"c86_attr\" \"sqrt\")\r\n+\t\t\t\t\t (eq_attr \"type\" \"sse\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1*20\")\r\n+\r\n+;; RCP\r\n+(define_insn_reservation \"c86_4g_sse_rcp\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V4SF,V8SF,SF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(and (eq_attr \"c86_attr\" \"rcp\")\r\n+\t\t\t\t\t (eq_attr \"type\" \"sse\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_rcp_mem\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V4SF,V8SF,SF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t(and (eq_attr \"c86_attr\" \"rcp\")\r\n+\t\t\t\t\t (eq_attr \"type\" \"sse\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+;; TODO: AGU?\r\n+(define_insn_reservation \"c86_4g_fp_spc_direct\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_decode\" \"direct\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"fpspc\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp3\")\r\n+\r\n+;; FABS\r\n+(define_insn_reservation \"c86_4g_fp_absneg\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (eq_attr \"type\" \"fsgn\"))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1|c86-4g-fp3\")\r\n+\r\n+;; FCMP\r\n+(define_insn_reservation \"c86_4g_fp_fcmp\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t (eq_attr \"type\" \"fcmp\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp0,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_fcmp_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t (and (eq_attr \"c86_decode\" \"double\")\r\n+\t\t\t\t\t(eq_attr \"type\" \"fcmp\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load, c86-4g-fp0,c86-4g-fp1\")\r\n+\r\n+;;FADD FSUB FMUL\r\n+(define_insn_reservation \"c86_4g_fp_op_mul\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fop,fmul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_op_mul_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fop,fmul\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"false\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_op_imul_load\" 16\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fop,fmul\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"true\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t\"c86-4g-double,c86-4g-load,c86-4g-fp0,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_op_div\" 15\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fdiv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1*15\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_op_div_load\" 22\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fdiv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1*15\")\r\n+\r\n+(define_insn_reservation \"c86_4g_fp_op_idiv_load\" 27\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"fdiv\")\r\n+\t\t\t\t (and (eq_attr \"fp_int_src\" \"true\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp1*19\")\r\n+\r\n+;; MMX, SSE, SSEn.n, AVX, AVX2 instructions\r\n+(define_insn_reservation \"c86_4g_fp_insn\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (eq_attr \"type\" \"mmx\"))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_add\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxadd\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1|c86-4g-fp3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_add_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxadd\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp1|c86-4g-fp3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_hadd\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd1\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_hadd_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd1\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_cmp\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxcmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_cmp_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxcmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_cvt_pck_shuf\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxcvt,sseshuf,sseshuf1\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_cvt_pck_shuf_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxcvt,sseshuf,sseshuf1\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_shift\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_move\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_shift_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_move_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_move_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxshft,mmxmov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"store,both\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp2,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_mul\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_mmx_mul_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"mmxmul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0\")\r\n+\r\n+;; sseabs\r\n+(define_insn_reservation \"c86_4g_sse_abs\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_attr\" \"abs\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_pinsr_reg\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insr\")\r\n+\t\t\t\t\t(and (match_operand 2 \"register_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu2,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_pinsr\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"insr\")\r\n+\t\t\t\t\t(and (not (match_operand 2 \"register_operand\"))\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_log\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_log_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sign\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sign\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sign_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sign\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fpu\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_log1\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_log1_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"!none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_extrq\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"prefix_data16\" \"1\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_movsdup\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sse\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"prefix\" \"vex\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_alignr\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"prefix_extra\" \"1\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_ishift\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"prefix_extra\" \"!1\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_ishift_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"prefix_extra\" \"!1\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseishft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"!none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_insertimm\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseins\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"length_immediate\" \"2\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_insert\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseins\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"length_immediate\" \"!2\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_comi\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SF,DF,V4SF,V2DF\")\r\n+\t\t\t\t (and (eq_attr \"prefix\" \"!vex\")\r\n+\t\t\t\t\t(and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_comi_load\" 12\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"SF,DF,V4SF,V2DF\"))\r\n+\t\t\t (and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_comi_double\" 2\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V4SF,V2DF,TI\"))\r\n+\t\t\t (and (eq_attr \"prefix\" \"vex\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t\t(and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_comi_double_load\" 10\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V4SF,V2DF,TI\"))\r\n+\t\t\t (and (eq_attr \"prefix\" \"vex\")\r\n+\t\t\t\t (and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t\t(and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp0|c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_test\" 4\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"SF,DF,V4SF,V2DF,TI\"))\r\n+\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_test_load\" 11\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"SF,DF,V4SF,V2DF,TI\"))\r\n+\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp1,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_avx256_test\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V8SF,V4DF,OI\"))\r\n+\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp1,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_avx256_test_load\" 15\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V8SF,V4DF,OI\"))\r\n+\t\t\t (and (eq_attr \"prefix_extra\" \"1\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecomi\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp1,c86-4g-fp1\")\r\n+\r\n+;; SSE moves\r\n+;; Fix me: Need to revist this again some of the moves may be restricted\r\n+;; to some fpu pipes.\r\n+\r\n+;; movnt doesn't touch cache, so latency modeling has little impact.\r\n+(define_insn_reservation \"c86_4g_sse_movnt_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_attr\" \"movnt\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov,mmxmov,ssecvt\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_movnt_store\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"c86_attr\" \"movnt\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov,mmxmov,ssecvt\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_mov\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t (and (eq_attr \"isa\" \"avx\")\r\n+\t\t\t\t\t(and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_avx_mov\" 2\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"TI\")\r\n+\t\t\t\t (and (eq_attr \"isa\" \"avx\")\r\n+\t\t\t\t\t(and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t (and (match_operand:SI 1 \"register_operand\")\r\n+\t\t\t\t\t\t (eq_attr \"memory\" \"none\"))))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-ieu2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseavx_mov\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"SF,DF,V4SF,V2DF,TI\"))\r\n+\t\t\t (and (eq_attr \"prefix_extra\" \"0\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseavx_blend\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"SF,DF,V4SF,V2DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov,sselog1\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"blend,blendv\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseavx_mov_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SF,DF,V4SF,V2DF,TI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t\"c86-4g-direct,c86-4g-fpu,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseavx_mov_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"SF,DF,V4SF,V2DF,TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_avx256_mov\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_avx256_mov_store\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"store\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fpu,c86-4g-store\")\r\n+\r\n+(define_insn_reservation \"c86_4g_avx256_mov_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF,OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssemov\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fpu\")\r\n+\r\n+;; SSE max & min\r\n+(define_insn_reservation \"c86_4g_sse_maxmin\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"SF,DF,V4SF,V8SF,V2DF,V4DF,TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"c86_attr\" \"maxmin\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_maxmin_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"SF,DF,V4SF,V8SF,V2DF,V4DF,TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t(eq_attr \"c86_attr\" \"maxmin\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_pmaxmin\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"TI,OI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"mmxadd,sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"c86_attr\" \"maxmin\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_pmaxmin_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"TI,OI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"mmxadd,sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t(eq_attr \"c86_attr\" \"maxmin\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fpu\")\r\n+\r\n+;; SSE avg\r\n+(define_insn_reservation \"c86_4g_sse_avg\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"c86_attr\" \"avg\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,mmxshft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_avg_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"c86_attr\" \"avg\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,mmxshft\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp3\")\r\n+\r\n+;;MMX sadbw\r\n+(define_insn_reservation \"c86_4g_sse_sadbw\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_sadbw_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd,mmxshft\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"sadbw\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0\")\r\n+\r\n+;; SSE add\r\n+(define_insn_reservation \"c86_4g_sse_add\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"c86_attr\" \"other\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1|c86-4g-fp3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_add_load\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseadd\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"load\")\r\n+\t\t\t\t\t(eq_attr \"c86_attr\" \"!maxmin\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1|c86-4g-fp3\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_fma\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_fma_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssemuladd\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t\"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_iadd\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_iadd_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"sseiadd\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fpu\")\r\n+\r\n+;; SSE conversions.\r\n+(define_insn_reservation \"c86_4g_ssecvtsf_si_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"sseicvt\")\r\n+\t\t\t\t\t(and (match_operand:SF 1 \"memory_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp3,c86-4g-ieu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssecvtdf_si\" 5\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t (and (match_operand:DF 1 \"register_operand\")\r\n+\t\t\t\t\t(and (eq_attr \"type\" \"sseicvt\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"none\")))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp3,c86-4g-ieu0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssecvtdf_si_load\" 12\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"SI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"sseicvt\")\r\n+\t\t\t\t\t(and (match_operand:DF 1 \"memory_operand\")\r\n+\t\t\t\t\t (eq_attr \"memory\" \"load\")))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp3,c86-4g-ieu0\")\r\n+\r\n+;; All other used ssecvt fp3 pipes\r\n+;; Check: Need to revisit this again.\r\n+;; Some SSE converts may use different pipe combinations.\r\n+(define_insn_reservation \"c86_4g_ssecvt\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssecvt_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"type\" \"ssecvt\")\r\n+\t\t\t\t (and (eq_attr \"c86_attr\" \"other\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1\")\r\n+\r\n+;; SSE div\r\n+(define_insn_reservation \"c86_4g_ssediv_ss_ps\" 10\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V4SF,SF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1*10\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_ss_ps_load\" 17\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V4SF,SF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1*10\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_sd_pd\" 13\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"V2DF,DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp1*13\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_sd_pd_load\" 20\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t (eq_attr \"mode\" \"V2DF,DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp1*13\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_avx256_ps\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"type\" \"ssediv\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp1*10\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_avx256_ps_load\" 17\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp1*10\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_avx256_pd\" 13\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V4DF\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp1*13\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssediv_avx256_pd_load\" 20\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V4DF\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssediv\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp1*13\")\r\n+;; SSE MUL\r\n+(define_insn_reservation \"c86_4g_ssemul_ss_ps\" 3\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"V8SF,V4SF,SF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssemul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssemul_ss_ps_load\" 10\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"V8SF,V4SF,SF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssemul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssemul_sd_pd\" 4\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"V4DF,V2DF,DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssemul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_ssemul_sd_pd_load\" 11\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"V4DF,V2DF,DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssemul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+;;SSE imul\r\n+(define_insn_reservation \"c86_4g_sseimul\" 3\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseimul_avx256\" 4\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseimul_load\" 10\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseimul_avx256_load\" 11\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseimul_di\" 3\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"DI\")\r\n+\t\t\t\t (and (eq_attr \"memory\" \"none\")\r\n+\t\t\t\t\t(eq_attr \"type\" \"sseimul\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sseimul_load_di\" 10\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"DI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"sseimul\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0\")\r\n+\r\n+;; SSE compares\r\n+(define_insn_reservation \"c86_4g_sse_cmp\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t(eq_attr \"mode\" \"SF,DF,V4SF,V2DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_cmp_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t\t (eq_attr \"mode\" \"SF,DF,V4SF,V2DF\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_cmp_avx256\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t\"c86-4g-double,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_cmp_avx256_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"V8SF,V4DF\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fp0|c86-4g-fp2\")\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_icmp\" 1\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"QI,HI,SI,DI,TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"none\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-fpu\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_icmp_load\" 8\r\n+\t\t\t (and (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t\t (eq_attr \"mode\" \"QI,HI,SI,DI,TI\"))\r\n+\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t (eq_attr \"memory\" \"load\")))\r\n+\t\t\t \"c86-4g-direct,c86-4g-load,c86-4g-fpu\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_icmp_avx256\" 1\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"none\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-fpu\")\r\n+\r\n+\r\n+(define_insn_reservation \"c86_4g_sse_icmp_avx256_load\" 8\r\n+\t\t\t (and (eq_attr \"cpu\" \"c86_4g_m4,c86_4g_m6\")\r\n+\t\t\t (and (eq_attr \"mode\" \"OI\")\r\n+\t\t\t\t (and (eq_attr \"type\" \"ssecmp\")\r\n+\t\t\t\t\t(eq_attr \"memory\" \"load\"))))\r\n+\t\t\t \"c86-4g-double,c86-4g-load,c86-4g-fpu\")\r\ndiff --git a/gcc/config/i386/cpuid.h b/gcc/config/i386/cpuid.h\r\nindex f493360b1..c48556afa 100644\r\n--- a/gcc/config/i386/cpuid.h\r\n+++ b/gcc/config/i386/cpuid.h\r\n@@ -235,6 +235,10 @@\r\n #define signature_SHANGHAI_ecx\t0x20206961\r\n #define signature_SHANGHAI_edx\t0x68676e61\r\n \r\n+#define signature_HYGON_ebx\t0x6f677948\r\n+#define signature_HYGON_ecx\t0x656e6975\r\n+#define signature_HYGON_edx\t0x6e65476e\r\n+\r\n #ifndef __x86_64__\r\n /* At least one cpu (Winchip 2) does not set %ebx and %ecx\r\n for cpuid leaf 1. Forcibly zero the two registers before\r\ndiff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc\r\nindex 1d0ad950a..e4d82b78b 100644\r\n--- a/gcc/config/i386/driver-i386.cc\r\n+++ b/gcc/config/i386/driver-i386.cc\r\n@@ -501,6 +501,16 @@ const char *host_detect_local_cpu (int argc, const char **argv)\r\n else\r\n \tprocessor = PROCESSOR_PENTIUM;\r\n }\r\n+ else if (vendor == VENDOR_HYGON)\r\n+ {\r\n+ processor = PROCESSOR_GENERIC;\r\n+ if (model == 4)\r\n+\tprocessor = PROCESSOR_C86_4G_M4;\r\n+ else if (model == 6)\r\n+\tprocessor = PROCESSOR_C86_4G_M6;\r\n+ else if (model == 7)\r\n+\tprocessor = PROCESSOR_C86_4G_M7;\r\n+ }\r\n else if (vendor == VENDOR_CENTAUR)\r\n {\r\n processor = PROCESSOR_GENERIC;\r\n@@ -850,6 +860,15 @@ const char *host_detect_local_cpu (int argc, const char **argv)\r\n case PROCESSOR_SHIJIDADAO:\r\n cpu = \"shijidadao\";\r\n break;\r\n+ case PROCESSOR_C86_4G_M4:\r\n+ cpu = \"c86-4g-m4\";\r\n+ break;\r\n+ case PROCESSOR_C86_4G_M6:\r\n+ cpu = \"c86-4g-m6\";\r\n+ break;\r\n+ case PROCESSOR_C86_4G_M7:\r\n+ cpu = \"c86-4g-m7\";\r\n+ break;\r\n \r\n default:\r\n /* Use something reasonable. */\r\ndiff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc\r\nindex 15e82956d..bf686c359 100644\r\n--- a/gcc/config/i386/i386-c.cc\r\n+++ b/gcc/config/i386/i386-c.cc\r\n@@ -303,7 +303,18 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,\r\n def_or_undef (parse_in, \"__novalake\");\r\n def_or_undef (parse_in, \"__novalake__\");\r\n break;\r\n-\r\n+ case PROCESSOR_C86_4G_M4:\r\n+ def_or_undef (parse_in, \"__c86_4g_m4\");\r\n+ def_or_undef (parse_in, \"__c86_4g_m4__\");\r\n+ break;\r\n+ case PROCESSOR_C86_4G_M6:\r\n+ def_or_undef (parse_in, \"__c86_4g_m6\");\r\n+ def_or_undef (parse_in, \"__c86_4g_m6__\");\r\n+ break;\r\n+ case PROCESSOR_C86_4G_M7:\r\n+ def_or_undef (parse_in, \"__c86_4g_m7\");\r\n+ def_or_undef (parse_in, \"__c86_4g_m7__\");\r\n+ break;\r\n /* use PROCESSOR_max to not set/unset the arch macro. */\r\n case PROCESSOR_max:\r\n break;\r\n@@ -512,6 +523,15 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,\r\n case PROCESSOR_NOVALAKE:\r\n def_or_undef (parse_in, \"__tune_novalake__\");\r\n break;\r\n+ case PROCESSOR_C86_4G_M4:\r\n+ def_or_undef (parse_in, \"__tune_c86_4g_m4__\");\r\n+ break;\r\n+ case PROCESSOR_C86_4G_M6:\r\n+ def_or_undef (parse_in, \"__tune_c86_4g_m6__\");\r\n+ break;\r\n+ case PROCESSOR_C86_4G_M7:\r\n+ def_or_undef (parse_in, \"__tune_c86_4g_m7__\");\r\n+ break;\r\n case PROCESSOR_INTEL:\r\n case PROCESSOR_GENERIC:\r\n break;\r\ndiff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc\r\nindex 7459cde4b..7ffe9cd2a 100644\r\n--- a/gcc/config/i386/i386-options.cc\r\n+++ b/gcc/config/i386/i386-options.cc\r\n@@ -185,6 +185,10 @@ along with GCC; see the file COPYING3. If not see\r\n #define m_ZNVER (m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ZNVER5 | m_ZNVER6)\r\n #define m_AMD_MULTIPLE (m_ATHLON_K8 | m_AMDFAM10 | m_BDVER | m_BTVER \\\r\n \t\t\t| m_ZNVER)\r\n+#define m_C86_4G_M4 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M4)\r\n+#define m_C86_4G_M6 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M6)\r\n+#define m_C86_4G_M7 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M7)\r\n+#define m_C86_4G (m_C86_4G_M4 | m_C86_4G_M6 | m_C86_4G_M7)\r\n \r\n #define m_GENERIC (HOST_WIDE_INT_1U<<PROCESSOR_GENERIC)\r\n \r\n@@ -814,7 +818,10 @@ static const struct processor_costs *processor_cost_table[] =\r\n &znver3_cost,\t\t/* PROCESSOR_ZNVER3.\t\t*/\r\n &znver4_cost,\t\t/* PROCESSOR_ZNVER4.\t\t*/\r\n &znver5_cost,\t\t/* PROCESSOR_ZNVER5.\t\t*/\r\n- &znver5_cost\t\t/* PROCESSOR_ZNVER6.\t\t*/\r\n+ &znver5_cost,\t\t/* PROCESSOR_ZNVER6.\t\t*/\r\n+ &c86_4g_m4_cost,\t/* PROCESSOR_C86_4G_M4.\t\t*/\r\n+ &c86_4g_m6_cost,\t/* PROCESSOR_C86_4G_M6.\t\t*/\r\n+ &c86_4g_m7_cost\t/* PROCESSOR_C86_4G_M7.\t\t*/\r\n };\r\n \r\n /* Guarantee that the array is aligned with enum processor_type. */\r\ndiff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc\r\nindex 4c32e2178..f61ec9e4f 100644\r\n--- a/gcc/config/i386/i386.cc\r\n+++ b/gcc/config/i386/i386.cc\r\n@@ -25691,7 +25691,10 @@ ix86_reassociation_width (unsigned int op, machine_mode mode)\r\n /* Znver1-4 Integer vector instructions execute in FP unit\r\n \t and can execute 3 additions and one multiplication per cycle. */\r\n if ((ix86_tune == PROCESSOR_ZNVER1 || ix86_tune == PROCESSOR_ZNVER2\r\n-\t || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4)\r\n+\t || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4\r\n+\t || ix86_tune == PROCESSOR_C86_4G_M4\r\n+\t || ix86_tune == PROCESSOR_C86_4G_M6\r\n+\t || ix86_tune == PROCESSOR_C86_4G_M7)\r\n \t && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS)\r\n \treturn 1;\r\n /* Znver5 can do 2 integer multiplications per cycle with latency\r\ndiff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h\r\nindex 888edfed8..80dafd1f9 100644\r\n--- a/gcc/config/i386/i386.h\r\n+++ b/gcc/config/i386/i386.h\r\n@@ -2384,6 +2384,9 @@ enum processor_type\r\n PROCESSOR_ZNVER4,\r\n PROCESSOR_ZNVER5,\r\n PROCESSOR_ZNVER6,\r\n+ PROCESSOR_C86_4G_M4,\r\n+ PROCESSOR_C86_4G_M6,\r\n+ PROCESSOR_C86_4G_M7,\r\n PROCESSOR_max\r\n };\r\n \r\n@@ -2547,6 +2550,21 @@ constexpr wide_int_bitmask PTA_LUJIAZUI = PTA_64BIT | PTA_MMX | PTA_SSE\r\n constexpr wide_int_bitmask PTA_YONGFENG = PTA_LUJIAZUI | PTA_AVX | PTA_AVX2\r\n | PTA_F16C | PTA_FMA | PTA_SHA;\r\n \r\n+constexpr wide_int_bitmask PTA_C86_4G_M4 = PTA_64BIT | PTA_MMX | PTA_SSE\r\n+ | PTA_SSE2 | PTA_SSE3 | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3\r\n+ | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2\r\n+ | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE\r\n+ | PTA_XSAVEOPT | PTA_FSGSBASE | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX\r\n+ | PTA_RDSEED | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES\r\n+ | PTA_SHA | PTA_LZCNT | PTA_POPCNT;\r\n+constexpr wide_int_bitmask PTA_C86_4G_M6 = PTA_C86_4G_M4;\r\n+constexpr wide_int_bitmask PTA_C86_4G_M7 = PTA_C86_4G_M4 | PTA_AVX512F\r\n+ | PTA_AVX512DQ | PTA_AVX512IFMA | PTA_AVX512CD | PTA_AVX512BW | PTA_AVX512VL\r\n+ | PTA_AVX512BF16 | PTA_AVX512VBMI | PTA_AVX512VBMI2 | PTA_GFNI\r\n+ | PTA_AVX512VNNI | PTA_AVX512BITALG | PTA_AVX512VPOPCNTDQ\r\n+ | PTA_AVX512VP2INTERSECT | PTA_VAES | PTA_AVXVNNI | PTA_VPCLMULQDQ\r\n+ | PTA_WBNOINVD | PTA_CLWB;\r\n+\r\n #ifndef GENERATOR_FILE\r\n \r\n #include \"insn-attr-common.h\"\r\ndiff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md\r\nindex c05161fc8..5d4392e07 100644\r\n--- a/gcc/config/i386/i386.md\r\n+++ b/gcc/config/i386/i386.md\r\n@@ -530,7 +530,7 @@ (define_constants\r\n (define_attr \"cpu\" \"none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem,\r\n \t\t atom,slm,glm,haswell,generic,lujiazui,yongfeng,amdfam10,bdver1,\r\n \t\t bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4,\r\n-\t\t znver5,znver6\"\r\n+\t\t znver5,znver6,c86_4g_m4,c86_4g_m6,c86_4g_m7\"\r\n (const (symbol_ref \"ix86_schedule\")))\r\n \r\n ;; A basic instruction type. Refinements due to arguments to be\r\n@@ -1427,6 +1427,8 @@ (define_mode_iterator PTR\r\n (include \"haswell.md\")\r\n (include \"lujiazui.md\")\r\n (include \"yongfeng.md\")\r\n+(include \"c86-4g.md\")\r\n+(include \"c86-4g-m7.md\")\r\n \r\n \f\r\n ;; Operand and operator predicates and constraints\r\n@@ -2038,6 +2040,7 @@ (define_insn \"*cmpi<unord>xf_i387\"\r\n (set_attr \"athlon_decode\" \"vector\")\r\n (set_attr \"amdfam10_decode\" \"direct\")\r\n (set_attr \"bdver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"znver1_decode\" \"double\")])\r\n \r\n (define_insn \"*cmpx<unord><MODEF:mode>\"\r\n@@ -2091,6 +2094,7 @@ (define_insn \"*cmpi<unord><MODEF:mode>\"\r\n (set_attr \"amdfam10_decode\" \"direct\")\r\n (set_attr \"bdver1_decode\" \"double\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set (attr \"enabled\")\r\n (if_then_else\r\n (match_test (\"SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH\"))\r\n@@ -2482,6 +2486,7 @@ (define_insn \"*movxi_internal_avx512f\"\r\n }\r\n }\r\n [(set_attr \"type\" \"sselog1,sselog1,ssemov,ssemov\")\r\n+ (set_attr \"c86_attr\" \"sselogic,sselogic,*,*\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -2506,6 +2511,7 @@ (define_insn \"*movoi_internal_avx\"\r\n }\r\n [(set_attr \"isa\" \"*,avx2,*,*\")\r\n (set_attr \"type\" \"sselog1,sselog1,ssemov,ssemov\")\r\n+ (set_attr \"c86_attr\" \"sselogic,sselogic,*,*\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"mode\" \"OI\")])\r\n \r\n@@ -2548,6 +2554,11 @@ (define_insn \"*movti_internal\"\r\n \t (const_string \"sselog1\")\r\n \t ]\r\n \t (const_string \"ssemov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"2,3\")\r\n+\t (const_string \"sselogic\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"prefix\")\r\n (if_then_else (eq_attr \"type\" \"sselog1,ssemov\")\r\n (const_string \"maybe_vex\")\r\n@@ -2691,6 +2702,11 @@ (define_insn \"*movdi_internal\"\r\n \t (const_string \"lea\")\r\n \t ]\r\n \t (const_string \"imov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"12\")\r\n+\t (const_string \"sselogic\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"modrm\")\r\n (if_then_else\r\n (and (eq_attr \"alternative\" \"4\") (eq_attr \"type\" \"imov\"))\r\n@@ -2911,6 +2927,11 @@ (define_insn \"*movsi_internal\"\r\n \t (const_string \"lea\")\r\n \t ]\r\n \t (const_string \"imov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"8\")\r\n+\t (const_string \"sselogic\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"prefix\")\r\n (if_then_else (eq_attr \"type\" \"sselog1,ssemov\")\r\n (const_string \"maybe_vex\")\r\n@@ -3085,6 +3106,11 @@ (define_insn \"*movhi_internal\"\r\n \t (const_string \"imovx\")\r\n \t ]\r\n \t (const_string \"imov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"11\")\r\n+\t (const_string \"sselogic\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"prefix\")\r\n \t(cond [(eq_attr \"alternative\" \"4,5,6,7,8\")\r\n \t\t (const_string \"vex\")\r\n@@ -3366,6 +3392,7 @@ (define_insn \"swap<mode>\"\r\n (set_attr \"pent_pair\" \"np\")\r\n (set_attr \"athlon_decode\" \"vector\")\r\n (set_attr \"amdfam10_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"bdver1_decode\" \"double\")])\r\n \r\n (define_insn \"*swap<mode>\"\r\n@@ -3391,6 +3418,7 @@ (define_insn \"*swap<mode>\"\r\n (set_attr \"pent_pair\" \"np\")\r\n (set_attr \"athlon_decode\" \"vector\")\r\n (set_attr \"amdfam10_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"bdver1_decode\" \"double\")])\r\n \r\n (define_peephole2\r\n@@ -4068,6 +4096,7 @@ (define_insn \"*movtf_internal\"\r\n }\r\n [(set_attr \"isa\" \"*,*,*,x64,x64\")\r\n (set_attr \"type\" \"sselog1,ssemov,ssemov,multi,multi\")\r\n+ (set_attr \"c86_attr\" \"sselogic,*,*,*,*\")\r\n (set (attr \"prefix\")\r\n (if_then_else (eq_attr \"type\" \"sselog1,ssemov\")\r\n (const_string \"maybe_vex\")\r\n@@ -4239,6 +4268,11 @@ (define_insn \"*movdf_internal\"\r\n \t\t (const_string \"sselog1\")\r\n \t ]\r\n \t (const_string \"ssemov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"12,16\")\r\n+\t (const_string \"sselogic\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"modrm\")\r\n (if_then_else (eq_attr \"alternative\" \"11\")\r\n (const_string \"0\")\r\n@@ -4411,6 +4445,11 @@ (define_insn \"*movsf_internal\"\r\n \t\t (const_string \"mmxmov\")\r\n \t ]\r\n \t (const_string \"ssemov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"5\")\r\n+\t (const_string \"sselogic\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"prefix\")\r\n (if_then_else (eq_attr \"type\" \"sselog1,ssemov\")\r\n (const_string \"maybe_vex\")\r\n@@ -4759,6 +4798,14 @@ (define_insn \"*zero_extendsidi2\"\r\n \t (const_string \"mskmov\")\r\n \t ]\r\n \t (const_string \"imovx\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"8,9,10,11\")\r\n+\t\t (if_then_else (and (match_test \"SSE_REG_P (operands[0])\")\r\n+\t\t\t\t (match_test \"SSE_REG_P (operands[1])\"))\r\n+\t\t (const_string \"vpmovx\")\r\n+\t\t (const_string \"*\"))\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"prefix_extra\")\r\n (if_then_else (eq_attr \"alternative\" \"10,11\")\r\n (const_string \"1\")\r\n@@ -5168,6 +5215,10 @@ (define_insn \"extendhisi2\"\r\n (if_then_else (eq_attr \"prefix_0f\" \"0\")\r\n \t(const_string \"double\")\r\n \t(const_string \"direct\")))\r\n+ (set (attr \"c86_decode\")\r\n+ (if_then_else (eq_attr \"prefix_0f\" \"0\")\r\n+\t(const_string \"double\")\r\n+\t(const_string \"direct\")))\r\n (set (attr \"modrm\")\r\n (if_then_else (eq_attr \"prefix_0f\" \"0\")\r\n \t(const_string \"0\")\r\n@@ -6075,6 +6126,7 @@ (define_insn \"floathi<mode>2\"\r\n [(set_attr \"type\" \"fmov\")\r\n (set_attr \"mode\" \"<MODE>\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"fp_int_src\" \"true\")])\r\n \r\n (define_insn \"float<SWI48x:mode>xf2\"\r\n@@ -6085,6 +6137,7 @@ (define_insn \"float<SWI48x:mode>xf2\"\r\n [(set_attr \"type\" \"fmov\")\r\n (set_attr \"mode\" \"XF\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"fp_int_src\" \"true\")])\r\n \r\n (define_expand \"float<SWI48x:mode><MODEF:mode>2\"\r\n@@ -6119,6 +6172,7 @@ (define_insn \"*float<SWI48:mode><MODEF:mode>2\"\r\n (set_attr \"amdfam10_decode\" \"*,vector,double\")\r\n (set_attr \"bdver1_decode\" \"*,double,direct\")\r\n (set_attr \"znver1_decode\" \"double,*,*\")\r\n+ (set_attr \"c86_decode\" \"double,*,*\")\r\n (set_attr \"fp_int_src\" \"true\")\r\n (set (attr \"enabled\")\r\n (if_then_else\r\n@@ -6157,6 +6211,7 @@ (define_insn \"*floatdi<MODEF:mode>2_i387\"\r\n [(set_attr \"type\" \"fmov\")\r\n (set_attr \"mode\" \"<MODEF:MODE>\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"fp_int_src\" \"true\")])\r\n \r\n ;; Try TARGET_USE_VECTOR_CONVERTS, but not so hard as to require extra memory\r\n@@ -12929,6 +12984,7 @@ (define_insn_and_split \"*anddi_1_btr\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n ;; Turn *anddi_1 into *andsi_1_zext if possible.\r\n@@ -13964,6 +14020,7 @@ (define_insn_and_split \"*iordi_1_bts\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_insn_and_split \"*xordi_1_btc\"\r\n@@ -13988,6 +14045,7 @@ (define_insn_and_split \"*xordi_1_btc\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n ;; Optimize a ^ ((a ^ b) & mask) to (~mask & a) | (b & mask)\r\n@@ -19167,6 +19225,7 @@ (define_insn \"*<btsc><mode>\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n ;; Avoid useless masking of count operand.\r\n@@ -19235,6 +19294,7 @@ (define_insn \"*btr<mode>\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n ;; Avoid useless masking of count operand.\r\n@@ -19376,6 +19436,7 @@ (define_insn \"*btsq_imm\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_insn \"*btrq_imm\"\r\n@@ -19389,6 +19450,7 @@ (define_insn \"*btrq_imm\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_insn \"*btcq_imm\"\r\n@@ -19402,6 +19464,7 @@ (define_insn \"*btcq_imm\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n ;; Allow Nocona to avoid these instructions if a register is available.\r\n@@ -21379,6 +21442,7 @@ (define_insn_and_split \"*tzcnt<mode>_1\"\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"prefix_rep\" \"1\")\r\n (set_attr \"btver2_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n ; False dependency happens when destination is only updated by tzcnt,\r\n@@ -21398,6 +21462,7 @@ (define_insn \"*tzcnt<mode>_1_falsedep\"\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"prefix_rep\" \"1\")\r\n (set_attr \"btver2_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n (define_insn \"*bsf<mode>_1\"\r\n@@ -21412,6 +21477,7 @@ (define_insn \"*bsf<mode>_1\"\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"btver2_decode\" \"double\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n (define_insn_and_split \"ctz<mode>2\"\r\n@@ -21474,6 +21540,7 @@ (define_insn \"*ctz<mode>2_falsedep\"\r\n gcc_unreachable ();\r\n }\r\n [(set_attr \"type\" \"alu1\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"prefix_rep\" \"1\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n@@ -21499,6 +21566,7 @@ (define_insn_and_split \"*ctzsi2_zext\"\r\n (clobber (reg:CC FLAGS_REG))])]\r\n \"ix86_expand_clear (operands[0]);\"\r\n [(set_attr \"type\" \"alu1\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"prefix_rep\" \"1\")\r\n (set_attr \"mode\" \"SI\")])\r\n@@ -21519,6 +21587,7 @@ (define_insn \"*ctzsi2_zext_falsedep\"\r\n \"TARGET_BMI && TARGET_64BIT\"\r\n \"tzcnt{l}\\t{%1, %k0|%k0, %1}\"\r\n [(set_attr \"type\" \"alu1\")\r\n+ (set_attr \"c86_decode\" \"double\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"prefix_rep\" \"1\")\r\n (set_attr \"mode\" \"SI\")])\r\n@@ -21596,6 +21665,7 @@ (define_insn \"bsr_rex64\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_insn \"bsr_rex64_1\"\r\n@@ -21608,6 +21678,7 @@ (define_insn \"bsr_rex64_1\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_insn \"bsr_rex64_1_zext\"\r\n@@ -21623,6 +21694,7 @@ (define_insn \"bsr_rex64_1_zext\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_insn \"bsr\"\r\n@@ -21637,6 +21709,7 @@ (define_insn \"bsr\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"SI\")])\r\n \r\n (define_insn \"bsr_1\"\r\n@@ -21649,6 +21722,7 @@ (define_insn \"bsr_1\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"SI\")])\r\n \r\n (define_insn \"bsr_zext_1\"\r\n@@ -21663,6 +21737,7 @@ (define_insn \"bsr_zext_1\"\r\n [(set_attr \"type\" \"alu1\")\r\n (set_attr \"prefix_0f\" \"1\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"SI\")])\r\n \r\n ; As bsr is undefined behavior on zero and for other input\r\n@@ -22977,6 +23052,7 @@ (define_insn \"*bswaphi2_movbe\"\r\n (set_attr \"pent_pair\" \"np,*,*\")\r\n (set_attr \"athlon_decode\" \"vector,*,*\")\r\n (set_attr \"amdfam10_decode\" \"double,*,*\")\r\n+ (set_attr \"c86_decode\" \"vector,*,*\")\r\n (set_attr \"bdver1_decode\" \"double,*,*\")\r\n (set_attr \"mode\" \"QI,HI,HI\")])\r\n \r\n@@ -22989,6 +23065,7 @@ (define_insn \"*bswaphi2\"\r\n (set_attr \"pent_pair\" \"np\")\r\n (set_attr \"athlon_decode\" \"vector\")\r\n (set_attr \"amdfam10_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"bdver1_decode\" \"double\")\r\n (set_attr \"mode\" \"QI\")])\r\n \r\n@@ -23013,6 +23090,7 @@ (define_insn \"bswaphisi2_lowpart\"\r\n (set_attr \"pent_pair\" \"np\")\r\n (set_attr \"athlon_decode\" \"vector\")\r\n (set_attr \"amdfam10_decode\" \"double\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"bdver1_decode\" \"double\")\r\n (set_attr \"mode\" \"QI\")])\r\n \r\n@@ -24093,6 +24171,7 @@ (define_insn \"sqrtxf2\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"mode\" \"XF\")\r\n (set_attr \"athlon_decode\" \"direct\")\r\n+ (set_attr \"c86_attr\" \"sqrt\")\r\n (set_attr \"amdfam10_decode\" \"direct\")\r\n (set_attr \"bdver1_decode\" \"direct\")])\r\n \r\n@@ -24261,6 +24340,7 @@ (define_insn \"fpremxf4_i387\"\r\n \"fprem\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"fmodxf3\"\r\n@@ -24333,6 +24413,7 @@ (define_insn \"fprem1xf4_i387\"\r\n \"fprem1\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"remainderxf3\"\r\n@@ -24408,6 +24489,7 @@ (define_insn \"<sincos>xf2\"\r\n \"f<sincos>\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"<sincos><mode>2\"\r\n@@ -24439,6 +24521,7 @@ (define_insn \"sincosxf3\"\r\n \"fsincos\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"sincos<mode>3\"\r\n@@ -24472,6 +24555,7 @@ (define_insn \"fptanxf4_i387\"\r\n \"fptan\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"tanxf2\"\r\n@@ -24514,6 +24598,7 @@ (define_insn \"atan2xf3\"\r\n \"fpatan\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"atan2<mode>3\"\r\n@@ -24817,6 +24902,7 @@ (define_insn \"fyl2xxf3_i387\"\r\n \"fyl2x\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"logxf2\"\r\n@@ -24914,6 +25000,7 @@ (define_insn \"fyl2xp1xf3_i387\"\r\n \"fyl2xp1\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"log1pxf2\"\r\n@@ -24954,6 +25041,7 @@ (define_insn \"fxtractxf3_i387\"\r\n \"fxtract\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"logbxf2\"\r\n@@ -25034,6 +25122,7 @@ (define_insn \"*f2xm1xf2_i387\"\r\n \"f2xm1\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_insn \"fscalexf4_i387\"\r\n@@ -25049,6 +25138,7 @@ (define_insn \"fscalexf4_i387\"\r\n \"fscale\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"expNcorexf3\"\r\n@@ -25367,6 +25457,7 @@ (define_insn \"rintxf2\"\r\n \"frndint\"\r\n [(set_attr \"type\" \"fpspc\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"XF\")])\r\n \r\n (define_expand \"rinthf2\"\r\n@@ -27185,6 +27276,7 @@ (define_insn \"<code><mode>3\"\r\n v<maxmin_float><ssemodesuffix>\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"type\" \"sseadd\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -27229,6 +27321,7 @@ (define_insn \"*ieee_s<ieee_maxmin><mode>3\"\r\n v<ieee_maxmin><ssemodesuffix>\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"prefix\" \"orig,maybe_evex\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"type\" \"sseadd\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\ndiff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md\r\nindex a23474716..38bb9419a 100644\r\n--- a/gcc/config/i386/mmx.md\r\n+++ b/gcc/config/i386/mmx.md\r\n@@ -664,6 +664,7 @@ (define_insn \"sse_movntq\"\r\n [(set_attr \"isa\" \"*,x64\")\r\n (set_attr \"mmx_isa\" \"native,*\")\r\n (set_attr \"type\" \"mmxmov,ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_expand \"movq_<mode>_to_sse\"\r\n@@ -1324,6 +1325,7 @@ (define_insn \"*mmx_blendps\"\r\n vblendps\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n@@ -1344,6 +1346,7 @@ (define_insn \"mmx_blendvps\"\r\n vblendvps\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blendv\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n@@ -3599,6 +3602,7 @@ (define_insn \"*mmx_pmaddwd\"\r\n [(set_attr \"isa\" \"*,sse2_noavx,avx\")\r\n (set_attr \"mmx_isa\" \"native,*,*\")\r\n (set_attr \"type\" \"mmxmul,sseiadd,sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"mode\" \"DI,TI,TI\")])\r\n \r\n (define_expand \"mmx_pmulhrwv4hi3\"\r\n@@ -4346,6 +4350,7 @@ (define_insn \"mmx_pblendvb_v8qi\"\r\n vpblendvb\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blendv\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n@@ -4422,6 +4427,7 @@ (define_insn \"mmx_pblendvb_<mode>\"\r\n vpblendvb\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blendv\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n@@ -5040,6 +5046,7 @@ (define_insn \"sse4_1_<code>v4qiv4hi2\"\r\n \"%vpmov<extsuffix>bw\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -5072,6 +5079,7 @@ (define_insn \"sse4_1_<code>v2hiv2si2\"\r\n \"%vpmov<extsuffix>wd\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -5104,6 +5112,7 @@ (define_insn \"sse4_1_<code>v2qiv2si2\"\r\n \"%vpmov<extsuffix>bd\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -5130,6 +5139,7 @@ (define_insn \"sse4_1_<code>v2qiv2hi2\"\r\n \"%vpmov<extsuffix>bw\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -5306,6 +5316,7 @@ (define_insn \"*mmx_pinsrd\"\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -5345,6 +5356,7 @@ (define_insn \"*mmx_pinsrw\"\r\n [(set_attr \"isa\" \"*,sse2_noavx,avx,sse4\")\r\n (set_attr \"mmx_isa\" \"native,*,*,*\")\r\n (set_attr \"type\" \"mmxcvt,sselog,sselog,sselog\")\r\n+ (set_attr \"c86_attr\" \"insr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"mode\" \"DI,TI,TI,TI\")])\r\n \r\n@@ -5395,6 +5407,7 @@ (define_insn \"*mmx_pinsrb\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insr\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -5417,6 +5430,7 @@ (define_insn \"*mmx_pextrw\"\r\n (set_attr \"addr\" \"*,*,gpr16,*\")\r\n (set_attr \"mmx_isa\" \"native,*,*,*\")\r\n (set_attr \"type\" \"mmxcvt,sselog1,sselog1,sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_vex,maybe_vex,maybe_evex\")\r\n (set_attr \"mode\" \"DI,TI,TI,TI\")])\r\n@@ -5452,6 +5466,7 @@ (define_insn \"*mmx_pextrw<mode>\"\r\n (set_attr \"addr\" \"*,*,gpr16,*,*,*\")\r\n (set_attr \"mmx_isa\" \"native,*,*,*,*,*\")\r\n (set_attr \"type\" \"mmxcvt,sselog1,sselog1,sselog1,sseishft1,sseishft1\")\r\n+ (set_attr \"c86_attr\" \"extr,extr,extr,extr,*,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_vex,maybe_vex,maybe_evex,orig,maybe_evex\")\r\n (set_attr \"mode\" \"DI,TI,TI,TI,TI,TI\")])\r\n@@ -5470,6 +5485,7 @@ (define_insn \"*mmx_pextrw_zext\"\r\n [(set_attr \"isa\" \"*,sse2\")\r\n (set_attr \"mmx_isa\" \"native,*\")\r\n (set_attr \"type\" \"mmxcvt,sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_vex\")\r\n (set_attr \"mode\" \"DI,TI\")])\r\n@@ -5488,6 +5504,7 @@ (define_insn \"*mmx_pextrb\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx,avx\")\r\n (set_attr \"addr\" \"*,gpr16,*,*\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -5503,6 +5520,7 @@ (define_insn \"*mmx_pextrb_zext\"\r\n \"%vpextrb\\t{%2, %1, %k0|%k0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -5629,6 +5647,7 @@ (define_insn \"*mmx_pblendw64\"\r\n vpblendw\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n@@ -5647,6 +5666,7 @@ (define_insn \"*mmx_pblendw32\"\r\n vpblendw\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n@@ -5829,6 +5849,7 @@ (define_insn \"*vec_extractv2si_1\"\r\n \t\t (const_string \"*\")))\r\n (set_attr \"mmx_isa\" \"native,*,*,*,*,native,*,*\")\r\n (set_attr \"type\" \"mmxcvt,ssemov,ssemov,sseshuf1,sseshuf1,mmxmov,ssemov,imov\")\r\n+ (set_attr \"c86_attr\" \"*,extr,extr,*,*,*,*,*\")\r\n (set (attr \"length_immediate\")\r\n (if_then_else (eq_attr \"alternative\" \"1,2,3,4\")\r\n \t\t (const_string \"1\")\r\n@@ -5856,6 +5877,7 @@ (define_insn \"*vec_extractv2si_1_zext\"\r\n \"%vpextrd\\t{$1, %1, %k0|%k0, %1, 1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -6010,6 +6032,7 @@ (define_insn \"*pinsrw\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx,sse4\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n@@ -6062,6 +6085,7 @@ (define_insn \"*pinsrb\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n@@ -6080,6 +6104,7 @@ (define_insn \"*pextrw\"\r\n [(set_attr \"isa\" \"*,sse4_noavx,avx\")\r\n (set_attr \"addr\" \"*,gpr16,*\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -6113,6 +6138,7 @@ (define_insn \"*pextrw<mode>\"\r\n [(set_attr \"isa\" \"*,sse4_noavx,avx,noavx,avx\")\r\n (set_attr \"addr\" \"*,gpr16,*,*,*\")\r\n (set_attr \"type\" \"sselog1,sselog1,sselog1,sseishft1,sseishft1\")\r\n+ (set_attr \"c86_attr\" \"extr,extr,extr,*,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex,orig,maybe_evex,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -6126,6 +6152,7 @@ (define_insn \"*pextrw_zext\"\r\n \"TARGET_SSE2\"\r\n \"%vpextrw\\t{%2, %1, %k0|%k0, %1, %2}\"\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -6144,6 +6171,7 @@ (define_insn \"*pextrb\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx,avx\")\r\n (set_attr \"addr\" \"*,gpr16,*,*\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -6159,6 +6187,7 @@ (define_insn \"*pextrb_zext\"\r\n \"%vpextrb\\t{%2, %1, %k0|%k0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -6511,6 +6540,7 @@ (define_insn \"*mmx_psadbw\"\r\n [(set_attr \"isa\" \"*,sse2_noavx,avx\")\r\n (set_attr \"mmx_isa\" \"native,*,*\")\r\n (set_attr \"type\" \"mmxshft,sseiadd,sseiadd\")\r\n+ (set_attr \"c86_attr\" \"sadbw\")\r\n (set_attr \"mode\" \"DI,TI,TI\")])\r\n \r\n (define_expand \"reduc_<code>_scal_<mode>\"\r\n@@ -6890,6 +6920,7 @@ (define_insn \"*mmx_maskmovq\"\r\n \"maskmovq\\t{%2, %1|%1, %2}\"\r\n [(set_attr \"type\" \"mmxcvt\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"DI\")])\r\n \r\n (define_int_iterator EMMS\r\ndiff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md\r\nindex a3f68ad9c..556f57988 100644\r\n--- a/gcc/config/i386/sse.md\r\n+++ b/gcc/config/i386/sse.md\r\n@@ -1794,6 +1794,11 @@ (define_insn \"<avx512>_blendm<mode>\"\r\n }\r\n }\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set (attr \"c86_attr\")\r\n+ (if_then_else (and (match_test \"REG_P (operands[1])\")\r\n+\t\t\t(match_test \"REGNO (operands[1]) != REGNO (operands[0])\"))\r\n+ (const_string \"blend\")\r\n+ (const_string \"*\")))\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -1808,6 +1813,7 @@ (define_insn \"<avx512>_blendm<mode>\"\r\n vmovdqu<ssescalarsize>\\t{%2, %0%{%3%}%N1|%0%{%3%}%N1, %2}\r\n vpblendm<sseintmodesuffix>\\t{%2, %1, %0%{%3%}|%0%{%3%}, %1, %2}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"*,blend\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -2034,6 +2040,7 @@ (define_insn \"sse2_movnti<mode>\"\r\n \"TARGET_SSE2\"\r\n \"movnti\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"prefix_data16\" \"0\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -2045,6 +2052,7 @@ (define_insn \"<sse>_movnt<mode>\"\r\n \"TARGET_SSE\"\r\n \"%vmovnt<ssemodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -2060,6 +2068,7 @@ (define_insn \"<sse2>_movnt<mode>\"\r\n (match_test \"TARGET_AVX\")\r\n (const_string \"*\")\r\n (const_string \"1\")))\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -2359,6 +2368,7 @@ (define_insn \"ktest<mode>\"\r\n \"ktest<mskmodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"mode\" \"<MODE>\")\r\n (set_attr \"type\" \"msklog\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"prefix\" \"vex\")])\r\n \r\n (define_insn \"*kortest<mode>\"\r\n@@ -2371,6 +2381,7 @@ (define_insn \"*kortest<mode>\"\r\n \"kortest<mskmodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"mode\" \"<MODE>\")\r\n (set_attr \"type\" \"msklog\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"prefix\" \"vex\")])\r\n \r\n (define_insn \"kortest<mode>_ccc\"\r\n@@ -2939,6 +2950,7 @@ (define_insn \"<sse>_rcp<mode>2\"\r\n (set_attr \"addr\" \"*,gpr16\")\r\n (set_attr \"atom_sse_attr\" \"rcp\")\r\n (set_attr \"btver2_sse_attr\" \"rcp\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -2958,6 +2970,7 @@ (define_insn \"sse_vmrcpv4sf2\"\r\n (set_attr \"addr\" \"*,gpr16\")\r\n (set_attr \"atom_sse_attr\" \"rcp\")\r\n (set_attr \"btver2_sse_attr\" \"rcp\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"SF\")])\r\n \r\n@@ -2978,6 +2991,7 @@ (define_insn \"*sse_vmrcpv4sf2\"\r\n (set_attr \"addr\" \"*,gpr16\")\r\n (set_attr \"atom_sse_attr\" \"rcp\")\r\n (set_attr \"btver2_sse_attr\" \"rcp\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"SF\")])\r\n \r\n@@ -3027,6 +3041,7 @@ (define_insn \"<mask_codefor>rcp14<mode><mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vrcp14<ssemodesuffix>\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3041,6 +3056,7 @@ (define_insn \"srcp14<mode>\"\r\n \"TARGET_AVX512F\"\r\n \"vrcp14<ssescalarmodesuffix>\\t{%1, %2, %0|%0, %2, %<iptr>1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3058,6 +3074,7 @@ (define_insn \"srcp14<mode>_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vrcp14<ssescalarmodesuffix>\\t{%1, %2, %0%{%4%}%N3|%0%{%4%}%N3, %2, %<iptr>1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3093,6 +3110,7 @@ (define_insn \"<sse>_sqrt<mode>2<mask_name><round_name>\"\r\n (set_attr \"type\" \"sse\")\r\n (set_attr \"atom_sse_attr\" \"sqrt\")\r\n (set_attr \"btver2_sse_attr\" \"sqrt\")\r\n+ (set_attr \"c86_attr\" \"sqrt\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3112,6 +3130,7 @@ (define_insn \"<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>\"\r\n (set_attr \"atom_sse_attr\" \"sqrt\")\r\n (set_attr \"prefix\" \"<round_scalar_prefix>\")\r\n (set_attr \"btver2_sse_attr\" \"sqrt\")\r\n+ (set_attr \"c86_attr\" \"sqrt\")\r\n (set_attr \"mode\" \"<ssescalarmode>\")])\r\n \r\n (define_insn \"*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>\"\r\n@@ -3131,6 +3150,7 @@ (define_insn \"*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>\"\r\n (set_attr \"atom_sse_attr\" \"sqrt\")\r\n (set_attr \"prefix\" \"<round_scalar_prefix>\")\r\n (set_attr \"btver2_sse_attr\" \"sqrt\")\r\n+ (set_attr \"c86_attr\" \"sqrt\")\r\n (set_attr \"mode\" \"<ssescalarmode>\")])\r\n \r\n (define_expand \"rsqrt<mode>2\"\r\n@@ -3181,6 +3201,7 @@ (define_insn \"<mask_codefor>rsqrt14<mode><mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vrsqrt14<ssemodesuffix>\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3195,6 +3216,7 @@ (define_insn \"rsqrt14<mode>\"\r\n \"TARGET_AVX512F\"\r\n \"vrsqrt14<ssescalarmodesuffix>\\t{%1, %2, %0|%0, %2, %<iptr>1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3212,6 +3234,7 @@ (define_insn \"rsqrt14_<mode>_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vrsqrt14<ssescalarmodesuffix>\\t{%1, %2, %0%{%4%}%N3|%0%{%4%}%N3, %2, %<iptr>1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"rcp\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3336,6 +3359,7 @@ (define_insn \"*<code><mode>3<mask_name><round_saeonly_name>\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd\")\r\n (set_attr \"btver2_sse_attr\" \"maxmin\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix\" \"<mask_prefix3>\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3469,6 +3493,7 @@ (define_insn \"ieee_<ieee_maxmin><mode>3<mask_name><round_saeonly_name>\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd\")\r\n (set_attr \"btver2_sse_attr\" \"maxmin\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix\" \"<mask_prefix3>\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -3493,6 +3518,7 @@ (define_insn \"*ieee_<ieee_maxmin><mode>3\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd\")\r\n (set_attr \"btver2_sse_attr\" \"maxmin\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set (attr \"prefix\")\r\n (cond [(eq_attr \"alternative\" \"0\")\r\n \t (const_string \"orig\")\r\n@@ -3540,6 +3566,7 @@ (define_insn \"*<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sse\")\r\n (set_attr \"btver2_sse_attr\" \"maxmin\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix\" \"<round_saeonly_scalar_prefix>\")\r\n (set_attr \"mode\" \"<ssescalarmode>\")])\r\n \r\n@@ -3736,6 +3763,7 @@ (define_insn \"avx_h<insn>v4df3\"\r\n \"TARGET_AVX\"\r\n \"vh<plusminus_mnemonic>pd\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"mode\" \"V4DF\")])\r\n@@ -3781,6 +3809,7 @@ (define_insn \"*sse3_haddv2df3\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"addr\" \"*,gpr16\")\r\n (set_attr \"type\" \"sseadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"V2DF\")])\r\n \r\n@@ -3803,6 +3832,7 @@ (define_insn \"sse3_hsubv2df3\"\r\n vhsubpd\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"*,gpr16\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"V2DF\")])\r\n@@ -3823,6 +3853,7 @@ (define_insn \"*sse3_haddv2df3_low\"\r\n vhaddpd\\t{%1, %1, %0|%0, %1, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"V2DF\")])\r\n \r\n@@ -3841,6 +3872,7 @@ (define_insn \"*sse3_hsubv2df3_low\"\r\n vhsubpd\\t{%1, %1, %0|%0, %1, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"V2DF\")])\r\n \r\n@@ -3884,6 +3916,7 @@ (define_insn \"avx_h<insn>v8sf3\"\r\n \"TARGET_AVX\"\r\n \"vh<plusminus_mnemonic>ps\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"mode\" \"V8SF\")])\r\n@@ -3915,6 +3948,7 @@ (define_insn \"sse3_h<insn>v4sf3\"\r\n vh<plusminus_mnemonic>ps\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"*,gpr16\")\r\n (set_attr \"atom_unit\" \"complex\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n@@ -4253,6 +4287,7 @@ (define_insn \"<mask_codefor>reducep<mode><mask_name><round_saeonly_name>\"\r\n \"TARGET_AVX512DQ || (VALID_AVX512FP16_REG_MODE (<MODE>mode))\"\r\n \"vreduce<ssemodesuffix>\\t{%2, <round_saeonly_mask_op3>%1, %0<mask_operand3>|%0<mask_operand3>, %1<round_saeonly_mask_op3>, %2}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -4269,6 +4304,7 @@ (define_insn \"reduces<mode><mask_scalar_name><round_saeonly_scalar_name>\"\r\n \"TARGET_AVX512DQ || (VALID_AVX512FP16_REG_MODE (<MODE>mode))\"\r\n \"vreduce<ssescalarmodesuffix>\\t{%3, <round_saeonly_scalar_mask_op4>%2, %1, %0<mask_scalar_operand4>|%0<mask_scalar_operand4>, %1, %<iptr>2<round_saeonly_scalar_mask_op4>, %3}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -4937,6 +4973,7 @@ (define_insn \"*<avx512>_eq<mode>3<mask_scalar_merge_name>_1\"\r\n vpcmpeq<ssemodesuffix>\\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}\r\n vptestnm<ssemodesuffix>\\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}\"\r\n [(set_attr \"type\" \"ssecmp\")\r\n+ (set_attr \"c86_attr\" \"*,ptest\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -5026,6 +5063,7 @@ (define_insn \"*<avx512>_eq<mode>3<mask_scalar_merge_name>_1\"\r\n vpcmpeq<ssemodesuffix>\\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}\r\n vptestnm<ssemodesuffix>\\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}\"\r\n [(set_attr \"type\" \"ssecmp\")\r\n+ (set_attr \"c86_attr\" \"*,ptest\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -5635,6 +5673,7 @@ (define_insn \"<sse>_andnot<mode>3<mask_name>\"\r\n [(set_attr \"isa\" \"noavx,avx_noavx512f,avx512dq,avx512f\")\r\n (set_attr \"addr\" \"*,gpr16,*,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"orig,maybe_vex,evex,evex\")\r\n (set (attr \"mode\")\r\n \t(cond [(and (match_test \"<mask_applied>\")\r\n@@ -5686,6 +5725,7 @@ (define_insn \"<sse>_andnot<mode>3<mask_name>\"\r\n return \"\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set (attr \"mode\")\r\n (if_then_else (match_test \"TARGET_AVX512DQ\")\r\n@@ -5762,6 +5802,7 @@ (define_insn \"*<code><mode>3<mask_name>\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx,avx512dq,avx512f\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"orig,maybe_evex,evex,evex\")\r\n (set (attr \"mode\")\r\n \t(cond [(and (match_test \"<mask_applied>\")\r\n@@ -5809,6 +5850,7 @@ (define_insn \"*<code><mode>3<mask_name>\"\r\n return \"\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set (attr \"mode\")\r\n (if_then_else (match_test \"TARGET_AVX512DQ\")\r\n@@ -5926,6 +5968,7 @@ (define_insn \"*andnot<mode>3\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx,avx512vl,avx512f\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"orig,vex,evex,evex\")\r\n (set (attr \"mode\")\r\n \t(cond [(eq_attr \"alternative\" \"2\")\r\n@@ -6056,6 +6099,7 @@ (define_insn \"<code><mode>3\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx,avx512vl,avx512f\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"orig,vex,evex,evex\")\r\n (set (attr \"mode\")\r\n \t(cond [(eq_attr \"alternative\" \"2\")\r\n@@ -6118,6 +6162,7 @@ (define_insn \"*<code>tf3\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx,avx512vl,avx512f\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (and (eq_attr \"alternative\" \"0\")\r\n@@ -8860,6 +8905,7 @@ (define_insn \"sse_cvtsi2ss<rex64namesuffix><round_name>\"\r\n (set_attr \"bdver1_decode\" \"double,direct,*\")\r\n (set_attr \"btver2_decode\" \"double,double,double\")\r\n (set_attr \"znver1_decode\" \"double,double,double\")\r\n+ (set_attr \"c86_decode\" \"double,double,double\")\r\n (set (attr \"length_vex\")\r\n \t(if_then_else\r\n \t (and (match_test \"<MODE>mode == DImode\")\r\n@@ -9321,6 +9367,7 @@ (define_insn \"sse2_cvtsi2sd\"\r\n (set_attr \"bdver1_decode\" \"double,direct,*\")\r\n (set_attr \"btver2_decode\" \"double,double,double\")\r\n (set_attr \"znver1_decode\" \"double,double,double\")\r\n+ (set_attr \"c86_decode\" \"double,double,double\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"DF\")])\r\n \r\n@@ -12250,6 +12297,10 @@ (define_insn \"vec_set<mode>_0\"\r\n \t (const_string \"ssemov2\")\r\n \t ]\r\n \t (const_string \"ssemov\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (if_then_else (eq_attr \"alternative\" \"9,10,11\")\r\n+\t\t (const_string \"insr\")\r\n+\t\t (const_string \"*\")))\r\n (set (attr \"addr\")\r\n (if_then_else (eq_attr \"alternative\" \"9,10\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -12324,6 +12375,13 @@ (define_insn \"@vec_set<mode>_0\"\r\n (if_then_else (eq_attr \"alternative\" \"0,1,2,3,6,7,10\")\r\n \t\t (const_string \"ssemov\")\r\n \t\t (const_string \"sselog\")))\r\n+ (set (attr \"c86_attr\")\r\n+\t(cond [(eq_attr \"alternative\" \"6,7,10\")\r\n+\t\t (const_string \"blend\")\r\n+\t (eq_attr \"alternative\" \"4,5,8,9,11,12\")\r\n+\t\t (const_string \"insr\")\r\n+\t ]\r\n+\t (const_string \"*\")))\r\n (set (attr \"prefix_data16\")\r\n (if_then_else (eq_attr \"alternative\" \"4,5\")\r\n \t\t (const_string \"1\")\r\n@@ -12692,6 +12750,7 @@ (define_insn_and_split \"*sse4_1_extractps\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*,*,*\")\r\n (set_attr \"type\" \"sselog,sselog,sselog,*,*\")\r\n+ (set_attr \"c86_attr\" \"extr,extr,extr,*,*\")\r\n (set_attr \"prefix_data16\" \"1,1,1,*,*\")\r\n (set_attr \"prefix_extra\" \"1,1,1,*,*\")\r\n (set_attr \"length_immediate\" \"1,1,1,*,*\")\r\n@@ -13591,6 +13650,7 @@ (define_insn \"*vec_extract<mode>\"\r\n [(set_attr \"isa\" \"*,sse4_noavx,avx,noavx,avx\")\r\n (set_attr \"addr\" \"*,gpr16,*,*,*\")\r\n (set_attr \"type\" \"sselog1,sselog1,sselog1,sseishft1,sseishft1\")\r\n+ (set_attr \"c86_attr\" \"extr,extr,extr,other,other\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n@@ -14381,6 +14441,7 @@ (define_insn \"<mask_codefor><avx512>_align<mode><mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"valign<ssemodesuffix>\\t{%3, %2, %1, %0<mask_operand4>|%0<mask_operand4>, %1, %2, %3}\";\r\n [(set_attr \"prefix\" \"evex\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n (define_mode_attr vec_extract_imm_predicate\r\n@@ -16996,6 +17057,7 @@ (define_insn \"avx512bw_pmaddwd512<mode><mask_name>\"\r\n \"TARGET_AVX512BW && <mask_mode512bit_condition>\"\r\n \"vpmaddwd\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\";\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -17067,6 +17129,7 @@ (define_insn \"*avx2_pmaddwd\"\r\n \"TARGET_AVX2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))\"\r\n \"vpmaddwd\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"mode\" \"OI\")])\r\n \r\n@@ -17125,6 +17188,7 @@ (define_insn \"*sse2_pmaddwd\"\r\n vpmaddwd\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"atom_unit\" \"simul\")\r\n (set_attr \"prefix_data16\" \"1,*\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n@@ -17992,6 +18056,7 @@ (define_insn \"*avx2_<code><mode>3\"\r\n \"TARGET_AVX2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))\"\r\n \"vp<maxmin_int><ssemodesuffix>\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -18033,6 +18098,7 @@ (define_insn \"*avx512f_<code><mode>3<mask_name>\"\r\n \"TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))\"\r\n \"vp<maxmin_int><ssemodesuffix>\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -18044,6 +18110,7 @@ (define_insn \"*avx512bw_<code><mode>3<mask_name>\"\r\n \"TARGET_AVX512BW && !(MEM_P (operands[1]) && MEM_P (operands[2]))\"\r\n \"vp<maxmin_int><ssemodesuffix>\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -18142,6 +18209,7 @@ (define_insn \"*sse4_1_<code><mode>3<mask_name>\"\r\n vp<maxmin_int><ssemodesuffix>\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n@@ -18158,6 +18226,7 @@ (define_insn \"*<code>v8hi3\"\r\n vp<maxmin_int>w\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -18226,6 +18295,7 @@ (define_insn \"*sse4_1_<code><mode>3<mask_name>\"\r\n vp<maxmin_int><ssemodesuffix>\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1,1,*\")\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n@@ -18243,6 +18313,7 @@ (define_insn \"*<code>v16qi3\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"maxmin\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n@@ -18912,6 +18983,7 @@ (define_insn \"*andnot<mode>3\"\r\n [(set_attr \"isa\" \"noavx,avx_noavx512f,avx512f,*,*\")\r\n (set_attr \"addr\" \"*,gpr16,*,*,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (and (eq_attr \"alternative\" \"0\")\r\n@@ -19018,6 +19090,7 @@ (define_insn \"*andnot<mode>3_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vpandn<ssemodesuffix>\\t{%2, %1, %0%{%4%}%N3|%0%{%4%}%N3, %1, %2}\";\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -19142,6 +19215,7 @@ (define_insn \"*<code><mode>3<mask_name>\"\r\n [(set_attr \"isa\" \"noavx,avx_noavx512f,avx512f\")\r\n (set_attr \"addr\" \"*,gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (and (eq_attr \"alternative\" \"0\")\r\n@@ -19239,6 +19313,7 @@ (define_insn \"*<code><mode>3\"\r\n [(set_attr \"isa\" \"noavx,avx_noavx512f,avx512f\")\r\n (set_attr \"addr\" \"*,gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (and (eq_attr \"alternative\" \"0\")\r\n@@ -19275,6 +19350,7 @@ (define_insn \"<code>v1ti3\"\r\n (set_attr \"prefix\" \"orig,vex,evex\")\r\n (set_attr \"prefix_data16\" \"1,*,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"sselogic\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n (define_expand \"one_cmplv1ti2\"\r\n@@ -20250,6 +20326,7 @@ (define_insn \"<sse2p4_1>_pinsr<ssemodesuffix>\"\r\n }\r\n [(set_attr \"isa\" \"noavx,noavx,avx,avx,<pinsr_evex_isa>,<pinsr_evex_isa>,avx2\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insr\")\r\n (set (attr \"addr\")\r\n \t(if_then_else (eq_attr \"alternative\" \"0,1\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -20363,6 +20440,7 @@ (define_insn \"*<extract_type>_vinsert<shuffletype><extract_suf>_0\"\r\n }\r\n }\r\n [(set_attr \"type\" \"sselog,ssemov,ssemov\")\r\n+ (set_attr \"c86_attr\" \"insertx,*,*\")\r\n (set_attr \"length_immediate\" \"1,0,0\")\r\n (set_attr \"prefix\" \"evex,vex,evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>,<ssequarterinsnmode>,<ssequarterinsnmode>\")])\r\n@@ -20395,6 +20473,7 @@ (define_insn \"<mask_codefor><extract_type>_vinsert<shuffletype><extract_suf>_1<m\r\n return \"vinsert<shuffletype><extract_suf>\\t{%3, %2, %1, %0<mask_operand4>|%0<mask_operand4>, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -20433,6 +20512,7 @@ (define_insn \"vec_set_lo_<mode><mask_name>\"\r\n \"TARGET_AVX512DQ\"\r\n \"vinsert<shuffletype>32x8\\t{$0x0, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, 0x0}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -20450,6 +20530,7 @@ (define_insn \"vec_set_hi_<mode><mask_name>\"\r\n \"TARGET_AVX512DQ\"\r\n \"vinsert<shuffletype>32x8\\t{$0x1, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, 0x1}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -20465,6 +20546,7 @@ (define_insn \"vec_set_lo_<mode><mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vinsert<shuffletype>64x4\\t{$0x0, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, 0x0}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n@@ -20480,6 +20562,7 @@ (define_insn \"vec_set_hi_<mode><mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vinsert<shuffletype>64x4\\t{$0x1, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, 0x1}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n@@ -20529,6 +20612,7 @@ (define_insn \"<mask_codefor>avx512dq_shuf_<shuffletype>64x2_1<mask_name>\"\r\n return \"vshuf<shuffletype>64x2\\t{%3, %2, %1, %0<mask_operand7>|%0<mask_operand7>, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n@@ -20592,6 +20676,7 @@ (define_insn \"avx512f_shuf_<shuffletype>64x2_1<mask_name>\"\r\n return \"vshuf<shuffletype>64x2\\t{%3, %2, %1, %0<mask_operand11>|%0<mask_operand11>, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -20628,6 +20713,7 @@ (define_insn \"*avx512f_shuf_<shuffletype>64x2_1<mask_name>_1\"\r\n return \"vshuf<shuffletype>64x2\\t{%2, %1, %1, %0<mask_operand10>|%0<mask_operand10>, %1, %1, %2}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -20691,6 +20777,7 @@ (define_insn \"avx512vl_shuf_<shuffletype>32x4_1<mask_name>\"\r\n return \"vshuf<shuffletype>32x4\\t{%3, %2, %1, %0<mask_operand11>|%0<mask_operand11>, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n@@ -20778,6 +20865,7 @@ (define_insn \"avx512f_shuf_<shuffletype>32x4_1<mask_name>\"\r\n return \"vshuf<shuffletype>32x4\\t{%3, %2, %1, %0<mask_operand19>|%0<mask_operand19>, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -20830,6 +20918,7 @@ (define_insn \"*avx512f_shuf_<shuffletype>32x4_1<mask_name>_1\"\r\n return \"vshuf<shuffletype>32x4\\t{%2, %1, %1, %0<mask_operand18>|%0<mask_operand18>, %1, %1, %2}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"shufx\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -21434,6 +21523,7 @@ (define_insn \"*vec_extract<mode>\"\r\n [(set_attr \"isa\" \"sse2_noavx,avx,sse4_noavx,avx\")\r\n (set_attr \"addr\" \"*,*,gpr16,*\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set (attr \"prefix_extra\")\r\n (if_then_else\r\n (eq (const_string \"<MODE>mode\") (const_string \"V8HImode\"))\r\n@@ -21455,6 +21545,7 @@ (define_insn \"*vec_extract<PEXTR_MODE12:mode>_zext\"\r\n \"%vpextr<PEXTR_MODE12:ssemodesuffix>\\t{%2, %1, %k0|%k0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set (attr \"prefix_extra\")\r\n (if_then_else\r\n (eq (const_string \"<PEXTR_MODE12:MODE>mode\") (const_string \"V8HImode\"))\r\n@@ -21475,6 +21566,7 @@ (define_insn \"*vec_extractv16qi_zext\"\r\n \"%vpextrb\\t{%2, %1, %k0|%k0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -21609,6 +21701,7 @@ (define_insn \"*vec_extractv4si\"\r\n }\r\n [(set_attr \"isa\" \"noavx,avx,avx512dq,noavx,noavx,avx\")\r\n (set_attr \"type\" \"sselog1,sselog1,sselog1,sseishft1,sseishft1,sseishft1\")\r\n+ (set_attr \"c86_attr\" \"extr,extr,*,*,*,*\")\r\n (set (attr \"addr\")\r\n \t(if_then_else (eq_attr \"alternative\" \"0\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -21631,6 +21724,7 @@ (define_insn \"*vec_extractv4si_zext\"\r\n \"%vpextrd\\t{%2, %1, %k0|%k0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx,avx512dq\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"extr\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -21703,6 +21797,11 @@ (define_insn \"*vec_extractv2di_1\"\r\n \t (const_string \"imov\")\r\n \t ]\r\n \t (const_string \"sselog1\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"0,1,2\")\r\n+\t (const_string \"extr\")\r\n+\t ]\r\n+\t (const_string \"other\")))\r\n (set (attr \"addr\")\r\n \t(if_then_else (eq_attr \"alternative\" \"0\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -21868,6 +21967,11 @@ (define_insn \"*vec_concatv2si_sse4_1\"\r\n \t (const_string \"mmxmov\")\r\n \t ]\r\n \t (const_string \"sselog\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"0,1,2,3\")\r\n+\t (const_string \"insr\")\r\n+\t ]\r\n+\t (const_string \"other\")))\r\n (set (attr \"addr\")\r\n (if_then_else (eq_attr \"alternative\" \"0,1\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -22026,6 +22130,11 @@ (define_insn \"vec_concatv2di\"\r\n (eq_attr \"alternative\" \"0,1,2,3,4,5\")\r\n (const_string \"sselog\")\r\n (const_string \"ssemov2\")))\r\n+ (set (attr \"c86_attr\")\r\n+ (cond [(eq_attr \"alternative\" \"0,1,2,3\")\r\n+\t (const_string \"insr\")\r\n+\t ]\r\n+\t (const_string \"other\")))\r\n (set (attr \"addr\")\r\n (if_then_else (eq_attr \"alternative\" \"0,1\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -22245,6 +22354,7 @@ (define_insn \"*<sse2_avx2>_uavg<mode>3<mask_name>\"\r\n vpavg<ssemodesuffix>\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"avg\")\r\n (set_attr \"prefix_data16\" \"1,*\")\r\n (set_attr \"prefix\" \"orig,<mask_prefix>\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -22273,6 +22383,7 @@ (define_insn \"*<sse2_avx2>_psadbw\"\r\n vpsadbw\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"sadbw\")\r\n (set_attr \"atom_unit\" \"simul\")\r\n (set_attr \"prefix_data16\" \"1,*\")\r\n (set_attr \"prefix\" \"orig,maybe_evex\")\r\n@@ -22287,6 +22398,7 @@ (define_insn \"<sse>_movmsk<ssemodesuffix><avxsizesuffix>\"\r\n \"%vmovmsk<ssemodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -22300,6 +22412,7 @@ (define_insn \"*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_<u>ext\"\r\n \"%vmovmsk<ssemodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n@@ -22437,6 +22550,7 @@ (define_insn \"<sse2_avx2>_pmovmskb\"\r\n \"%vpmovmskb\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (match_test \"TARGET_AVX\")\r\n@@ -22455,6 +22569,7 @@ (define_insn \"*<sse2_avx2>_pmovmskb_zext\"\r\n \"%vpmovmskb\\t{%1, %k0|%k0, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (match_test \"TARGET_AVX\")\r\n@@ -22473,6 +22588,7 @@ (define_insn \"*sse2_pmovmskb_ext\"\r\n \"%vpmovmskb\\t{%1, %k0|%k0, %1}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set (attr \"prefix_data16\")\r\n (if_then_else\r\n (match_test \"TARGET_AVX\")\r\n@@ -22822,6 +22938,7 @@ (define_insn \"*sse2_maskmovdqu\"\r\n return \"%vmaskmovdqu\\t{%2, %1|%1, %2}\";\r\n }\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"prefix_data16\" \"1\")\r\n (set (attr \"length_address\")\r\n (symbol_ref (\"Pmode != word_mode\")))\r\n@@ -22830,6 +22947,7 @@ (define_insn \"*sse2_maskmovdqu\"\r\n (symbol_ref (\"3 + REX_SSE_REGNO_P (REGNO (operands[2]))\")))\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n (set_attr \"znver1_decode\" \"vector\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n (define_insn \"sse_ldmxcsr\"\r\n@@ -22922,6 +23040,7 @@ (define_insn \"avx2_ph<plusminus_mnemonic>wv16hi3\"\r\n \"TARGET_AVX2\"\r\n \"vph<plusminus_mnemonic>w\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -22948,6 +23067,7 @@ (define_insn \"ssse3_ph<plusminus_mnemonic>wv8hi3\"\r\n vph<plusminus_mnemonic>w\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"atom_unit\" \"complex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n@@ -22989,6 +23109,7 @@ (define_insn_and_split \"ssse3_ph<plusminus_mnemonic>wv4hi3\"\r\n }\r\n [(set_attr \"mmx_isa\" \"native,sse_noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"atom_unit\" \"complex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set (attr \"prefix_rex\") (symbol_ref \"x86_extended_reg_mentioned_p (insn)\"))\r\n@@ -23012,6 +23133,7 @@ (define_insn \"avx2_ph<plusminus_mnemonic>dv8si3\"\r\n \"TARGET_AVX2\"\r\n \"vph<plusminus_mnemonic>d\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -23036,6 +23158,7 @@ (define_insn \"ssse3_ph<plusminus_mnemonic>dv4si3\"\r\n vph<plusminus_mnemonic>d\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"atom_unit\" \"complex\")\r\n (set_attr \"prefix_data16\" \"1,*\")\r\n@@ -23076,6 +23199,7 @@ (define_insn_and_split \"ssse3_ph<plusminus_mnemonic>dv2si3\"\r\n }\r\n [(set_attr \"mmx_isa\" \"native,sse_noavx,avx\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"atom_unit\" \"complex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n@@ -23132,6 +23256,7 @@ (define_insn \"avx2_pmaddubsw256\"\r\n \"TARGET_AVX2\"\r\n \"vpmaddubsw\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -23147,6 +23272,7 @@ (define_insn \"avx512bw_pmaddubsw512<mode><mask_name>\"\r\n \"TARGET_AVX512BW\"\r\n \"vpmaddubsw\\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}\";\r\n [(set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -23223,6 +23349,7 @@ (define_insn \"ssse3_pmaddubsw128\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"atom_unit\" \"simul\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n@@ -23259,6 +23386,7 @@ (define_insn \"ssse3_pmaddubsw\"\r\n [(set_attr \"isa\" \"*,noavx,avx\")\r\n (set_attr \"mmx_isa\" \"native,*,*\")\r\n (set_attr \"type\" \"sseiadd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"atom_unit\" \"simul\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set (attr \"prefix_rex\") (symbol_ref \"x86_extended_reg_mentioned_p (insn)\"))\r\n@@ -23542,6 +23670,7 @@ (define_insn \"<ssse3_avx2>_psign<mode>3\"\r\n vpsign<ssemodesuffix>\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"sign\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,vex\")\r\n@@ -23561,6 +23690,7 @@ (define_insn \"ssse3_psign<mode>3\"\r\n [(set_attr \"isa\" \"*,noavx,avx\")\r\n (set_attr \"mmx_isa\" \"native,*,*\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"sign\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set (attr \"prefix_rex\") (symbol_ref \"x86_extended_reg_mentioned_p (insn)\"))\r\n (set_attr \"mode\" \"DI,TI,TI\")])\r\n@@ -23710,6 +23840,7 @@ (define_insn \"*abs<mode>2\"\r\n (set_attr \"type\" \"sselog1\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n+ (set_attr \"c86_attr\" \"abs\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n (define_insn \"abs<mode>2_mask\"\r\n@@ -23722,6 +23853,7 @@ (define_insn \"abs<mode>2_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vpabs<ssemodesuffix>\\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}\"\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"abs\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -23735,6 +23867,7 @@ (define_insn \"abs<mode>2_mask\"\r\n \"TARGET_AVX512BW\"\r\n \"vpabs<ssemodesuffix>\\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}\"\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"abs\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -23767,6 +23900,7 @@ (define_insn \"sse4a_movnt<mode>\"\r\n \"TARGET_SSE4A\"\r\n \"movnt<ssemodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n (define_insn \"sse4a_vmmovnt<mode>\"\r\n@@ -23779,6 +23913,7 @@ (define_insn \"sse4a_vmmovnt<mode>\"\r\n \"TARGET_SSE4A\"\r\n \"movnt<ssescalarmodesuffix>\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"mode\" \"<ssescalarmode>\")])\r\n \r\n (define_insn \"sse4a_extrqi\"\r\n@@ -23855,6 +23990,7 @@ (define_insn \"<sse4_1>_blend<ssemodesuffix><avxsizesuffix>\"\r\n vblend<ssemodesuffix>\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*\")\r\n@@ -23876,6 +24012,7 @@ (define_insn \"<sse4_1>_blendv<ssemodesuffix><avxsizesuffix>\"\r\n vblendv<ssemodesuffix>\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blendv\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*\")\r\n@@ -23909,6 +24046,7 @@ (define_insn \"sse4_1_blendv<ssemodesuffix>\"\r\n }\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blendv\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n@@ -24114,6 +24252,7 @@ (define_insn \"<sse4_1>_dp<ssemodesuffix><avxsizesuffix>\"\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n (set_attr \"btver2_decode\" \"vector,vector,vector\")\r\n (set_attr \"znver1_decode\" \"vector,vector,vector\")\r\n+ (set_attr \"c86_decode\" \"vector,vector,vector\")\r\n (set_attr \"mode\" \"<MODE>\")])\r\n \r\n ;; Mode attribute used by `vmovntdqa' pattern\r\n@@ -24129,6 +24268,7 @@ (define_insn \"<vi8_sse4_1_avx2_avx512>_movntdqa\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"movnt\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -24153,6 +24293,7 @@ (define_insn \"<sse4_1_avx2>_mpsadbw\"\r\n (set_attr \"prefix\" \"orig,orig,vex\")\r\n (set_attr \"btver2_decode\" \"vector,vector,vector\")\r\n (set_attr \"znver1_decode\" \"vector,vector,vector\")\r\n+ (set_attr \"c86_decode\" \"vector,vector,vector\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n (define_insn \"avx10_2_mpsadbw<mask_name>\"\r\n@@ -24212,6 +24353,7 @@ (define_insn \"<sse4_1_avx2>_pblendvb\"\r\n vpblendvb\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blendv\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"*,*,1\")\r\n@@ -24353,6 +24495,7 @@ (define_insn \"sse4_1_pblend<ssemodesuffix>\"\r\n vpblendw\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -24425,6 +24568,7 @@ (define_insn \"*avx2_pblend<ssemodesuffix>\"\r\n return \"vpblendw\\t{%3, %2, %1, %0|%0, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -24440,6 +24584,7 @@ (define_insn \"avx2_pblendd<mode>\"\r\n \"TARGET_AVX2\"\r\n \"vpblendd\\t{%3, %2, %1, %0|%0, %1, %2, %3}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -24466,6 +24611,7 @@ (define_insn \"avx2_<code>v16qiv16hi2<mask_name>\"\r\n \"TARGET_AVX2 && <mask_avx512bw_condition> && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>bw\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -24520,6 +24666,7 @@ (define_insn \"avx512bw_<code>v32qiv32hi2<mask_name>\"\r\n \"TARGET_AVX512BW\"\r\n \"vpmov<extsuffix>bw\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -24579,6 +24726,7 @@ (define_insn \"sse4_1_<code>v8qiv8hi2<mask_name>\"\r\n \"%vpmov<extsuffix>bw\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -24595,6 +24743,7 @@ (define_insn \"*sse4_1_<code>v8qiv8hi2<mask_name>_1\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -24741,6 +24890,7 @@ (define_insn \"<mask_codefor>avx512f_<code>v16qiv16si2<mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vpmov<extsuffix>bd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -24762,6 +24912,7 @@ (define_insn \"avx2_<code>v8qiv8si2<mask_name>\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>bd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -24773,6 +24924,7 @@ (define_insn \"*avx2_<code>v8qiv8si2<mask_name>_1\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"%vpmov<extsuffix>bd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -24850,6 +25002,7 @@ (define_insn \"sse4_1_<code>v4qiv4si2<mask_name>\"\r\n \"%vpmov<extsuffix>bd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -24863,6 +25016,7 @@ (define_insn \"*sse4_1_<code>v4qiv4si2<mask_name>_1\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -24940,6 +25094,7 @@ (define_insn \"avx512f_<code>v16hiv16si2<mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vpmov<extsuffix>wd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -24993,6 +25148,7 @@ (define_insn \"avx2_<code>v8hiv8si2<mask_name>\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>wd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -25052,6 +25208,7 @@ (define_insn \"sse4_1_<code>v4hiv4si2<mask_name>\"\r\n \"%vpmov<extsuffix>wd\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25065,6 +25222,7 @@ (define_insn \"*sse4_1_<code>v4hiv4si2<mask_name>_1\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25209,6 +25367,7 @@ (define_insn \"avx512f_<code>v8qiv8di2<mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vpmov<extsuffix>bq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -25219,6 +25378,7 @@ (define_insn \"*avx512f_<code>v8qiv8di2<mask_name>_1\"\r\n \"TARGET_AVX512F\"\r\n \"vpmov<extsuffix>bq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -25292,6 +25452,7 @@ (define_insn \"avx2_<code>v4qiv4di2<mask_name>\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>bq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -25303,6 +25464,7 @@ (define_insn \"*avx2_<code>v4qiv4di2<mask_name>_1\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>bq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -25383,6 +25545,7 @@ (define_insn \"sse4_1_<code>v2qiv2di2<mask_name>\"\r\n \"%vpmov<extsuffix>bq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25396,6 +25559,7 @@ (define_insn \"*sse4_1_<code>v2qiv2di2<mask_name>_1\"\r\n [(set_attr \"isa\" \"noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25445,6 +25609,7 @@ (define_insn \"avx512f_<code>v8hiv8di2<mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vpmov<extsuffix>wq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -25464,6 +25629,7 @@ (define_insn \"avx2_<code>v4hiv4di2<mask_name>\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>wq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -25475,6 +25641,7 @@ (define_insn \"*avx2_<code>v4hiv4di2<mask_name>_1\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>wq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -25547,6 +25714,7 @@ (define_insn \"sse4_1_<code>v2hiv2di2<mask_name>\"\r\n \"%vpmov<extsuffix>wq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25560,6 +25728,7 @@ (define_insn \"*sse4_1_<code>v2hiv2di2<mask_name>_1\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25635,6 +25804,7 @@ (define_insn \"avx512f_<code>v8siv8di2<mask_name>\"\r\n \"TARGET_AVX512F\"\r\n \"vpmov<extsuffix>dq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -25686,6 +25856,7 @@ (define_insn \"avx2_<code>v4siv4di2<mask_name>\"\r\n \"TARGET_AVX2 && <mask_avx512vl_condition>\"\r\n \"vpmov<extsuffix>dq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"OI\")])\r\n@@ -25741,6 +25912,7 @@ (define_insn \"sse4_1_<code>v2siv2di2<mask_name>\"\r\n \"%vpmov<extsuffix>dq\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -25754,6 +25926,7 @@ (define_insn \"*sse4_1_<code>v2siv2di2<mask_name>_1\"\r\n [(set_attr \"isa\" \"noavx,noavx,avx\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"vpmovx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,orig,maybe_evex\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -26206,6 +26379,7 @@ (define_insn \"sse4_1_round<ssescalarmodesuffix>\"\r\n }\r\n [(set_attr \"isa\" \"noavx,noavx,noavx512f,avx512f\")\r\n (set_attr \"type\" \"ssecvt\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,gpr16,gpr16,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*,*\")\r\n@@ -26243,6 +26417,7 @@ (define_insn \"*sse4_1_round<ssescalarmodesuffix>\"\r\n }\r\n [(set_attr \"isa\" \"noavx,noavx,noavx512f,avx512f\")\r\n (set_attr \"type\" \"ssecvt\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,gpr16,gpr16,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix_data16\" \"1,1,*,*\")\r\n@@ -26512,6 +26687,7 @@ (define_insn \"sse4_2_pcmpestri\"\r\n \"TARGET_SSE4_2\"\r\n \"%vpcmpestri\\t{%5, %3, %1|%1, %3, %5}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"cmpestr\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -26540,6 +26716,7 @@ (define_insn \"sse4_2_pcmpestrm\"\r\n \"TARGET_SSE4_2\"\r\n \"%vpcmpestrm\\t{%5, %3, %1|%1, %3, %5}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"cmpestr\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -26566,6 +26743,7 @@ (define_insn \"sse4_2_pcmpestr_cconly\"\r\n %vpcmpestri\\t{%6, %4, %2|%2, %4, %6}\r\n %vpcmpestri\\t{%6, %4, %2|%2, %4, %6}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"cmpestr\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -26643,6 +26821,7 @@ (define_insn \"sse4_2_pcmpistri\"\r\n \"TARGET_SSE4_2\"\r\n \"%vpcmpistri\\t{%3, %2, %1|%1, %2, %3}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"cmpestr\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -26667,6 +26846,7 @@ (define_insn \"sse4_2_pcmpistrm\"\r\n \"TARGET_SSE4_2\"\r\n \"%vpcmpistrm\\t{%3, %2, %1|%1, %2, %3}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"cmpestr\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -26691,6 +26871,7 @@ (define_insn \"sse4_2_pcmpistr_cconly\"\r\n %vpcmpistri\\t{%4, %3, %2|%2, %3, %4}\r\n %vpcmpistri\\t{%4, %3, %2|%2, %3, %4}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"cmpestr\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -26877,6 +27058,7 @@ (define_insn \"xop_phadd<u>bw\"\r\n \"TARGET_XOP\"\r\n \"vphadd<u>bw\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -26909,6 +27091,7 @@ (define_insn \"xop_phadd<u>bd\"\r\n \"TARGET_XOP\"\r\n \"vphadd<u>bd\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -26957,6 +27140,7 @@ (define_insn \"xop_phadd<u>bq\"\r\n \"TARGET_XOP\"\r\n \"vphadd<u>bq\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -26977,6 +27161,7 @@ (define_insn \"xop_phadd<u>wd\"\r\n \"TARGET_XOP\"\r\n \"vphadd<u>wd\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -27005,6 +27190,7 @@ (define_insn \"xop_phadd<u>wq\"\r\n \"TARGET_XOP\"\r\n \"vphadd<u>wq\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -27023,6 +27209,7 @@ (define_insn \"xop_phadd<u>dq\"\r\n \"TARGET_XOP\"\r\n \"vphadd<u>dq\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -27047,6 +27234,7 @@ (define_insn \"xop_phsubbw\"\r\n \"TARGET_XOP\"\r\n \"vphsubbw\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -27067,6 +27255,7 @@ (define_insn \"xop_phsubwd\"\r\n \"TARGET_XOP\"\r\n \"vphsubwd\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -27085,6 +27274,7 @@ (define_insn \"xop_phsubdq\"\r\n \"TARGET_XOP\"\r\n \"vphsubdq\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sseiadd1\")\r\n+ (set_attr \"c86_attr\" \"hplus\")\r\n (set_attr \"prefix\" \"vex\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"mode\" \"TI\")])\r\n@@ -27791,6 +27981,7 @@ (define_insn \"aesenc\"\r\n vaesenc\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_evex,evex\")\r\n@@ -27809,6 +28000,7 @@ (define_insn \"aesenclast\"\r\n vaesenclast\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_evex,evex\")\r\n@@ -27827,6 +28019,7 @@ (define_insn \"aesdec\"\r\n vaesdec\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"isa\" \"noavx,avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_evex,evex\")\r\n@@ -27846,6 +28039,7 @@ (define_insn \"aesdeclast\"\r\n [(set_attr \"isa\" \"noavx,avx,vaes_avx512vl\")\r\n (set_attr \"addr\" \"gpr16,gpr16,*\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"orig,maybe_evex,evex\")\r\n (set_attr \"btver2_decode\" \"double,double,double\")\r\n@@ -27858,6 +28052,7 @@ (define_insn \"aesimc\"\r\n \"TARGET_AES\"\r\n \"%vaesimc\\t{%1, %0|%0, %1}\"\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"maybe_vex\")\r\n@@ -27871,6 +28066,7 @@ (define_insn \"aeskeygenassist\"\r\n \"TARGET_AES\"\r\n \"%vaeskeygenassist\\t{%2, %1, %0|%0, %1, %2}\"\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -27894,6 +28090,7 @@ (define_insn \"pclmulqdq\"\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"orig,vex,evex\")\r\n+ (set_attr \"c86_decode\" \"*,vector,vector\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n (define_expand \"avx_vzeroall\"\r\n@@ -28011,6 +28208,7 @@ (define_insn \"<avx2_avx512>_permvar<mode><mask_name>\"\r\n return \"vperm<ssemodesuffix>\\t{%1, %2, %0<mask_operand3>|%0<mask_operand3>, %2, %1}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm\")\r\n (set_attr \"prefix\" \"<mask_prefix2>\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28023,6 +28221,7 @@ (define_insn \"<avx512>_permvar<mode><mask_name>\"\r\n \"TARGET_AVX512VBMI && <mask_mode512bit_condition>\"\r\n \"vperm<ssemodesuffix>\\t{%1, %2, %0<mask_operand3>|%0<mask_operand3>, %2, %1}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm\")\r\n (set_attr \"prefix\" \"<mask_prefix2>\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28035,6 +28234,7 @@ (define_insn \"<avx512>_permvar<mode><mask_name>\"\r\n \"TARGET_AVX512BW && <mask_mode512bit_condition>\"\r\n \"vpermw\\t{%1, %2, %0<mask_operand3>|%0<mask_operand3>, %2, %1}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm\")\r\n (set_attr \"prefix\" \"<mask_prefix2>\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28253,6 +28453,7 @@ (define_insn \"avx2_perm<mode>_1<mask_name>\"\r\n return \"vperm<ssemodesuffix>\\t{%2, %1, %0<mask_operand6>|%0<mask_operand6>, %1, %2}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm\")\r\n (set_attr \"prefix\" \"<mask_prefix2>\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28328,6 +28529,7 @@ (define_insn \"avx512f_perm<mode>_1<mask_name>\"\r\n return \"vperm<ssemodesuffix>\\t{%2, %1, %0<mask_operand10>|%0<mask_operand10>, %1, %2}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm\")\r\n (set_attr \"prefix\" \"<mask_prefix2>\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28434,6 +28636,7 @@ (define_insn \"<mask_codefor>avx512f_broadcast<mode><mask_name>\"\r\n vshuf<shuffletype>32x4\\t{$0x0, %g1, %g1, %0<mask_operand2>|%0<mask_operand2>, %g1, %g1, 0x0}\r\n vbroadcast<shuffletype>32x4\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"shufx,*\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28446,6 +28649,7 @@ (define_insn \"<mask_codefor>avx512f_broadcast<mode><mask_name>\"\r\n vshuf<shuffletype>64x2\\t{$0x44, %g1, %g1, %0<mask_operand2>|%0<mask_operand2>, %g1, %g1, 0x44}\r\n vbroadcast<shuffletype>64x4\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"shufx,*\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28698,6 +28902,7 @@ (define_insn \"avx_vbroadcastf128_<mode>\"\r\n vinsert<shuffletype>32x4\\t{$1, %1, %0, %0|%0, %0, %1, 1}\"\r\n [(set_attr \"isa\" \"noavx512vl,*,*,avx512dq,avx512dq,avx512vl,avx512vl\")\r\n (set_attr \"type\" \"ssemov,sselog1,sselog1,ssemov,sselog1,ssemov,sselog1\")\r\n+ (set_attr \"c86_attr\" \"*,insertx,*,*,insertx,*,insertx\")\r\n (set (attr \"addr\")\r\n \t(if_then_else (eq_attr \"alternative\" \"0\")\r\n \t\t (const_string \"gpr16\")\r\n@@ -28756,6 +28961,7 @@ (define_insn \"<mask_codefor>avx512vl_broadcast<mode><mask_name>_1\"\r\n vshuf<shuffletype>32x4\\t{$0x0, %t1, %t1, %0<mask_operand2>|%0<mask_operand2>, %t1, %t1, 0x0}\r\n vbroadcast<shuffletype>32x4\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"shufx,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -28769,6 +28975,7 @@ (define_insn \"<mask_codefor>avx512dq_broadcast<mode><mask_name>_1\"\r\n vshuf<shuffletype>32x4\\t{$0x44, %g1, %g1, %0<mask_operand2>|%0<mask_operand2>, %g1, %g1, 0x44}\r\n vbroadcast<shuffletype>32x8\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"shufx,*\")\r\n (set_attr \"length_immediate\" \"1,*\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -28786,6 +28993,7 @@ (define_insn \"<mask_codefor>avx512dq_broadcast<mode><mask_name>_1\"\r\n vshuf<shuffletype>64x2\\t{$0x0, %<xtg_mode>1, %<xtg_mode>1, %0<mask_operand2>|%0<mask_operand2>, %<xtg_mode>1, %<xtg_mode>1, 0x0}\r\n vbroadcast<shuffletype>64x2\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"shufx,*\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -28883,6 +29091,7 @@ (define_insn \"*<avx512>_vpermi2var<mode>3_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vpermi2<ssemodesuffix>\\t{%3, %1, %0%{%4%}|%0%{%4%}, %1, %3}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm2\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28899,6 +29108,7 @@ (define_insn \"*<avx512>_vpermi2var<mode>3_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vpermi2<ssemodesuffix>\\t{%3, %1, %0%{%4%}|%0%{%4%}, %1, %3}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm2\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28928,6 +29138,7 @@ (define_insn \"<avx512>_vpermt2var<mode>3<sd_maskz_name>\"\r\n vpermt2<ssemodesuffix>\\t{%3, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %3}\r\n vpermi2<ssemodesuffix>\\t{%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm2\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -28959,6 +29170,7 @@ (define_insn \"<avx512>_vpermt2var<mode>3_mask\"\r\n \"TARGET_AVX512F\"\r\n \"vpermt2<ssemodesuffix>\\t{%3, %1, %0%{%4%}|%0%{%4%}, %1, %3}\"\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"perm2\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -29037,6 +29249,7 @@ (define_insn \"*avx_vperm2f128<mode>_nozero\"\r\n return \"vperm2<i128>\\t{%3, %2, %1, %0|%0, %1, %2, %3}\";\r\n }\r\n [(set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -29144,6 +29357,7 @@ (define_insn \"vec_set_lo_<mode><mask_name>\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -29168,6 +29382,7 @@ (define_insn \"vec_set_hi_<mode><mask_name>\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -29191,6 +29406,7 @@ (define_insn \"vec_set_lo_<mode><mask_name>\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -29214,6 +29430,7 @@ (define_insn \"vec_set_hi_<mode><mask_name>\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -29236,6 +29453,7 @@ (define_insn \"vec_set_lo_<mode>\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex,evex\")\r\n@@ -29258,6 +29476,7 @@ (define_insn \"vec_set_hi_<mode>\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex,evex\")\r\n@@ -29283,6 +29502,7 @@ (define_insn \"vec_set_lo_v32qi\"\r\n vinserti32x4\\t{$0x0, %2, %1, %0|%0, %1, %2, 0x0}\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n@@ -29310,6 +29530,7 @@ (define_insn \"vec_set_hi_v32qi\"\r\n [(set_attr \"isa\" \"noavx512vl,avx512vl\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"type\" \"sselog\")\r\n+ (set_attr \"c86_attr\" \"insertx\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"vex,evex\")\r\n@@ -29329,6 +29550,7 @@ (define_insn \"<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>\"\r\n return \"vmaskmov<ssefltmodesuffix>\\t{%1, %2, %0|%0, %2, %1}\";\r\n }\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -29350,6 +29572,7 @@ (define_insn \"<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>\"\r\n return \"vmaskmov<ssefltmodesuffix>\\t{%2, %1, %0|%0, %1, %2}\";\r\n }\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"blend\")\r\n (set_attr \"addr\" \"gpr16\")\r\n (set_attr \"prefix_extra\" \"1\")\r\n (set_attr \"prefix\" \"vex\")\r\n@@ -29745,6 +29968,7 @@ (define_insn \"avx_vec_concat<mode>\"\r\n [(set_attr \"isa\" \"noavx512f,avx512f,*,*\")\r\n (set_attr \"addr\" \"gpr16,*,*,*\")\r\n (set_attr \"type\" \"sselog,sselog,ssemov,ssemov\")\r\n+ (set_attr \"c86_attr\" \"insertx,insertx,*,*\")\r\n (set_attr \"prefix_extra\" \"1,1,*,*\")\r\n (set_attr \"length_immediate\" \"1,1,*,*\")\r\n (set_attr \"prefix\" \"maybe_evex\")\r\n@@ -30355,6 +30579,7 @@ (define_insn \"<avx512>_compress<mode>_mask\"\r\n \"TARGET_AVX512F\"\r\n \"v<sseintprefix>compress<ssemodesuffix>\\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"compress\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -30368,6 +30593,7 @@ (define_insn \"compress<mode>_mask\"\r\n \"TARGET_AVX512VBMI2\"\r\n \"vpcompress<ssemodesuffix>\\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"compress\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -30381,6 +30607,7 @@ (define_insn \"<avx512>_compressstore<mode>_mask\"\r\n \"TARGET_AVX512F\"\r\n \"v<sseintprefix>compress<ssemodesuffix>\\t{%1, %0%{%2%}|%0%{%2%}, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"compress\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"memory\" \"store\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -30395,6 +30622,7 @@ (define_insn \"compressstore<mode>_mask\"\r\n \"TARGET_AVX512VBMI2\"\r\n \"vpcompress<ssemodesuffix>\\t{%1, %0%{%2%}|%0%{%2%}, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"compress\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"memory\" \"store\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -30419,6 +30647,7 @@ (define_insn \"expand<mode>_mask\"\r\n \"TARGET_AVX512F\"\r\n \"v<sseintprefix>expand<ssemodesuffix>\\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"expand\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"memory\" \"none,load\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -30433,6 +30662,7 @@ (define_insn \"expand<mode>_mask\"\r\n \"TARGET_AVX512VBMI2\"\r\n \"v<sseintprefix>expand<ssemodesuffix>\\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}\"\r\n [(set_attr \"type\" \"ssemov\")\r\n+ (set_attr \"c86_attr\" \"expand\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"memory\" \"none,load\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -30625,6 +30855,7 @@ (define_insn \"<mask_codefor>avx512bw_dbpsadbw<mode><mask_name>\"\r\n \"TARGET_AVX512BW\"\r\n \"vdbpsadbw\\t{%3, %2, %1, %0<mask_operand4>|%0<mask_operand4>, %1, %2, %3}\"\r\n [(set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"sadbw\")\r\n (set_attr \"length_immediate\" \"1\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -30636,6 +30867,7 @@ (define_insn \"clz<mode>2<mask_name>\"\r\n \"TARGET_AVX512CD\"\r\n \"vplzcnt<ssemodesuffix>\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"sse\")\r\n+ (set_attr \"c86_attr\" \"abs\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -30648,6 +30880,7 @@ (define_insn \"<mask_codefor>conflict<mode><mask_name>\"\r\n \"vpconflict<ssemodesuffix>\\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}\"\r\n [(set_attr \"type\" \"sse\")\r\n (set_attr \"prefix\" \"evex\")\r\n+ (set_attr \"c86_decode\" \"vector\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n (define_insn \"sha1msg1\"\r\n@@ -30910,6 +31143,7 @@ (define_insn \"vpmadd52<vpmadd52type>v8di\"\r\n \"TARGET_AVX512IFMA\"\r\n \"vpmadd52<vpmadd52type>\\t{%3, %2, %0|%0, %2, %3}\"\r\n [(set_attr \"type\" \"ssemuladd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"XI\")])\r\n \r\n@@ -30926,6 +31160,7 @@ (define_insn \"vpmadd52<vpmadd52type><mode>\"\r\n vpmadd52<vpmadd52type>\\t{%3, %2, %0|%0, %2, %3}\"\r\n [(set_attr \"isa\" \"avxifma,avx512ifmavl\")\r\n (set_attr \"type\" \"ssemuladd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"prefix\" \"vex,evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n@@ -30943,6 +31178,7 @@ (define_insn \"vpmadd52<vpmadd52type><mode>_maskz_1\"\r\n \"TARGET_AVX512IFMA\"\r\n \"vpmadd52<vpmadd52type>\\t{%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %2, %3}\"\r\n [(set_attr \"type\" \"ssemuladd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -30959,6 +31195,7 @@ (define_insn \"vpmadd52<vpmadd52type><mode>_mask\"\r\n \"TARGET_AVX512IFMA\"\r\n \"vpmadd52<vpmadd52type>\\t{%3, %2, %0%{%4%}|%0%{%4%}, %2, %3}\"\r\n [(set_attr \"type\" \"ssemuladd\")\r\n+ (set_attr \"c86_attr\" \"madd\")\r\n (set_attr \"prefix\" \"evex\")\r\n (set_attr \"mode\" \"<sseinsnmode>\")])\r\n \r\n@@ -31562,6 +31799,7 @@ (define_insn \"vaesdec_<mode>\"\r\n }\r\n [(set_attr \"isa\" \"avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n@@ -31580,6 +31818,7 @@ (define_insn \"vaesdeclast_<mode>\"\r\n }\r\n [(set_attr \"isa\" \"avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n@@ -31598,6 +31837,7 @@ (define_insn \"vaesenc_<mode>\"\r\n }\r\n [(set_attr \"isa\" \"avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\n@@ -31616,6 +31856,7 @@ (define_insn \"vaesenclast_<mode>\"\r\n }\r\n [(set_attr \"isa\" \"avx,vaes_avx512vl\")\r\n (set_attr \"type\" \"sselog1\")\r\n+ (set_attr \"c86_attr\" \"aes\")\r\n (set_attr \"addr\" \"gpr16,*\")\r\n (set_attr \"mode\" \"TI\")])\r\n \r\ndiff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h\r\nindex 99d97ab03..7819fdf7c 100644\r\n--- a/gcc/config/i386/x86-tune-costs.h\r\n+++ b/gcc/config/i386/x86-tune-costs.h\r\n@@ -4420,3 +4420,303 @@ struct processor_costs core_cost = {\r\n COSTS_N_INSNS (2),\t\t\t/* Branch mispredict scale. */\r\n };\r\n \r\n+/* C86_4G_M4 has optimized REP instruction for medium sized blocks, but for\r\n+ very small blocks it is better to use loop. For large blocks, libcall\r\n+ can do nontemporary accesses and beat inline considerably. */\r\n+static stringop_algs c86_4g_m4_memcpy[2] = {\r\n+ /* 32-bit tuning. */\r\n+ {libcall, {{6, loop, false},\r\n+\t {14, unrolled_loop, false},\r\n+\t {-1, libcall, false}}},\r\n+ /* 64-bit tuning. */\r\n+ {libcall, {{16, loop, false},\r\n+\t {128, rep_prefix_8_byte, false},\r\n+\t {-1, libcall, false}}}};\r\n+static stringop_algs c86_4g_m4_memset[2] = {\r\n+ /* 32-bit tuning. */\r\n+ {libcall, {{8, loop, false},\r\n+\t {24, unrolled_loop, false},\r\n+\t {128, rep_prefix_4_byte, false},\r\n+\t {-1, libcall, false}}},\r\n+ /* 64-bit tuning. */\r\n+ {libcall, {{48, unrolled_loop, false},\r\n+\t {128, rep_prefix_8_byte, false},\r\n+\t {-1, libcall, false}}}};\r\n+static const\r\n+struct processor_costs c86_4g_m4_cost = {\r\n+ {\r\n+ /* Start of register allocator costs. integer->integer move cost is 2. */\r\n+\r\n+ /* reg-reg moves are done by renaming and thus they are even cheaper than\r\n+ 1 cycle. Because reg-reg move cost is 2 and the following tables\r\n+ correspond to doubles of latencies, we do not model this correctly.\r\n+ It does not seem to make practical difference to bump prices up even\r\n+ more. */\r\n+ 6,\t\t\t\t\t/* cost for loading QImode using\r\n+\t\t\t\t\t movzbl. */\r\n+ {6, 6, 6},\t\t\t\t/* cost of loading integer registers\r\n+\t\t\t\t\t in QImode, HImode and SImode.\r\n+\t\t\t\t\t Relative to reg-reg move (2). */\r\n+ {8, 8, 8},\t\t\t\t/* cost of storing integer\r\n+\t\t\t\t\t registers. */\r\n+ 2,\t\t\t\t\t/* cost of reg,reg fld/fst. */\r\n+ {6, 6, 16},\t\t\t\t/* cost of loading fp registers\r\n+\t\t\t\t\t in SFmode, DFmode and XFmode. */\r\n+ {8, 8, 16},\t\t\t\t/* cost of storing fp registers\r\n+\t\t\t\t\t in SFmode, DFmode and XFmode. */\r\n+ 2,\t\t\t\t\t/* cost of moving MMX register. */\r\n+ {6, 6},\t\t\t\t/* cost of loading MMX registers\r\n+\t\t\t\t\t in SImode and DImode. */\r\n+ {8, 8},\t\t\t\t/* cost of storing MMX registers\r\n+\t\t\t\t\t in SImode and DImode. */\r\n+ 2, 3, 6,\t\t\t\t/* cost of moving XMM,YMM,ZMM register. */\r\n+ {6, 6, 6, 12, 24},\t\t\t/* cost of loading SSE registers\r\n+\t\t\t\t\t in 32,64,128,256 and 512-bit. */\r\n+ {8, 8, 8, 16, 32},\t\t\t/* cost of storing SSE registers\r\n+\t\t\t\t\t in 32,64,128,256 and 512-bit. */\r\n+ 6, 6,\t\t\t\t/* SSE->integer and integer->SSE moves. */\r\n+ 8, 8,\t\t\t\t/* mask->integer and integer->mask moves */\r\n+ {6, 6, 6},\t\t\t\t/* cost of loading mask register\r\n+\t\t\t\t\t in QImode, HImode, SImode. */\r\n+ {8, 8, 8},\t\t\t\t/* cost if storing mask register\r\n+\t\t\t\t\t in QImode, HImode, SImode. */\r\n+ 2,\t\t\t\t\t/* cost of moving mask register. */\r\n+ /* End of register allocator costs. */\r\n+ },\r\n+\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of an add instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of a lea instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* variable shift costs. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* constant shift costs. */\r\n+ {COSTS_N_INSNS (3),\t\t\t/* cost of starting multiply for QI. */\r\n+ COSTS_N_INSNS (3),\t\t\t/*\t\t\t\t HI. */\r\n+ COSTS_N_INSNS (3),\t\t\t/*\t\t\t\t SI. */\r\n+ COSTS_N_INSNS (3),\t\t\t/*\t\t\t\t DI. */\r\n+ COSTS_N_INSNS (3)},\t\t\t/*\t\t\t other. */\r\n+ 0,\t\t\t\t\t/* cost of multiply per each bit\r\n+\t\t\t\t\t set. */\r\n+ /* Depending on parameters, idiv can get faster on HYGON. This is upper\r\n+ bound. */\r\n+ {COSTS_N_INSNS (16),\t\t\t/* cost of a divide/mod for QI. */\r\n+ COSTS_N_INSNS (22),\t\t\t/*\t\t\t HI. */\r\n+ COSTS_N_INSNS (30),\t\t\t/*\t\t\t SI. */\r\n+ COSTS_N_INSNS (45),\t\t\t/*\t\t\t DI. */\r\n+ COSTS_N_INSNS (45)},\t\t\t/*\t\t\t other. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of movsx. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of movzx. */\r\n+ 8,\t\t\t\t\t/* \"large\" insn. */\r\n+ 9,\t\t\t\t\t/* MOVE_RATIO. */\r\n+ 6,\t\t\t\t\t/* CLEAR_RATIO */\r\n+ {6, 6, 6},\t\t\t\t/* cost of loading integer registers\r\n+\t\t\t\t\t in QImode, HImode and SImode.\r\n+\t\t\t\t\t Relative to reg-reg move (2). */\r\n+ {8, 8, 8},\t\t\t\t/* cost of storing integer\r\n+\t\t\t\t\t registers. */\r\n+ {6, 6, 6, 12, 24},\t\t\t/* cost of loading SSE register\r\n+\t\t\t\t\t in 32bit, 64bit, 128bit, 256bit and 512bit */\r\n+ {8, 8, 8, 16, 32},\t\t\t/* cost of storing SSE register\r\n+\t\t\t\t\t in 32bit, 64bit, 128bit, 256bit and 512bit */\r\n+ {6, 6, 6, 12, 24},\t\t\t/* cost of unaligned loads. */\r\n+ {8, 8, 8, 16, 32},\t\t\t/* cost of unaligned stores. */\r\n+ 2, 3, 6,\t\t\t\t/* cost of moving XMM,YMM,ZMM register. */\r\n+ 6,\t\t\t\t\t/* cost of moving SSE register to integer. */\r\n+ 6,\t\t\t\t\t/* cost of moving integer register to SSE. */\r\n+\r\n+ 18, 8,\t\t\t\t/* Gather load static, per_elt. */\r\n+ 18, 10,\t\t\t\t/* Gather store static, per_elt. */\r\n+ 32,\t\t\t\t\t/* size of l1 cache. */\r\n+ 512,\t\t\t\t\t/* size of l2 cache. */\r\n+ 64,\t\t\t\t\t/* size of prefetch block. */\r\n+ /* C86_4G_M4 processors never drop prefetches; if they cannot be performed\r\n+ immediately, they are queued. We set number of simultaneous prefetches\r\n+ to a large constant to reflect this (it probably is not a good idea not\r\n+ to limit number of prefetches at all, as their execution also takes some\r\n+ time). */\r\n+ 100,\t\t\t\t\t/* number of parallel prefetches. */\r\n+ 3,\t\t\t\t\t/* Branch cost. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of FADD and FSUB insns. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of FMUL instruction. */\r\n+\r\n+ COSTS_N_INSNS (15),\t\t\t/* cost of FDIV instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of FABS instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of FCHS instruction. */\r\n+\r\n+ COSTS_N_INSNS (10),\t\t\t/* cost of FSQRT instruction. */\r\n+\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of cheap SSE instruction. */\r\n+ COSTS_N_INSNS (3),\t\t\t/* cost of ADDSS/SD SUBSS/SD insns. */\r\n+ COSTS_N_INSNS (3),\t\t\t/* cost of MULSS instruction. */\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of MULSD instruction. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of FMA SS instruction. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of FMA SD instruction. */\r\n+ COSTS_N_INSNS (10),\t\t\t/* cost of DIVSS instruction. */\r\n+\r\n+ COSTS_N_INSNS (13),\t\t\t/* cost of DIVSD instruction. */\r\n+ COSTS_N_INSNS (10),\t\t\t/* cost of SQRTSS instruction. */\r\n+ COSTS_N_INSNS (15),\t\t\t/* cost of SQRTSD instruction. */\r\n+\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of CVTSS2SD etc. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of 256bit VCVTPS2PD etc. */\r\n+ COSTS_N_INSNS (10),\t\t\t/* cost of 512bit VCVTPS2PD etc. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of CVTSI2SS instruction. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of CVT(T)SS2SI instruction. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of CVTPI2PS instruction. */\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of CVT(T)PS2PI instruction. */\r\n+\r\n+ 4, 4, 3, 6,\t\t\t\t/* reassoc int, fp, vec_int, vec_fp. */\r\n+ {8, 1, 6},\t\t\t\t/* latency times throughput of\r\n+\t\t\t\t\t FMA/DOT_PROD_EXPR/SAD_EXPR,\r\n+\t\t\t\t\t it's used to determine unroll\r\n+\t\t\t\t\t factor in the vectorizer. */\r\n+ 4,\t\t\t\t\t/* Limit how much the autovectorizer\r\n+\t\t\t\t\t may unroll a loop. */\r\n+ c86_4g_m4_memcpy,\r\n+ c86_4g_m4_memset,\r\n+ COSTS_N_INSNS (4),\t\t\t/* cond_taken_branch_cost. */\r\n+ COSTS_N_INSNS (2),\t\t\t/* cond_not_taken_branch_cost. */\r\n+ \"16\",\t\t\t\t\t/* Loop alignment. */\r\n+ \"16\",\t\t\t\t\t/* Jump alignment. */\r\n+ \"0:0:8\",\t\t\t\t/* Label alignment. */\r\n+ \"16\",\t\t\t\t\t/* Func alignment. */\r\n+ 4,\t\t\t\t\t/* Small unroll limit. */\r\n+ 2,\t\t\t\t\t/* Small unroll factor. */\r\n+ COSTS_N_INSNS (2),\t\t\t/* Branch mispredict scale. */\r\n+};\r\n+\r\n+struct processor_costs c86_4g_m6_cost = c86_4g_m4_cost;\r\n+\r\n+struct processor_costs c86_4g_m7_cost = {\r\n+ {\r\n+ /* Start of register allocator costs. integer->integer move cost is 2. */\r\n+\r\n+ /* reg-reg moves are done by renaming and thus they are even cheaper than\r\n+ 1 cycle. Because reg-reg move cost is 2 and following tables correspond\r\n+ to doubles of latencies, we do not model this correctly. It does not\r\n+ seem to make practical difference to bump prices up even more. */\r\n+ 6,\t\t\t\t\t/* cost for loading QImode using\r\n+\t\t\t\t\t movzbl. */\r\n+ {6, 6, 6},\t\t\t\t/* cost of loading integer registers\r\n+\t\t\t\t\t in QImode, HImode and SImode.\r\n+\t\t\t\t\t Relative to reg-reg move (2). */\r\n+ {8, 8, 8},\t\t\t\t/* cost of storing integer\r\n+\t\t\t\t\t registers. */\r\n+ 2,\t\t\t\t\t/* cost of reg,reg fld/fst. */\r\n+ {14, 14, 17},\t\t\t\t/* cost of loading fp registers\r\n+\t\t\t\t\t in SFmode, DFmode and XFmode. */\r\n+ {12, 12, 16},\t\t\t\t/* cost of storing fp registers\r\n+\t\t\t\t\t in SFmode, DFmode and XFmode. */\r\n+ 2,\t\t\t\t\t/* cost of moving MMX register. */\r\n+ {6, 6},\t\t\t\t/* cost of loading MMX registers\r\n+\t\t\t\t\t in SImode and DImode. */\r\n+ {8, 8},\t\t\t\t/* cost of storing MMX registers\r\n+\t\t\t\t\t in SImode and DImode. */\r\n+ 2, 2, 3,\t\t\t\t/* cost of moving XMM,YMM,ZMM\r\n+\t\t\t\t\t register. */\r\n+ {6, 6, 10, 10, 12},\t\t\t/* cost of loading SSE registers\r\n+\t\t\t\t\t in 32,64,128,256 and 512-bit. */\r\n+ {8, 8, 8, 12, 12},\t\t\t/* cost of storing SSE registers\r\n+\t\t\t\t\t in 32,64,128,256 and 512-bit. */\r\n+ 6, 8,\t\t\t\t\t/* SSE->integer and integer->SSE\r\n+\t\t\t\t\t moves. */\r\n+ 8, 8,\t\t\t\t\t/* mask->integer and integer->mask moves */\r\n+ {6, 6, 6},\t\t\t\t/* cost of loading mask register\r\n+\t\t\t\t\t in QImode, HImode, SImode. */\r\n+ {8, 8, 8},\t\t\t\t/* cost if storing mask register\r\n+\t\t\t\t\t in QImode, HImode, SImode. */\r\n+ 2,\t\t\t\t\t/* cost of moving mask register. */\r\n+ /* End of register allocator costs. */\r\n+ },\r\n+\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of an add instruction. */\r\n+\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of a lea instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* variable shift costs. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* constant shift costs. */\r\n+ {COSTS_N_INSNS (3),\t\t\t/* cost of starting multiply for QI. */\r\n+ COSTS_N_INSNS (3),\t\t\t/* \t\t\t\t HI. */\r\n+ COSTS_N_INSNS (3),\t\t\t/*\t\t\t\t SI. */\r\n+ COSTS_N_INSNS (3),\t\t\t/*\t\t\t\t DI. */\r\n+ COSTS_N_INSNS (3)},\t\t\t/*\t\t\tother. */\r\n+ 0,\t\t\t\t\t/* cost of multiply per each bit\r\n+\t\t\t\t\t set. */\r\n+ {COSTS_N_INSNS (15),\t\t\t/* cost of a divide/mod for QI. */\r\n+ COSTS_N_INSNS (17),\t\t\t/* \t\t\t HI. */\r\n+ COSTS_N_INSNS (25),\t\t\t/*\t\t\t SI. */\r\n+ COSTS_N_INSNS (41),\t\t\t/*\t\t\t DI. */\r\n+ COSTS_N_INSNS (41)},\t\t\t/*\t\t\t other. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of movsx. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of movzx. */\r\n+ 8,\t\t\t\t\t/* \"large\" insn. */\r\n+ 9,\t\t\t\t\t/* MOVE_RATIO. */\r\n+ 6,\t\t\t\t\t/* CLEAR_RATIO */\r\n+ {6, 6, 6},\t\t\t\t/* cost of loading integer registers\r\n+\t\t\t\t\t in QImode, HImode and SImode.\r\n+\t\t\t\t\t Relative to reg-reg move (2). */\r\n+ {8, 8, 8},\t\t\t\t/* cost of storing integer\r\n+\t\t\t\t\t registers. */\r\n+ {6, 6, 10, 10, 12},\t\t\t/* cost of loading SSE registers\r\n+\t\t\t\t\t in 32bit, 64bit, 128bit, 256bit and 512bit */\r\n+ {8, 8, 8, 12, 12},\t\t\t/* cost of storing SSE register\r\n+\t\t\t\t\t in 32bit, 64bit, 128bit, 256bit and 512bit */\r\n+ {6, 6, 10, 10, 12},\t\t\t/* cost of unaligned loads. */\r\n+ {8, 8, 8, 12, 12},\t\t\t/* cost of unaligned stores. */\r\n+ 2, 2, 3,\t\t\t\t/* cost of moving XMM,YMM,ZMM\r\n+\t\t\t\t\t register. */\r\n+ 6,\t\t\t\t\t/* cost of moving SSE register to integer. */\r\n+ 6,\t\t\t\t\t/* cost of moving integer register to SSE. */\r\n+\r\n+ 14, 10,\t\t\t\t/* Gather load static, per_elt. */\r\n+ 14, 20,\t\t\t\t/* Gather store static, per_elt. */\r\n+ 32,\t\t\t\t\t/* size of l1 cache. */\r\n+ 512,\t\t\t\t\t/* size of l2 cache. */\r\n+ 64,\t\t\t\t\t/* size of prefetch block. */\r\n+\r\n+ 100,\t\t\t\t\t/* number of parallel prefetches. */\r\n+ 3,\t\t\t\t\t/* Branch cost. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of FADD and FSUB insns. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of FMUL instruction. */\r\n+\r\n+ COSTS_N_INSNS (15),\t\t\t/* cost of FDIV instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of FABS instruction. */\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of FCHS instruction. */\r\n+\r\n+ COSTS_N_INSNS (22),\t\t\t/* cost of FSQRT instruction. */\r\n+\r\n+ COSTS_N_INSNS (1),\t\t\t/* cost of cheap SSE instruction. */\r\n+ COSTS_N_INSNS (3),\t\t\t/* cost of ADDSS/SD SUBSS/SD insns. */\r\n+ COSTS_N_INSNS (3),\t\t\t/* cost of MULSS instruction. */\r\n+ COSTS_N_INSNS (3),\t\t\t/* cost of MULSD instruction. */\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of FMA SS instruction. */\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of FMA SD instruction. */\r\n+ COSTS_N_INSNS (13),\t\t\t/* cost of DIVSS instruction. */\r\n+\r\n+ COSTS_N_INSNS (10),\t\t\t/* cost of DIVSD instruction. */\r\n+ COSTS_N_INSNS (14),\t\t\t/* cost of SQRTSS instruction. */\r\n+ COSTS_N_INSNS (20),\t\t\t/* cost of SQRTSD instruction. */\r\n+\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of CVTSS2SD etc. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of 256bit VCVTPS2PD etc. */\r\n+ COSTS_N_INSNS (10),\t\t\t/* cost of 512bit VCVTPS2PD etc. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of CVTSI2SS instruction. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of CVT(T)SS2SI instruction. */\r\n+ COSTS_N_INSNS (5),\t\t\t/* cost of CVTPI2PS instruction. */\r\n+ COSTS_N_INSNS (4),\t\t\t/* cost of CVT(T)PS2PI instruction. */\r\n+ 4, 4, 3, 6,\t\t\t\t/* reassoc int, fp, vec_int, vec_fp. */\r\n+ {8, 8, 6},\t\t\t\t/* latency times throughput of\r\n+\t\t\t\t\t FMA/DOT_PROD_EXPR/SAD_EXPR,\r\n+\t\t\t\t\t it's used to determine unroll\r\n+\t\t\t\t\t factor in the vectorizer. */\r\n+ 4,\t\t\t\t\t/* Limit how much the autovectorizer\r\n+\t\t\t\t\t may unroll a loop. */\r\n+ c86_4g_m4_memcpy,\r\n+ c86_4g_m4_memset,\r\n+ COSTS_N_INSNS (4),\t\t\t/* cond_taken_branch_cost. */\r\n+ COSTS_N_INSNS (2),\t\t\t/* cond_not_taken_branch_cost. */\r\n+ \"16\",\t\t\t\t\t/* Loop alignment. */\r\n+ \"16\",\t\t\t\t\t/* Jump alignment. */\r\n+ \"0:0:8\",\t\t\t\t/* Label alignment. */\r\n+ \"16\",\t\t\t\t\t/* Func alignment. */\r\n+ 4,\t\t\t\t\t/* Small unroll limit. */\r\n+ 2,\t\t\t\t\t/* Small unroll factor. */\r\n+ COSTS_N_INSNS (2),\t\t\t/* Branch mispredict scale. */\r\n+};\r\ndiff --git a/gcc/config/i386/x86-tune-sched.cc b/gcc/config/i386/x86-tune-sched.cc\r\nindex e22676577..786a3e890 100644\r\n--- a/gcc/config/i386/x86-tune-sched.cc\r\n+++ b/gcc/config/i386/x86-tune-sched.cc\r\n@@ -91,6 +91,9 @@ ix86_issue_rate (void)\r\n is limits of the decoders. */\r\n case PROCESSOR_ZNVER5:\r\n case PROCESSOR_ZNVER6:\r\n+ case PROCESSOR_C86_4G_M4:\r\n+ case PROCESSOR_C86_4G_M6:\r\n+ case PROCESSOR_C86_4G_M7:\r\n return 4;\r\n \r\n case PROCESSOR_ICELAKE_CLIENT:\r\n@@ -440,6 +443,10 @@ ix86_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn, int cost,\r\n case PROCESSOR_ZNVER4:\r\n case PROCESSOR_ZNVER5:\r\n case PROCESSOR_ZNVER6:\r\n+ case PROCESSOR_C86_4G_M4:\r\n+ case PROCESSOR_C86_4G_M6:\r\n+ case PROCESSOR_C86_4G_M7:\r\n+\r\n /* Stack engine allows to execute push&pop instructions in parall. */\r\n if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP)\r\n \t && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP))\r\ndiff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def\r\nindex 53cf1a194..20cec3593 100644\r\n--- a/gcc/config/i386/x86-tune.def\r\n+++ b/gcc/config/i386/x86-tune.def\r\n@@ -42,7 +42,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see\r\n DEF_TUNE (X86_TUNE_SCHEDULE, \"schedule\",\r\n m_PENT | m_LAKEMONT | m_PPRO | m_CORE_ALL | m_BONNELL | m_SILVERMONT\r\n \t | m_INTEL | m_K6_GEODE | m_AMD_MULTIPLE | m_ZHAOXIN | m_GOLDMONT\r\n-\t | m_GOLDMONT_PLUS | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM\r\n+\t | m_GOLDMONT_PLUS | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G\r\n \t | m_GENERIC)\r\n \r\n /* X86_TUNE_PARTIAL_REG_DEPENDENCY: Enable more register renaming\r\n@@ -53,7 +53,7 @@ DEF_TUNE (X86_TUNE_PARTIAL_REG_DEPENDENCY, \"partial_reg_dependency\",\r\n m_P4_NOCONA | m_CORE2 | m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2\r\n \t | m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS | m_INTEL\r\n \t | m_AMD_MULTIPLE | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID\r\n-\t | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY: This knob promotes all store\r\n destinations to be 128bit to allow register renaming on 128bit SSE units,\r\n@@ -64,7 +64,7 @@ DEF_TUNE (X86_TUNE_PARTIAL_REG_DEPENDENCY, \"partial_reg_dependency\",\r\n DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY, \"sse_partial_reg_dependency\",\r\n m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10\r\n \t | m_BDVER | m_ZNVER | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID\r\n-\t | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY: This knob avoids\r\n partial write to the destination in scalar SSE conversion from FP\r\n@@ -73,7 +73,7 @@ DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY,\r\n \t \"sse_partial_reg_fp_converts_dependency\",\r\n \t m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10\r\n \t | m_BDVER | m_ZNVER | m_ZHAOXIN | m_CORE_HYBRID | m_CORE_ATOM\r\n-\t | m_GENERIC)\r\n+\t | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY: This knob avoids partial\r\n write to the destination in scalar SSE conversion from integer to FP. */\r\n@@ -81,7 +81,7 @@ DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY,\r\n \t \"sse_partial_reg_converts_dependency\",\r\n \t m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10\r\n \t | m_BDVER | m_ZNVER | m_ZHAOXIN | m_CORE_HYBRID | m_CORE_ATOM\r\n-\t | m_GENERIC)\r\n+\t | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_DEST_FALSE_DEP_FOR_GLC: This knob inserts zero-idiom before\r\n several insns to break false dependency on the dest register for GLC\r\n@@ -113,32 +113,33 @@ DEF_TUNE (X86_TUNE_MOVX, \"movx\",\r\n m_PPRO | m_P4_NOCONA | m_CORE2 | m_NEHALEM | m_SANDYBRIDGE\r\n \t | m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_INTEL\r\n \t | m_GOLDMONT_PLUS | m_GEODE | m_AMD_MULTIPLE | m_ZHAOXIN\r\n-\t | m_CORE_AVX2 | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_AVX2 | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM\r\n+\t | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_MEMORY_MISMATCH_STALL: Avoid partial stores that are followed by\r\n full sized loads. */\r\n DEF_TUNE (X86_TUNE_MEMORY_MISMATCH_STALL, \"memory_mismatch_stall\",\r\n m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL\r\n \t | m_GOLDMONT | m_GOLDMONT_PLUS | m_AMD_MULTIPLE | m_ZHAOXIN\r\n-\t | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_FUSE_CMP_AND_BRANCH_32: Fuse compare with a subsequent\r\n conditional jump instruction for 32 bit TARGET. */\r\n DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_32, \"fuse_cmp_and_branch_32\",\r\n-\t m_CORE_ALL | m_BDVER | m_ZNVER | m_ZHAOXIN | m_GENERIC)\r\n+\t m_CORE_ALL | m_BDVER | m_ZNVER | m_ZHAOXIN | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_FUSE_CMP_AND_BRANCH_64: Fuse compare with a subsequent\r\n conditional jump instruction for TARGET_64BIT. */\r\n DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_64, \"fuse_cmp_and_branch_64\",\r\n \t m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2 | m_BDVER\r\n-\t | m_ZNVER | m_ZHAOXIN | m_GENERIC)\r\n+\t | m_ZNVER | m_ZHAOXIN | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS: Fuse compare with a\r\n subsequent conditional jump instruction when the condition jump\r\n check sign flag (SF) or overflow flag (OF). */\r\n DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS, \"fuse_cmp_and_branch_soflags\",\r\n \t m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2 | m_BDVER\r\n-\t | m_ZNVER | m_ZHAOXIN | m_GENERIC)\r\n+\t | m_ZNVER | m_ZHAOXIN | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_FUSE_ALU_AND_BRANCH: Fuse alu with a subsequent conditional\r\n jump instruction when the alu instruction produces the CCFLAG consumed by\r\n@@ -150,6 +151,7 @@ DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, \"fuse_alu_and_branch\",\r\n \t m_SANDYBRIDGE | m_CORE_AVX2 | m_ZHAOXIN | m_GENERIC | m_ZNVER3 | m_ZNVER4 | m_ZNVER5\r\n \t | m_ZNVER6)\r\n \r\n+\r\n /* X86_TUNE_FUSE_MOV_AND_ALU: mov and alu in case mov is reg-reg mov\r\n and the destination is used by alu. alu must be one of\r\n ADD, ADC, AND, XOR, OR, SUB, SBB, INC, DEC, NOT, SAL, SHL, SHR, SAR. */\r\n@@ -201,14 +203,15 @@ DEF_TUNE (X86_TUNE_EPILOGUE_USING_MOVE, \"epilogue_using_move\",\r\n /* X86_TUNE_USE_LEAVE: Use \"leave\" instruction in epilogues where it fits. */\r\n DEF_TUNE (X86_TUNE_USE_LEAVE, \"use_leave\",\r\n \t m_386 | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE | m_ZHAOXIN\r\n-\t | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_PUSH_MEMORY: Enable generation of \"push mem\" instructions.\r\n Some chips, like 486 and Pentium works faster with separate load\r\n and push instructions. */\r\n DEF_TUNE (X86_TUNE_PUSH_MEMORY, \"push_memory\",\r\n m_386 | m_P4_NOCONA | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE\r\n-\t | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G\r\n+\t | m_GENERIC)\r\n \r\n /* X86_TUNE_SINGLE_PUSH: Enable if single push insn is preferred\r\n over esp subtraction. */\r\n@@ -292,7 +295,7 @@ DEF_TUNE (X86_TUNE_INTEGER_DFMODE_MOVES, \"integer_dfmode_moves\",\r\n ~(m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT\r\n \t | m_INTEL | m_GEODE | m_AMD_MULTIPLE | m_ZHAOXIN | m_GOLDMONT\r\n \t | m_GOLDMONT_PLUS | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM\r\n-\t | m_GENERIC))\r\n+\t | m_C86_4G | m_GENERIC))\r\n \r\n /* X86_TUNE_OPT_AGU: Optimize for Address Generation Unit. This flag\r\n will impact LEA instruction selection. */\r\n@@ -339,14 +342,14 @@ DEF_TUNE (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB,\r\n DEF_TUNE (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES,\r\n \t \"misaligned_move_string_pro_epilogues\",\r\n \t m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_ZHAOXIN | m_TREMONT\r\n-\t | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_USE_SAHF: Controls use of SAHF. */\r\n DEF_TUNE (X86_TUNE_USE_SAHF, \"use_sahf\",\r\n \t m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT\r\n \t | m_INTEL | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_BDVER | m_BTVER\r\n \t | m_ZNVER | m_ZHAOXIN | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT\r\n-\t | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_USE_CLTD: Controls use of CLTD and CTQO instructions. */\r\n DEF_TUNE (X86_TUNE_USE_CLTD, \"use_cltd\",\r\n@@ -357,7 +360,7 @@ DEF_TUNE (X86_TUNE_USE_CLTD, \"use_cltd\",\r\n DEF_TUNE (X86_TUNE_USE_BT, \"use_bt\",\r\n \t m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL | m_LAKEMONT\r\n \t | m_AMD_MULTIPLE | m_ZHAOXIN | m_GOLDMONT | m_GOLDMONT_PLUS\r\n-\t | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_AVOID_FALSE_DEP_FOR_BMI: Avoid false dependency\r\n for bit-manipulation instructions. */\r\n@@ -391,7 +394,7 @@ DEF_TUNE (X86_TUNE_ONE_IF_CONV_INSN, \"one_if_conv_insn\",\r\n /* X86_TUNE_AVOID_MFENCE: Use lock prefixed instructions instead of mfence. */\r\n DEF_TUNE (X86_TUNE_AVOID_MFENCE, \"avoid_mfence\",\r\n \t m_CORE_ALL | m_BDVER | m_ZNVER | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID\r\n-\t | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_EXPAND_ABS: This enables a new abs pattern by\r\n generating instructions for abs (x) = (((signed) x >> (W-1) ^ x) -\r\n@@ -415,10 +418,11 @@ DEF_TUNE (X86_TUNE_USE_SIMODE_FIOP, \"use_simode_fiop\",\r\n ~(m_PENT | m_LAKEMONT | m_PPRO | m_CORE_ALL | m_BONNELL\r\n \t | m_SILVERMONT | m_INTEL | m_AMD_MULTIPLE | m_ZHAOXIN | m_GOLDMONT\r\n \t | m_GOLDMONT_PLUS | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM\r\n-\t | m_GENERIC))\r\n+\t | m_C86_4G | m_GENERIC))\r\n \r\n /* X86_TUNE_USE_FFREEP: Use freep instruction instead of fstp. */\r\n-DEF_TUNE (X86_TUNE_USE_FFREEP, \"use_ffreep\", m_AMD_MULTIPLE | m_ZHAOXIN)\r\n+DEF_TUNE (X86_TUNE_USE_FFREEP, \"use_ffreep\", m_AMD_MULTIPLE | m_ZHAOXIN\r\n+\t | m_C86_4G)\r\n \r\n /* X86_TUNE_EXT_80387_CONSTANTS: Use fancy 80387 constants, such as PI. */\r\n DEF_TUNE (X86_TUNE_EXT_80387_CONSTANTS, \"ext_80387_constants\",\r\n@@ -442,30 +446,31 @@ DEF_TUNE (X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL, \"sse_unaligned_load_optimal\",\r\n \t m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2 | m_SILVERMONT | m_INTEL\r\n \t | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_CORE_HYBRID\r\n \t | m_CORE_ATOM | m_AMDFAM10 | m_BDVER | m_BTVER | m_ZNVER | m_ZHAOXIN\r\n-\t | m_GENERIC)\r\n+\t | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL: Use movups for misaligned stores\r\n instead of a sequence loading registers by parts. */\r\n DEF_TUNE (X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL, \"sse_unaligned_store_optimal\",\r\n \t m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2 | m_SILVERMONT\r\n \t | m_INTEL | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_CORE_HYBRID\r\n-\t | m_CORE_ATOM | m_BDVER | m_ZNVER | m_ZHAOXIN | m_GENERIC)\r\n+\t | m_CORE_ATOM | m_BDVER | m_ZNVER | m_ZHAOXIN | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL: Use packed single\r\n precision 128bit instructions instead of double where possible. */\r\n DEF_TUNE (X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL, \"sse_packed_single_insn_optimal\",\r\n-\t m_BDVER | m_ZNVER)\r\n+\t m_BDVER | m_ZNVER | m_C86_4G)\r\n \r\n /* X86_TUNE_SSE_TYPELESS_STORES: Always movaps/movups for 128bit stores. */\r\n DEF_TUNE (X86_TUNE_SSE_TYPELESS_STORES, \"sse_typeless_stores\",\r\n \t m_AMD_MULTIPLE | m_ZHAOXIN | m_CORE_ALL | m_TREMONT | m_CORE_HYBRID\r\n-\t | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_CORE_ATOM | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_SSE_LOAD0_BY_PXOR: Always use pxor to load0 as opposed to\r\n xorps/xorpd and other variants. */\r\n DEF_TUNE (X86_TUNE_SSE_LOAD0_BY_PXOR, \"sse_load0_by_pxor\",\r\n \t m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BDVER | m_BTVER | m_ZNVER\r\n-\t | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_ZHAOXIN | m_TREMONT | m_CORE_HYBRID | m_CORE_ATOM\r\n+\t | m_C86_4G | m_GENERIC)\r\n \r\n /* X86_TUNE_INTER_UNIT_MOVES_TO_VEC: Enable moves in from integer\r\n to SSE registers. If disabled, the moves will be done by storing\r\n@@ -531,46 +536,49 @@ DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, \"avoid_4byte_prefixes\",\r\n elements. */\r\n DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, \"use_gather_2parts\",\r\n \t ~(m_ZNVER | m_CORE_HYBRID\r\n-\t | m_YONGFENG | m_SHIJIDADAO | m_CORE_ATOM | m_GENERIC | m_GDS))\r\n+\t | m_YONGFENG | m_SHIJIDADAO | m_CORE_ATOM | m_GENERIC | m_GDS\r\n+\t | m_C86_4G))\r\n \r\n /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2\r\n elements. */\r\n DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, \"use_scatter_2parts\",\r\n-\t ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6))\r\n+\t ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7))\r\n+\r\n \r\n /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4\r\n elements. */\r\n DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, \"use_gather_4parts\",\r\n \t ~(m_ZNVER | m_CORE_HYBRID\r\n-\t | m_YONGFENG | m_SHIJIDADAO | m_CORE_ATOM | m_GENERIC | m_GDS))\r\n+\t | m_YONGFENG | m_SHIJIDADAO | m_CORE_ATOM | m_GENERIC | m_GDS\r\n+\t | m_C86_4G))\r\n \r\n /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4\r\n elements. */\r\n DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, \"use_scatter_4parts\",\r\n-\t ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6))\r\n+\t ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7))\r\n \r\n /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more\r\n elements. */\r\n DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, \"use_gather_8parts\",\r\n \t ~(m_ZNVER | m_CORE_HYBRID | m_CORE_ATOM\r\n-\t | m_YONGFENG | m_SHIJIDADAO | m_GENERIC | m_GDS))\r\n+\t | m_YONGFENG | m_SHIJIDADAO | m_GENERIC | m_GDS | m_C86_4G))\r\n \r\n /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more\r\n elements. */\r\n DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, \"use_scatter_8parts\",\r\n-\t ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6))\r\n+\t ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7))\r\n \r\n /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or\r\n smaller FMA chain. */\r\n DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, \"avoid_fma_chains\", m_ZNVER\r\n- | m_YONGFENG | m_SHIJIDADAO | m_GENERIC)\r\n+\t | m_YONGFENG | m_SHIJIDADAO | m_GENERIC | m_C86_4G)\r\n \r\n /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or\r\n smaller FMA chain. */\r\n DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, \"avoid_fma256_chains\",\r\n \t m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_CORE_HYBRID\r\n \t | m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D\r\n-\t | m_DIAMONDRAPIDS | m_CORE_ATOM | m_GENERIC)\r\n+\t | m_DIAMONDRAPIDS | m_CORE_ATOM | m_GENERIC | m_C86_4G)\r\n \r\n /* X86_TUNE_AVOID_512FMA_CHAINS: Avoid creating loops with tight 512bit or\r\n smaller FMA chain. */\r\n@@ -593,7 +601,7 @@ DEF_TUNE (X86_TUNE_SSE_MOVCC_USE_BLENDV,\r\n /* X86_TUNE_V4SI_REDUCTION_PREFER_SHUFD: Prefer pshuf to reduce V16QI,\r\n V8HI, V8HI, V4SI, V4FI, V2DI modes when lshr are costlier. */\r\n DEF_TUNE (X86_TUNE_SSE_REDUCTION_PREFER_PSHUF,\r\n- \"sse_reduction_prefer_pshuf\", m_ZNVER4 | m_ZNVER5)\r\n+ \"sse_reduction_prefer_pshuf\", m_ZNVER4 | m_ZNVER5 | m_C86_4G_M7)\r\n \r\n /*****************************************************************************/\r\n /* AVX instruction selection tuning (some of SSE flags affects AVX, too) */\r\n@@ -628,19 +636,21 @@ DEF_TUNE (X86_TUNE_AVX256_AVOID_VEC_PERM,\r\n \t \"avx256_avoid_vec_perm\", m_CORE_ATOM)\r\n \r\n /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX512 ops are split into two AVX256 ops. */\r\n-DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, \"avx512_split_regs\", m_ZNVER4)\r\n+DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, \"avx512_split_regs\", m_ZNVER4\r\n+\t | m_C86_4G_M7)\r\n \r\n /* It's better to align MOVE_MAX with prefer_vector_width to reduce\r\n risk of STLF stalls(small store followed by big load.) */\r\n /* X86_TUNE_AVX256_MOVE_BY_PIECES: Optimize move_by_pieces with 256-bit\r\n AVX instructions. */\r\n DEF_TUNE (X86_TUNE_AVX256_MOVE_BY_PIECES, \"avx256_move_by_pieces\",\r\n-\t m_CORE_HYBRID | m_CORE_AVX2 | m_ZNVER1 | m_ZNVER2 | m_ZNVER3)\r\n+\t m_CORE_HYBRID | m_CORE_AVX2 | m_ZNVER1 | m_ZNVER2 | m_ZNVER3\r\n+\t | m_C86_4G_M4 | m_C86_4G_M6)\r\n \r\n /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit\r\n AVX instructions. */\r\n DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, \"avx512_move_by_pieces\",\r\n-\t m_ZNVER4 | m_ZNVER5 | m_ZNVER6)\r\n+\t m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7)\r\n \r\n /* X86_TUNE_AVX512_TWO_EPILOGUES: Use two vector epilogues for 512-bit\r\n vectorized loops. */\r\n@@ -650,7 +660,7 @@ DEF_TUNE (X86_TUNE_AVX512_TWO_EPILOGUES, \"avx512_two_epilogues\",\r\n /* X86_TUNE_AVX512_MAKED_EPILOGUES: Use two masked vector epilogues\r\n when fit. */\r\n DEF_TUNE (X86_TUNE_AVX512_MASKED_EPILOGUES, \"avx512_masked_epilogues\",\r\n-\t m_ZNVER4 | m_ZNVER5)\r\n+\t m_ZNVER4 | m_ZNVER5 | m_C86_4G_M7)\r\n \r\n /*****************************************************************************/\r\n /*****************************************************************************/\r\n@@ -792,4 +802,4 @@ DEF_TUNE (X86_TUNE_PROMOTE_QI_REGS, \"promote_qi_regs\", m_NONE)\r\n DEF_TUNE (X86_TUNE_SLOW_STC, \"slow_stc\", m_PENT4)\r\n \r\n /* X86_TUNE_USE_RCR: Controls use of rcr 1 instruction instead of shrd. */\r\n-DEF_TUNE (X86_TUNE_USE_RCR, \"use_rcr\", m_AMD_MULTIPLE)\r\n+DEF_TUNE (X86_TUNE_USE_RCR, \"use_rcr\", m_AMD_MULTIPLE | m_C86_4G)\r\ndiff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi\r\nindex 47b0bdf13..5383da19b 100644\r\n--- a/gcc/doc/extend.texi\r\n+++ b/gcc/doc/extend.texi\r\n@@ -29046,6 +29046,18 @@ AMD Family 1ah Zen version 5.\r\n \r\n @item znver6\r\n AMD Family 1ah Zen version 6.\r\n+\r\n+@item hygonfam18h\r\n+HYGON Family 18h CPU.\r\n+\r\n+@item c86-4g-m4\r\n+HYGON Family 18h model 4 dharma CPU.\r\n+\r\n+@item c86-4g-m6\r\n+HYGON Family 18h model 6 shanghai CPU.\r\n+\r\n+@item c86-4g-m7\r\n+HYGON Family 18h model 7 chengdu CPU.\r\n @end table\r\n \r\n Here is an example:\r\ndiff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi\r\nindex 00f470a0d..d7bf3fc60 100644\r\n--- a/gcc/doc/invoke.texi\r\n+++ b/gcc/doc/invoke.texi\r\n@@ -35311,6 +35311,27 @@ instruction set support.\r\n \r\n @item geode\r\n AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.\r\n+\r\n+@item c86-4g-m4\r\n+HYGON c86-4g-m4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM, SSSE3,\r\n+SSE4.1, SSE4.2, AES, PCLMUL, AVX, AVX2, BMI, BMI2, F16C, FMA, PRFCHW, FXSR, SHA,\r\n+XSAVE, XSAVEOPT, XSAVEC, FSGSBASE, RDRND, MOVBE, MWAITX, ADX, RDSEED, CLZERO,\r\n+CLFLUSHOPT, XSAVES, LZCNT, POPCNT instruction set support.\r\n+\r\n+@item c86-4g-m6\r\n+HYGON c86-4g-m6 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM, SSSE3,\r\n+SSE4.1, SSE4.2, AES, PCLMUL, AVX, AVX2, BMI, BMI2, F16C, FMA, PRFCHW, FXSR, SHA,\r\n+XSAVE, XSAVEOPT, XSAVEC, FSGSBASE, RDRND, MOVBE, MWAITX, ADX, RDSEED, CLZERO,\r\n+CLFLUSHOPT, XSAVES, LZCNT, POPCNT instruction set support.\r\n+\r\n+@item c86-4g-m7\r\n+HYGON c86-4g-m7 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM, SSSE3,\r\n+SSE4.1, SSE4.2, AES, PCLMUL, AVX, AVX2, BMI, BMI2, F16C, FMA, PRFCHW, FXSR, SHA,\r\n+XSAVE, XSAVEOPT, XSAVEC, FSGSBASE, RDRND, MOVBE, MWAITX, ADX, RDSEED, CLZERO,\r\n+CLFLUSHOPT, XSAVES, LZCNT, POPCNT, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,\r\n+AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, GFNI, AVX512VNNI, VAES,\r\n+AVX512BITALG, AVX512VPOPCNTDQ, AVX512VP2INTERSECT, AVXVNNI, VPCLMULQDQ,\r\n+WBNOINVD instruction set support.\r\n @end table\r\n \r\n @opindex mtune\r\ndiff --git a/gcc/testsuite/g++.target/i386/mv33.C b/gcc/testsuite/g++.target/i386/mv33.C\r\nnew file mode 100644\r\nindex 000000000..8591690d2\r\n--- /dev/null\r\n+++ b/gcc/testsuite/g++.target/i386/mv33.C\r\n@@ -0,0 +1,42 @@\r\n+// Test that dispatching can choose the right multiversion\r\n+// for HYGON CPUs with the same internal GCC processor id\r\n+\r\n+// { dg-do run }\r\n+// { dg-require-ifunc \"\" }\r\n+// { dg-options \"-O2\" }\r\n+\r\n+#include <assert.h>\r\n+\r\n+int __attribute__ ((target(\"default\")))\r\n+foo ()\r\n+{\r\n+ return 0;\r\n+}\r\n+\r\n+int __attribute__ ((target(\"arch=c86-4g-m4\"))) foo () {\r\n+ return 1;\r\n+}\r\n+\r\n+int __attribute__ ((target(\"arch=c86-4g-m6\"))) foo () {\r\n+ return 2;\r\n+}\r\n+\r\n+int __attribute__ ((target(\"arch=c86-4g-m7\"))) foo () {\r\n+ return 3;\r\n+}\r\n+\r\n+int main ()\r\n+{\r\n+ int val = foo ();\r\n+\r\n+ if (__builtin_cpu_is (\"c86-4g-m4\"))\r\n+ assert (val == 1);\r\n+ else if (__builtin_cpu_is (\"c86-4g-m6\"))\r\n+ assert (val == 2);\r\n+ else if (__builtin_cpu_is (\"c86-4g-m7\"))\r\n+ assert (val == 3);\r\n+ else\r\n+ assert (val == 0);\r\n+\r\n+ return 0;\r\n+}\r\ndiff --git a/gcc/testsuite/gcc.target/i386/builtin_target.c b/gcc/testsuite/gcc.target/i386/builtin_target.c\r\nindex 45554d877..f26ba2be4 100644\r\n--- a/gcc/testsuite/gcc.target/i386/builtin_target.c\r\n+++ b/gcc/testsuite/gcc.target/i386/builtin_target.c\r\n@@ -54,6 +54,10 @@ check_detailed ()\r\n assert (__builtin_cpu_is (\"amd\"));\r\n get_amd_cpu (&cpu_model, &cpu_model2, cpu_features2);\r\n break;\r\n+ case VENDOR_HYGON:\r\n+ assert (__builtin_cpu_is (\"hygon\"));\r\n+ get_hygon_cpu (&cpu_model, &cpu_model2, cpu_features2);\r\n+ break;\r\n default:\r\n break;\r\n }\r\n@@ -127,6 +131,8 @@ quick_check ()\r\n \r\n assert (__builtin_cpu_is (\"bdver2\") >= 0);\r\n \r\n+ assert (__builtin_cpu_is (\"c86-4g-m4\") >= 0);\r\n+\r\n return 0;\r\n }\r\n \r\ndiff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc\r\nindex aa395185b..43ccaa9d9 100644\r\n--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc\r\n+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc\r\n@@ -239,6 +239,9 @@ extern void test_arch_znver3 (void) __attribute__((__target__(\"arch=\r\n extern void test_arch_znver4 (void) __attribute__((__target__(\"arch=znver4\")));\r\n extern void test_arch_znver5 (void) __attribute__((__target__(\"arch=znver5\")));\r\n extern void test_arch_znver6 (void) __attribute__((__target__(\"arch=znver6\")));\r\n+extern void test_arch_c86_4g_m4 (void) __attribute__((__target__(\"arch=c86-4g-m4\")));\r\n+extern void test_arch_c86_4g_m6 (void) __attribute__((__target__(\"arch=c86-4g-m6\")));\r\n+extern void test_arch_c86_4g_m7 (void) __attribute__((__target__(\"arch=c86-4g-m7\")));\r\n \r\n extern void test_tune_nocona (void)\t\t__attribute__((__target__(\"tune=nocona\")));\r\n extern void test_tune_core2 (void)\t\t__attribute__((__target__(\"tune=core2\")));\r\n@@ -267,6 +270,9 @@ extern void test_tune_znver3 (void) __attribute__((__target__(\"tune=\r\n extern void test_tune_znver4 (void) __attribute__((__target__(\"tune=znver4\")));\r\n extern void test_tune_znver5 (void) __attribute__((__target__(\"tune=znver5\")));\r\n extern void test_tune_znver6 (void) __attribute__((__target__(\"tune=znver6\")));\r\n+extern void test_tune_c86_4g_m4 (void) __attribute__((__target__(\"tune=c86-4g-m4\")));\r\n+extern void test_tune_c86_4g_m6 (void) __attribute__((__target__(\"tune=c86-4g-m6\")));\r\n+extern void test_tune_c86_4g_m7 (void) __attribute__((__target__(\"tune=c86-4g-m7\")));\r\n \r\n extern void test_fpmath_sse (void)\t\t__attribute__((__target__(\"sse2,fpmath=sse\")));\r\n extern void test_fpmath_387 (void)\t\t__attribute__((__target__(\"sse2,fpmath=387\")));\r\n", "prefixes": [] }