From patchwork Thu Jul 27 21:43:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Faust X-Patchwork-Id: 1813963 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=qxQnLFtZ; dkim-atps=neutral Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RBkmq5NqZz1yZb for ; Fri, 28 Jul 2023 07:44:11 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 78F503856969 for ; Thu, 27 Jul 2023 21:44:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 78F503856969 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1690494249; bh=694iMo2UjGVvN+lNuW6F39PTVg1MHVoUODfE09b0+EE=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=qxQnLFtZV3/PqFKRPPA84w4JQtxLiy13gon2eyTFkoFxGtdbhEtLWnc5W9CzwoPj3 kfW4T1aRYJQXLiMWmJoPcRHDFmGm+/K/khIaveSOq3TBmBLuKxO9gHzFsjkVq5UaB2 oZgof/V2qKh6H/6Wqc5E8E6moTNeL/aXmMsaLyug= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id BA29E3858D37 for ; Thu, 27 Jul 2023 21:43:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BA29E3858D37 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36RFOdp8014605 for ; Thu, 27 Jul 2023 21:43:46 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3s070b2qt8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Jul 2023 21:43:45 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 36RKhfx2025341 for ; Thu, 27 Jul 2023 21:43:45 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2168.outbound.protection.outlook.com [104.47.58.168]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3s05j8pprs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Jul 2023 21:43:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JB0cXASa8eOMxeUFT0V0YUyPuVC63tI+HIKObYFkijApBsiz3Oh3RPkRCYXFGsFLRD+G3NC4mU909XZxUbDotGAmGQlYLFtGwHjIVwaHqWdKrsj/pGEej/V0ZCR9e0yEcB9rjDSckXNuFl09Dgrg4gpsHwZRfGOrDxfDRHUGV1tS0hfTQPWM44OPthPvGrDZ7B1Okv0E1Wu7PJNxnG04glkXi8bks5/1BCyCJAfXLalqCGEB2Jvj/rS/FLO+Vjwkmw65KmRe/Wrr8bTF8VqYG2Ef5/f35/sqB1I7zF7opV5C8dQopmHTGkOlJ6arnd/wDwi0u0BF1QOyL9W4F9Xyng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=694iMo2UjGVvN+lNuW6F39PTVg1MHVoUODfE09b0+EE=; b=gJi5mGOEKVPJapDLHZpa1oa+ga7ivcsuHe7PXtkLR7rWm8bjGCmk5pV2Vu2zyergudIci/velr56eY3ssarcT9kkBaoeFO4WT56ydayEt4zX+OHy1HNNzskDPD8/Wj0NHHGtJv/BGEfCqXzsIcF8/DyzTAWfegHry0rkva7Y0iXhjZ3An3KCam9MaMdAZe/MAensha4Nxgn8SryTh43IPUlKVxKxhOiZus9pTzBH7Yl/zKTSh2guPuGJBr2khh/jchYphJQXXI/Qdutf1nx9Z7EPLnXmEnBxqEHXefsdbIZ5nyoHGsLcq+ZEWP7K1ys3dj6Dv4TeiruJsolNC5NaQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) by IA0PR10MB7578.namprd10.prod.outlook.com (2603:10b6:208:491::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.24; Thu, 27 Jul 2023 21:43:43 +0000 Received: from MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::827f:8665:2052:16c5]) by MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::827f:8665:2052:16c5%4]) with mapi id 15.20.6631.026; Thu, 27 Jul 2023 21:43:42 +0000 To: gcc-patches@gcc.gnu.org Cc: jose.marchesi@oracle.com Subject: [PATCH] bpf: ISA V4 sign-extending move and load insns [PR110782, PR110784] Date: Thu, 27 Jul 2023 14:43:24 -0700 Message-ID: <20230727214324.18871-1-david.faust@oracle.com> X-Mailer: git-send-email 2.41.0 X-ClientProxiedBy: SA1P222CA0039.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2d0::12) To MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB3213:EE_|IA0PR10MB7578:EE_ X-MS-Office365-Filtering-Correlation-Id: 596668a9-1a82-4ef6-3dee-08db8eea8c00 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /WnqhZa2CCKtyIoCitc32QAuqdEk255cyIkBqzYv5rnieEhCfjBekSlJxvIc1HXl1VNYV2+t7loEfLREsAhn8Mp9rj9HAVvbFwwWao2xzAM/hzAgwR1B+pRhHmR771EKjlV+VQgUK2WKlU9WGMOxYdgMBTd/5SsyMqw6m4S+cDXuIPEk8/uqRVVz2TgPCIUiW44EeDxw7WPxhQNPSqnggU4QqcCS3ZuP13swOlx6Kk0FnApgtwx2v6svu+PeHhyyfQ0LH5x6rId2WmJPJVJbHLb1Itfn69aNF+ZPF9fD90PMe7uek0WFfh3kf4jamMdIk6nrYz7mIpb1hZfXBhXovEsUs1V/ggD7TlhA8vMvOMzcs5AZvmhvzrxOcFVqQfKyWSTDDk8rHj0w2buf+qkQCPcH/Uvq0fqfAcIJhppX6rHtyoNOrnFdaLd+YJmPiCzECTLD88D6Ujg9g+nsfOJpzVLoER7gPJxCKQae9jv55r77LIf/jeb7gZ6fVaFppPM4EYNQtCNZ0WoVOzghwGTsOFjN29eoZon7yfOc9y2cfXQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR10MB3213.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(136003)(39860400002)(396003)(366004)(376002)(346002)(451199021)(83380400001)(2616005)(2906002)(38100700002)(478600001)(6486002)(107886003)(66946007)(6916009)(4326008)(6506007)(41300700001)(1076003)(186003)(66556008)(316002)(66476007)(84970400001)(6512007)(5660300002)(36756003)(8936002)(8676002)(86362001)(44832011)(6666004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: MEF9b2uC/IOXcd2l7heTl/Mio/I2LetXwfmaDJ/YTUHaEMdGpFD5iA82jXz7UU4JyRDaXva4nqVnDF2drxs6+Z07xo51PL7y7UulTuhBcd4hMu8RgpBhYdePv45EHySQJwu6hTTnzz/gIksAFrxJNRl6DS7PL/6aO8GlBC26T2buo2ZINVfPqPnvC8UBDr/9sJJWxyUA7+gxg8690qrNRqgW5hV3bcJ34nZNZgR5UTMFzUQQ1FIwF6gaxMD4XyZ7PJIqcnMfeHukEDDBwuaOcfmP+IEQ4dLGKGYmrQneS1NpznrY5dd7hQe7L+MzFEwhWQMAkTnYUyN6y9KkkS5J2M02fHGSCV7121EickCQd5MAlvHtDN+23bYXZdApmVEaHe3h4GyvU1go0+/BUSINn8h1KP244NJZuUpSMlfGXv90J3Hb9W4KIj1fXVtl9pfQQuLqZAVnTjH8HNKMpXGhmwi2FQsTfdUYrI6Eu2GEoXlJv45pOO7LEmucF83LYegYZuS5eqoJ147PYYjzr7m2HI7z3hgP74AwAOw54vvqKDCseDfD6iQFsJeoQndNpe0W+yjwZMmxefwZy9htE6uPjP1JswrLOobNY6pG7nEx7VhH9OGDVI9I4W5a6o9FYdfqFA6JYTOpC0uWXm0G/QwVTIDwbPqb9SMeiHlCD6qf4zhxxU4EduyL5vwRxHBzITYf08TzmuYrqyU2Om9NuffXlvOJQWsgtedx8nPFLahgBI41PPxSFIlRWTFm3rhsRmgCsm1NDoD5lI4leO+X/vkaaYT4OxXUP27/ZCO/HPPdIsptuFLZOGHN91L8YTKjR3rEUd2DV+VQ97/Grub0z6lEIigt6xLS66UMk+axTiXtXPt0GZDOAYxEWSj63MUz3B1k/gad6MW3IY6Yi3yeVsfBAa3oB4ABk7pmNwmuIpZ9AYYliLMNpFSwHVP4PF8CZRLD8qFHpc/KvdggBkajIU1K/TDCDNbzt/pEjmQlWD0cMg9oUMAcMNuhWTz2cO83yPn4DoJj9Z/l8OOjRaKLJeZshPvInN0l8HhDlp8RXVs1K+OjTpKIXCqv/f3EB4xe+lK1vyJsXdIvQuvFpKUalUOQS1R5jbZ4wR/9mTprQz61UgskPhurTJESbKj+QIXq4Y4EKpRv/cRcIPIzt3w9AJYSY8kU24n6ILDRi5oeF8Vuy12oWFBTyVWA3RALS78FAiK7+M0T16RkvcMCyLIqTpsy0qg7KKvLoX3x7L1uw70icwJwk1Df/6obQm0m/nFK3RWMtzof32fUCZ01ER1TbxvVNAYVY40508e88/rkw8mbb6km/pa2DBXE7DK8ijYrSmrGfdkQvPNZwzoZNnKIaOmrUKG26JwE66l8uTAenR+Kfl5DwHrf9OK9uUO7vHjS16j6P1CL6dxzaFJqWP4wyVLsMjV+QfO+MtbG742r04XvAMqoA4GVUfq7rSWVaFJYIx3blH/aoLWPLOIqU1g9xfwIP6fCAi9Owg7uJZ3LDXNFOh+Arf74Qo5SjJor9mvXu3PjzC8N1NnmFWgR33VhoOPiBh/fGPqNgjmvU3ONIt9iPn4/SThgcqKYZPN5yzrweGW0U8xU+5GH+7DwRukVYDwAiv+XDl5UWck7EOjXLODp06Q= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: j6Xr4y/18g6lNhIcMGGUtZ5E0KaXPdfeOh2Ney8fKg+J3O66mW6T2ot60S+GUYeKUD2WzIfddFEgmRQu6IYB4knV+wEYE+DKTz2KPy4AXq7TUVEgWxs0DyqWVHxSqu/EoYYW3BxptVEnlER0+AYWLs2acED5FY1ewsLOQCV/nsUADDnoZPNFrnV1jKiZfMtQCggPWkn4uAsoS5TLRQE1EY+4R4HfQKiEbWNARSEmdG+/x8p7AM3nenEivmDDu0O8BrsPMk0Gdan/tTWoEL+nYJOFbUsVzcNopa8h0/ahOUg7dMtgD4OcCoSPxsU1rnRaMbc6u98HEOzTH2SOUevNTCJMiT4MCzAPaBA8rnGwKsMw0TaFoepKT2/TGJRugZmK1MQm+qHROwNFa8iVzZOi+Jvnenlnm+XbV6FZveMr4APhW2kevTX4NU858Qgm58uyn8d9ZEMdZUs4hjvqfAF5OK+YycNxa2Ziqu0BIb3EDFxd/cDt6zpH+CTKHukc6iiZMPtlv9hap6Qm+u2GZIJVYhYaAMeZ8UV26PCeLpzgpex6ZyyJm7N0mjqvLMOsFokk55vhSbIxjfTRpEoc4n/+iU51iDGG6TG4kajCZLHU6yiRWr5yG+P8NMeKl2wmsHtcMfq1PR0jgpG2jpBF/7Sb1V+XB2lhkb4YGfZifFxe3DU3AjqdjAvSTwRTFaWoIyqYlsqC/rgmaVLAHWynGtviaWgU3JxfcXgpwU4fPqgGb2KLoRJHhBcTaprF+a90XThX X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 596668a9-1a82-4ef6-3dee-08db8eea8c00 X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3213.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2023 21:43:42.8672 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2sy8TA+bmSM+lFS8BBZgGF06F3/+Amhcfo8LhdOgAZLcT59D61JhSgt0wjZcM6F1QUpKAPSM+FW2ZovnUxYL+Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR10MB7578 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-27_10,2023-07-26_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 bulkscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307270198 X-Proofpoint-GUID: NA703Z4eKFJ_t5cX0-Dy08hpshHthYxH X-Proofpoint-ORIG-GUID: NA703Z4eKFJ_t5cX0-Dy08hpshHthYxH X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: David Faust via Gcc-patches From: David Faust Reply-To: David Faust Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" BPF ISA V4 introduces sign-extending move and load operations. This patch makes the BPF backend generate those instructions, when enabled and useful. A new option, -m[no-]smov gates generation of these instructions, and is enabled by default for -mcpu=v4 and above. Tests for the new instructions and documentation for the new options are included. Tested on bpf-unknown-none. OK? gcc/ * config/bpf/bpf.opt (msmov): New option. * config/bpf/bpf.cc (bpf_option_override): Handle it here. * config/bpf/bpf.md (*extendsidi2): New. (extendhidi2): New. (extendqidi2): New. (extendsisi2): New. (extendhisi2): New. (extendqisi2): New. * doc/invoke.texi (Option Summary): Add -msmov eBPF option. (eBPF Options): Add -m[no-]smov. Document that -mcpu=v4 also enables -msmov. gcc/testsuite/ * gcc.target/bpf/sload-1.c: New test. * gcc.target/bpf/sload-pseudoc-1.c: New test. * gcc.target/bpf/smov-1.c: New test. * gcc.target/bpf/smov-pseudoc-1.c: New test. --- gcc/config/bpf/bpf.cc | 3 ++ gcc/config/bpf/bpf.md | 50 +++++++++++++++++++ gcc/config/bpf/bpf.opt | 4 ++ gcc/doc/invoke.texi | 9 +++- gcc/testsuite/gcc.target/bpf/sload-1.c | 16 ++++++ .../gcc.target/bpf/sload-pseudoc-1.c | 16 ++++++ gcc/testsuite/gcc.target/bpf/smov-1.c | 18 +++++++ gcc/testsuite/gcc.target/bpf/smov-pseudoc-1.c | 18 +++++++ 8 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/bpf/sload-1.c create mode 100644 gcc/testsuite/gcc.target/bpf/sload-pseudoc-1.c create mode 100644 gcc/testsuite/gcc.target/bpf/smov-1.c create mode 100644 gcc/testsuite/gcc.target/bpf/smov-pseudoc-1.c diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc index 0e07b416add..b5b5674edbb 100644 --- a/gcc/config/bpf/bpf.cc +++ b/gcc/config/bpf/bpf.cc @@ -262,6 +262,9 @@ bpf_option_override (void) if (bpf_has_sdiv == -1) bpf_has_sdiv = (bpf_isa >= ISA_V4); + if (bpf_has_smov == -1) + bpf_has_smov = (bpf_isa >= ISA_V4); + /* Disable -fstack-protector as it is not supported in BPF. */ if (flag_stack_protect) { diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index 66436397bb7..a69a239b9d6 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -307,6 +307,56 @@ (define_expand "extendsidi2" DONE; }) +;; ISA V4 introduces sign-extending move and load operations. + +(define_insn "*extendsidi2" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "r,q")))] + "bpf_has_smov" + "@ + {movs\t%0,%1,32|%0 = (s32) %1} + {ldxsw\t%0,%1|%0 = *(s32 *) (%1)}" + [(set_attr "type" "alu,ldx")]) + +(define_insn "extendhidi2" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (sign_extend:DI (match_operand:HI 1 "nonimmediate_operand" "r,q")))] + "bpf_has_smov" + "@ + {movs\t%0,%1,16|%0 = (s16) %1} + {ldxsh\t%0,%1|%0 = *(s16 *) (%1)}" + [(set_attr "type" "alu,ldx")]) + +(define_insn "extendqidi2" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (sign_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,q")))] + "bpf_has_smov" + "@ + {movs\t%0,%1,8|%0 = (s8) %1} + {ldxsb\t%0,%1|%0 = *(s8 *) (%1)}" + [(set_attr "type" "alu,ldx")]) + +(define_insn "extendsisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:SI 1 "register_operand" "r")))] + "bpf_has_smov" + "{movs32\t%0,%1,32|%w0 = (s32) %w1}" + [(set_attr "type" "alu")]) + +(define_insn "extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] + "bpf_has_smov" + "{movs32\t%0,%1,16|%w0 = (s16) %w1}" + [(set_attr "type" "alu")]) + +(define_insn "extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] + "bpf_has_smov" + "{movs32\t%0,%1,8|%w0 = (s8) %w1}" + [(set_attr "type" "alu")]) + ;;;; Data movement (define_mode_iterator MM [QI HI SI DI SF DF]) diff --git a/gcc/config/bpf/bpf.opt b/gcc/config/bpf/bpf.opt index b21cfcab9ea..8e240d397e4 100644 --- a/gcc/config/bpf/bpf.opt +++ b/gcc/config/bpf/bpf.opt @@ -71,6 +71,10 @@ msdiv Target Var(bpf_has_sdiv) Init(-1) Enable signed division and modulus instructions. +msmov +Target Var(bpf_has_smov) Init(-1) +Enable signed move and memory load instructions. + mcpu= Target RejectNegative Joined Var(bpf_isa) Enum(bpf_isa) Init(ISA_V4) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 91113dd5821..e574acfd612 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -947,7 +947,7 @@ Objective-C and Objective-C++ Dialects}. @emph{eBPF Options} @gccoptlist{-mbig-endian -mlittle-endian -mframe-limit=@var{bytes} -mxbpf -mco-re -mno-co-re -mjmpext --mjmp32 -malu32 -mv3-atomics -mbswap -msdiv -mcpu=@var{version} +-mjmp32 -malu32 -mv3-atomics -mbswap -msdiv -msmov -mcpu=@var{version} -masm=@var{dialect}} @emph{FR30 Options} @@ -24718,6 +24718,12 @@ Enable or disable byte swap instructions. Enabled for CPU v4 and above. Enable or disable signed division and modulus instructions. Enabled for CPU v4 and above. +@opindex msmov +@item -msmov +@itemx -mno-smov +Enable sign-extending move and memory load instructions. Enabled for +CPU v4 and above. + @opindex mcpu @item -mcpu=@var{version} This specifies which version of the eBPF ISA to target. Newer versions @@ -24745,6 +24751,7 @@ All features of v3, plus: @itemize @minus @item Byte swap instructions, as in @option{-mbswap} @item Signed division and modulus instructions, as in @option{-msdiv} +@item Sign-extending move and memory load instructions, as in @option{-msmov} @end itemize @end table diff --git a/gcc/testsuite/gcc.target/bpf/sload-1.c b/gcc/testsuite/gcc.target/bpf/sload-1.c new file mode 100644 index 00000000000..d85822932d3 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/sload-1.c @@ -0,0 +1,16 @@ +/* Check ISA V4 signed load instructions. */ +/* { dg-do compile } */ +/* { dg-options "-mcpu=v4 -O2" } */ + +long foo (char *p1, short *p2, int *p3) +{ + long x = *p1; + long y = *p2; + long z = *p3; + + return x + y + z; +} + +/* { dg-final { scan-assembler {ldxsb\t%r.,\[%r.\+-?[0-9]+\]\n} } } */ +/* { dg-final { scan-assembler {ldxsh\t%r.,\[%r.\+-?[0-9]+\]\n} } } */ +/* { dg-final { scan-assembler {ldxsw\t%r.,\[%r.\+-?[0-9]+\]\n} } } */ diff --git a/gcc/testsuite/gcc.target/bpf/sload-pseudoc-1.c b/gcc/testsuite/gcc.target/bpf/sload-pseudoc-1.c new file mode 100644 index 00000000000..5ac5548b847 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/sload-pseudoc-1.c @@ -0,0 +1,16 @@ +/* Check ISA V4 signed load instructions (pseudo-C dialect). */ +/* { dg-do compile } */ +/* { dg-options "-mcpu=v4 -O2 -masm=pseudoc" } */ + +long foo (char *p1, short *p2, int *p3) +{ + long x = *p1; + long y = *p2; + long z = *p3; + + return x + y + z; +} + +/* { dg-final { scan-assembler {r. = \*\(s8 \*\) \(r.\+-?[0-9]+\)\n} } } */ +/* { dg-final { scan-assembler {r. = \*\(s16 \*\) \(r.\+-?[0-9]+\)\n} } } */ +/* { dg-final { scan-assembler {r. = \*\(s32 \*\) \(r.\+-?[0-9]+\)\n} } } */ diff --git a/gcc/testsuite/gcc.target/bpf/smov-1.c b/gcc/testsuite/gcc.target/bpf/smov-1.c new file mode 100644 index 00000000000..ec17ad06fd2 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/smov-1.c @@ -0,0 +1,18 @@ +/* Check signed mov instructions. */ +/* { dg-do compile } */ +/* { dg-options "-mcpu=v4 -O2" } */ + +long +foo (char a, short b, int c, unsigned long d) +{ + long x = a; + long y = b; + long z = c; + long w = (long) d; + + return x + y + z + w; +} + +/* { dg-final { scan-assembler {movs\t%r.,%r.,8\n} } } */ +/* { dg-final { scan-assembler {movs\t%r.,%r.,16\n} } } */ +/* { dg-final { scan-assembler {movs\t%r.,%r.,32\n} } } */ diff --git a/gcc/testsuite/gcc.target/bpf/smov-pseudoc-1.c b/gcc/testsuite/gcc.target/bpf/smov-pseudoc-1.c new file mode 100644 index 00000000000..b15334ee4e3 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/smov-pseudoc-1.c @@ -0,0 +1,18 @@ +/* Check signed mov instructions (pseudo-C asm dialect). */ +/* { dg-do compile } */ +/* { dg-options "-mcpu=v4 -O2 -masm=pseudoc" } */ + +long +foo (char a, short b, int c, unsigned long d) +{ + long x = a; + long y = b; + long z = c; + long w = (long) d; + + return x + y + z + w; +} + +/* { dg-final { scan-assembler {r. = \(s8\) r.\n} } } */ +/* { dg-final { scan-assembler {r. = \(s16\) r.\n} } } */ +/* { dg-final { scan-assembler {r. = \(s32\) r.\n} } } */