From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 8B94A3858410 for ; Fri, 21 Jul 2023 15:10:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8B94A3858410 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36LEGEr0003846 for ; Fri, 21 Jul 2023 15:10:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : in-reply-to : references : date : message-id : content-type : mime-version; s=corp-2023-03-30; bh=dEkTxG5GwB7a1DrO1+t0AwlxTQDreZbmy9dIsaQowBM=; b=iZqxghroqNsvQVywK1dpHq9qjI4W0jzCjt2hodBMddIKQ897qFllcAS8WooW8pKwSkxm vf1KzjyUdHU6WZynwATsAQn5bd0UzGjkN+UVggmsmhfAsWmIvIUgclRl9MevZI78rbq/ wQELo8qp95fY7+L9/uo7WOhZrUNaiMvJ6y8XH0Cp8eiqSPdtTB5GEvYjE3jnDORXq8AS P9GzhEt+ABem0MXFglYXBKCrzZQiW1UFKJHnEVkuFFFzdgrNrZEUVGkhcX+beA7tX+u9 OpXfLQP+LRWk8MvuFfekJhEgnD+MkrSEbQPRNfX4t/XM41h3gb9teVdH7OzJmDEa7iZo 4A== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3run8a471p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 21 Jul 2023 15:10:39 +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 36LEYaX9019270 for ; Fri, 21 Jul 2023 15:10:39 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2177.outbound.protection.outlook.com [104.47.55.177]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3ruhwak70e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 21 Jul 2023 15:10:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ilod4TFjuXPFsMe6gwX7tffogO534UNiEwfvHSdykWapZSWvAtjA/t4NhcgzYM/bueLIp1+/skQJE9Qhll7QPa4aAHJXyAhRMWnwkBfUyDacm/s8WMVvEaKi22Ea/BBA+smt5PF4n5bU3wZMRfLjisuyJuLI/404D2FGimui3OluuOP3CaGTkZ1n4an38MMiNOEC9wxIyVK6LIc6kmST9mbhYI/yRrIDbaePWLd4k/T40n8vVUNVmYQW5wMzlJQszvQ4516bp5nERwwaf1Z7Woi+0gKFK9X3JRYuL+TKbvq1nhkRxM6DWNqEDMLa4mF3CUxbIvCsQmM4A+r5V2flIw== 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=dEkTxG5GwB7a1DrO1+t0AwlxTQDreZbmy9dIsaQowBM=; b=ktBQDl8yhd+33Rdi5NfrFf+aEO1Z2M+VYwWdCJ/aXLBsD51/7cMjXmCcW7tuxN1uxUpPwavwZ/PBAW5SdrGDiyHWBZ3Sn46qLvCgUb+me3Ebc5pcecEut2NkqqTTfrlbe84LVO79O+k4i0sQ6aIsGxEgWBOj9+A0lfhzaZx3dC0QYuUXIPhmx5E/Vszz+Dp60IJt3svSnRNOCwEU3bDwSmbl0mAQakmMG3ieHiqqIfXIGbjaHD3w8zA+gSwokBL48l/Yw+MZN4/dGt06GJ7AQPpbMf0w/8dqA+Ds10bJcDSQvZQALzcrCuu7FHHGlvQijKXIldkVObTJdijnhLDGyA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dEkTxG5GwB7a1DrO1+t0AwlxTQDreZbmy9dIsaQowBM=; b=vIfrvYKSfpDEHWCo1rKTb32ftcF9D6uflQTzamdQs1+6xzpcDwBINLvnBc57wnjwcAeOsQ7K3soFufmAggGz8K06z6m3Rae0Z6zgEuohM+0SjGT2yqZZCW2Y3D4iVf+EUQ7PQ3NsghqJcZ3PX+ETqTPdJkQUY2rCd/H8781/yPs= Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by BLAPR10MB5105.namprd10.prod.outlook.com (2603:10b6:208:325::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.28; Fri, 21 Jul 2023 15:10:34 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::4d0c:9857:9b42:2f6c]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::4d0c:9857:9b42:2f6c%4]) with mapi id 15.20.6609.026; Fri, 21 Jul 2023 15:10:34 +0000 From: "Jose E. Marchesi" To: Cupertino Miranda Cc: gcc-patches@gcc.gnu.org, elena.zannoni@oracle.com, david.faust@oracle.com Subject: Re: [PATCH v3] bpf: pseudo-c assembly dialect support In-Reply-To: <87351h5n4g.fsf@oracle.com> (Cupertino Miranda's message of "Fri, 21 Jul 2023 15:56:47 +0100") References: <20230721114835.23667-1-cupertino.miranda@oracle.com> <87y1j98l8n.fsf@oracle.com> <875y6d5phn.fsf@oracle.com> <87a5vp8i04.fsf@oracle.com> <87351h5n4g.fsf@oracle.com> Date: Fri, 21 Jul 2023 17:10:23 +0200 Message-ID: <87v8ed7128.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Content-Type: text/plain X-ClientProxiedBy: LO4P265CA0032.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ae::18) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|BLAPR10MB5105:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f139b31-b616-4029-651d-08db89fca1d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: J8CFDzwxXqbAVvMyArD5YCPr5Av/C5e5A2geT1ANQnwA2Rr7XwoGj4A36FBZmpsrB/XGPsoUXqUQ05CRmvVkGjnG0oUrP8QExzEY7ik3W7u6j0yiUMPpDRAkCdbZIvjb7jpq8j+wQE9sb0iDhku9O7dEJXajfXxKswT4DVlZsHYnPIjkn0Tvjq3m1mmrkT1ND03Z+JBQ8Ojqe2l9b0PNZ3FPN70uERfWcJJbiYJnmqZcATLPnvI3pDQjGuJFlj6+xNSZ50xhwFauQUZ83kLAE63OIvH3CdbFTlK7rkEujBRqSnVtdqQj66sBGhLJQN30mp32djrsyeFQPVqwo6feNAXoJWGid07f6teElhymlJtFSJtWhLmziUyi6scQiHiKalxwpL0PJNvBI1qhIuXQJlgdEZYllv60VCkhmg5NoFdetJUdYcD5TnCxGkjlkWgT29/PJFy23JRBNTjoVrnzMDNsBYXuczvgath5ld8f49TO5DPKYwXPdkBBEWZlsKtA2aASSE8+WYyk5935FMfYa7ETHbmDSx4kAlljvnaX800Y2w4qaaYYqkfqcve8OM0yYFz1JkjpBI4DK0Kwz4l9f1Nd1L0yV2/Sp4TlFrfOf5k= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2888.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(376002)(136003)(396003)(39860400002)(346002)(366004)(451199021)(6512007)(478600001)(6486002)(38100700002)(107886003)(186003)(5660300002)(30864003)(6666004)(83380400001)(2616005)(26005)(6506007)(8936002)(41300700001)(8676002)(6862004)(2906002)(86362001)(36756003)(66556008)(53546011)(37006003)(6636002)(66476007)(66946007)(4326008)(316002)(334744004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KhSaMb/mfoZtUqTWu4NCAEIvM1HPwaNk9l8isIXWFiDJeatzCZDbt7YpIDXI?= =?us-ascii?Q?/qM+zs+9hDL29blZqezvO9UGnbPN9itLCuT0cHJf32G3ERQJQmD/OKJ/OWed?= =?us-ascii?Q?Wk6OL+r8CXAvvoMEDgsB2vxb4G+ZwyUg4Ri2/vICVITgOSTzdBCnRibg2pyH?= =?us-ascii?Q?u8c0118Pac0SpBz6pS2yM3ZndhDujwDg/lD7y3rShXcBcRtfvACnq2cqNm/e?= =?us-ascii?Q?CM8j8mIhilfC0eTwi3sci44jhjEYzEjce6ljPqkiI7CsKJ8jdpuHEI9ezHp6?= =?us-ascii?Q?YYAfGuDP6K4Z1nI0byGkbElhjTKTjCfZ616J4DOrxzC6z8C/lslUShDOL/ko?= =?us-ascii?Q?NrYv+poBv6Hs9hW8LHxaD5FHuFc3Gj/WL9SjmRXeIEu0MDflbqm52gA3TF+a?= =?us-ascii?Q?cLp/DSBzTNzu+e+S9JKPXFhpK3sK0NhFidl1GI2Bmdjri98+xuBeVy5SUH9+?= =?us-ascii?Q?+8w5WVzOoWY0bOeNFM2bFnz+JRG/Efacwj5OMfsgcqXHhP5O5N2gipON4qTK?= =?us-ascii?Q?1NTpxIzPtHNA5ozRr6bIUg3DEdBHYz8D8wMU04y5a17+8Rl/76FVHpqShPjr?= =?us-ascii?Q?2e4eERdl8N5Ro7FoNjmnKf1jw7dD6tm6bam9EfEPusYUd0auwKI+PYDcB0gY?= =?us-ascii?Q?29f5mgGRKJ8fi3zZv9FiGnA8Mo+z2jY13JuRoxEtoRYOiy9E1jMyqngfFPVq?= =?us-ascii?Q?Ds54z5oYrUAFP9sHH5yccWTEfP6LpNh0SIIV5wEotSBxdRecEjMliS73lD4L?= =?us-ascii?Q?sM+H9UVHK5IQtOFHjcv42BDfwVcI6BGxWTQ9XBKXwv2NesXRpCqrlZ99MSL8?= =?us-ascii?Q?rvgHimWJmyIdV4PxrSe3TlJ7pHA5aUcBKTsQatq0tCcsuZdrv7I1VnySvx46?= =?us-ascii?Q?BC5bwNLOyrWFy2ksou84EIj2nke3209mNoDpIuUh0ULY3HHAij2wDlVwSOKj?= =?us-ascii?Q?qkOwR6loz382/azFagzT7C/dsIqJXZgRt93uaYbf+pPIxitp/hX2gU+OZ13q?= =?us-ascii?Q?Bw7ja+LpIW/M13E9RKcWmg4IaXMLvpbLLlmmbFzbIoGYGpaYq5cjejgCIktL?= =?us-ascii?Q?6VYmwGRC2M6th9xB+THxwlnGBQ3LHh58YDucw1cgv8CA883qpsbeK2vyIxZz?= =?us-ascii?Q?nk9Gqj6uUkQtK+IjdOngX8tK3XCrhMAk0TkqfMxeJwKuTw+U8/Ybmhcu0RYj?= =?us-ascii?Q?PR6Hg8POxqmdwN0SCwDFJOXeK2D5LQkSYm73TqKSn5tROdL8CvQu5RczvJ9c?= =?us-ascii?Q?fAm9K7x5/K4nxAH9BJKcNkJMPCjoGmvhHNLHeRKuOKb5slkAy42QPTYnmcOi?= =?us-ascii?Q?sc0DoH1P4/3CGS26Gn2FtLgXpU9Lcw5H1ce/ERSDd+keZpaiLANVeySPbwGJ?= =?us-ascii?Q?J/Zde3MN2YYdMH70FGeMkFVWhcgCiO6FuuP/Num9nKfPg2pN21q2f/Byk1zw?= =?us-ascii?Q?6CNtAPmiYZWWgFmaRe1PuuDcelsR5Asy+kYeKTeg9q5OeMf2Er2MxpdFqm49?= =?us-ascii?Q?hIVXRS5TsKnV4AF57oO+0gh+ncn9sTHt6hAY6nx1p+cvZvUowpKEDFE4t/ZS?= =?us-ascii?Q?cqyHgChYOhf/7dXcUgCJlPU4ebP1lK8F8aFAN7jL55C3S4x74gkPgcws+txD?= =?us-ascii?Q?Rw=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: DiV908XdT+mkj69NlJd48EjfvrEo7qXU0hd/O1B9lehqFihe8wdqJ7pp5CYiJeNPsKpVLtgBkytRwZkNwcn7DSRwnkr7S/lZITpudINxzFecCl0YArlIlQJRcBk2nOGLsXMolFvwfPLmZte1bKTQLZEsDgFTBQxcJ4AkkChh83jD0kXQAK492A8JFYR4YqTNoCgSLzXJi75iJTpl40AfeWddd2JimMoHJdU5k1nI6mP4LJ7hmLajucw74ieK4O48CRqUpajbVhFWeZF/UyTozWn+kT3JB78F0rsS4/zCH8SLDzTcgC2ScS05/9eUoaVS1NbH3NqYyCTWyXHWfFn8fmO6dWOA1SoEAUszwZpBw+HXgQTPLTMiPjNDXSGuzz4d2tuQVIVNyidrRx4Z9Kxm0k0rQebS/gOg3OC2e+e0R6jgmnDFc4d+4MkP0oOLdP0wNo7A5fYI3xvKiAQW4dBvLfwSFVtQB+aisXqCUFSJuPvUXhKFLydyTjKtU8W9mT74pBcuXGzCqLti2yw9L9zHAJ/ox/yC1g8/N0sJeJSpKeldTNn7l+BrJYJeTBdFqFWxG1yP2yvsT7mVmde25Go1+f9MSVU5izhcuq/GanjU9o8Lao9nwdy9VMKSgPuNwhJ7NJUQjAYOJBizXm18bLGYIr/mrl5zBUUVM0ptmLV0eYc9nHyn2QEBTqUxzrARM/zNXACfe/ZgvRp6ysqY37fVkmR+eakMwlWLPJ5WSAn7cd5qVweZ0gvqkZ/Oa1GKI7hK X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f139b31-b616-4029-651d-08db89fca1d1 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2023 15:10:34.5551 (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: gm/ttIrQ8D7T/O99DxnLy9dcgbQ4nrFnidKba5RC9++2YIPJUXYljeMO5UDBbo6GoRLJMyjdYbHpkMcrxv4ooZq2kZL6hObtQ/z+yXKzwXo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5105 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-21_10,2023-07-20_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxscore=0 adultscore=0 spamscore=0 phishscore=0 bulkscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307210136 X-Proofpoint-ORIG-GUID: Mf8esBAak-SKeDCr1ygzcWRlkcYFmthP X-Proofpoint-GUID: Mf8esBAak-SKeDCr1ygzcWRlkcYFmthP X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,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 List-Id: > Thanks for the suggestions/fixes in changelog. > Inlined new patch. > > Cupertino > >>> gcc/ChangeLog: >>> >>> * config/bpf/bpf.opt: Added option -masm=. >>> * config/bpf/bpf-opts.h: Likewize. >>> * config/bpf/bpf.cc: Changed it to conform with new pseudoc >>> dialect support. >>> * config/bpf/bpf.h: Likewise. >>> * config/bpf/bpf.md: Added pseudo-c templates. >>> * doc/invoke.texi: (-masm=DIALECT) New eBPF option item. >> >> I think the ChangeLog could be made more useful, and the syntax of the >> last entry is not entirely right. I suggest something like: >> >> * config/bpf/bpf.opt: Added option -masm=. >> * config/bpf/bpf-opts.h (enum bpf_asm_dialect): New type. >> * config/bpf/bpf.cc (bpf_print_register): New function. >> (bpf_print_register): Support pseudo-c syntax for registers. >> (bpf_print_operand_address): Likewise. >> * config/bpf/bpf.h (ASM_SPEC): handle -msasm. >> (ASSEMBLER_DIALECT): Define. >> * config/bpf/bpf.md: Added pseudo-c templates. >> * doc/invoke.texi (-masm=DIALECT): New eBPF option item. >> >> Please make sure to run the contrib/gcc-changelog/git_check-commit.py >> script. >> > > From 6ebe3229a59b32ffb2ed24b3a2cf8c360a807c31 Mon Sep 17 00:00:00 2001 > From: Cupertino Miranda > Date: Mon, 17 Jul 2023 17:42:42 +0100 > Subject: [PATCH v3] bpf: pseudo-c assembly dialect support > > New pseudo-c BPF assembly dialect already supported by clang and widely > used in the linux kernel. > > gcc/ChangeLog: > > * config/bpf/bpf.opt: Added option -masm=. > * config/bpf/bpf-opts.h (enum bpf_asm_dialect): New type. > * config/bpf/bpf.cc (bpf_print_register): New function. > (bpf_print_register): Support pseudo-c syntax for registers. > (bpf_print_operand_address): Likewise. > * config/bpf/bpf.h (ASM_SPEC): handle -msasm. > (ASSEMBLER_DIALECT): Define. > * config/bpf/bpf.md: Added pseudo-c templates. > * doc/invoke.texi (-masm=): New eBPF option item. > --- > gcc/config/bpf/bpf-opts.h | 6 +++ > gcc/config/bpf/bpf.cc | 46 ++++++++++++++++--- > gcc/config/bpf/bpf.h | 5 +- > gcc/config/bpf/bpf.md | 97 ++++++++++++++++++++------------------- > gcc/config/bpf/bpf.opt | 14 ++++++ > gcc/doc/invoke.texi | 21 ++++++++- > 6 files changed, 133 insertions(+), 56 deletions(-) > > diff --git a/gcc/config/bpf/bpf-opts.h b/gcc/config/bpf/bpf-opts.h > index 8282351cf045..92db01ec4d54 100644 > --- a/gcc/config/bpf/bpf-opts.h > +++ b/gcc/config/bpf/bpf-opts.h > @@ -60,4 +60,10 @@ enum bpf_isa_version > ISA_V3, > }; > > +enum bpf_asm_dialect > +{ > + ASM_NORMAL, > + ASM_PSEUDOC > +}; > + > #endif /* ! BPF_OPTS_H */ > diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc > index e0324e1e0e08..1d3936871d60 100644 > --- a/gcc/config/bpf/bpf.cc > +++ b/gcc/config/bpf/bpf.cc > @@ -873,16 +873,47 @@ bpf_output_call (rtx target) > return ""; > } > > +/* Print register name according to assembly dialect. > + In normal syntax registers are printed like %rN where N is the > + register number. > + In pseudoc syntax, the register names do not feature a '%' prefix. > + Additionally, the code 'w' denotes that the register should be printed > + as wN instead of rN, where N is the register number, but only when the > + value stored in the operand OP is 32-bit wide. */ > +static void > +bpf_print_register (FILE *file, rtx op, int code) > +{ > + if(asm_dialect == ASM_NORMAL) > + fprintf (file, "%s", reg_names[REGNO (op)]); > + else > + { > + if (code == 'w' && GET_MODE (op) == SImode) > + { > + if (REGNO (op) == BPF_FP) > + fprintf (file, "w10"); > + else > + fprintf (file, "w%s", reg_names[REGNO (op)]+2); > + } > + else > + { > + if (REGNO (op) == BPF_FP) > + fprintf (file, "r10"); > + else > + fprintf (file, "%s", reg_names[REGNO (op)]+1); > + } > + } > +} > + > /* Print an instruction operand. This function is called in the macro > PRINT_OPERAND defined in bpf.h */ > > void > -bpf_print_operand (FILE *file, rtx op, int code ATTRIBUTE_UNUSED) > +bpf_print_operand (FILE *file, rtx op, int code) > { > switch (GET_CODE (op)) > { > case REG: > - fprintf (file, "%s", reg_names[REGNO (op)]); > + bpf_print_register (file, op, code); > break; > case MEM: > output_address (GET_MODE (op), XEXP (op, 0)); > @@ -936,7 +967,9 @@ bpf_print_operand_address (FILE *file, rtx addr) > switch (GET_CODE (addr)) > { > case REG: > - fprintf (file, "[%s+0]", reg_names[REGNO (addr)]); > + fprintf (file, asm_dialect == ASM_NORMAL ? "[" : "("); > + bpf_print_register (file, addr, 0); > + fprintf (file, asm_dialect == ASM_NORMAL ? "+0]" : "+0)"); > break; > case PLUS: > { > @@ -945,9 +978,11 @@ bpf_print_operand_address (FILE *file, rtx addr) > > if (GET_CODE (op0) == REG && GET_CODE (op1) == CONST_INT) > { > - fprintf (file, "[%s+", reg_names[REGNO (op0)]); > + fprintf (file, asm_dialect == ASM_NORMAL ? "[" : "("); > + bpf_print_register (file, op0, 0); > + fprintf (file, "+"); > output_addr_const (file, op1); > - fputs ("]", file); > + fprintf (file, asm_dialect == ASM_NORMAL ? "]" : ")"); > } > else > fatal_insn ("invalid address in operand", addr); > @@ -1816,7 +1851,6 @@ handle_attr_preserve (function *fn) > } > } > > - > /* This pass finds accesses to structures marked with the BPF target attribute > __attribute__((preserve_access_index)). For every such access, a CO-RE > relocation record is generated, to be output in the .BTF.ext section. */ > diff --git a/gcc/config/bpf/bpf.h b/gcc/config/bpf/bpf.h > index 344aca02d1bb..9561bf59b800 100644 > --- a/gcc/config/bpf/bpf.h > +++ b/gcc/config/bpf/bpf.h > @@ -22,7 +22,8 @@ > > /**** Controlling the Compilation Driver. */ > > -#define ASM_SPEC "%{mbig-endian:-EB} %{!mbig-endian:-EL} %{mxbpf:-mxbpf}" > +#define ASM_SPEC "%{mbig-endian:-EB} %{!mbig-endian:-EL} %{mxbpf:-mxbpf} " \ > + "%{masm=pseudoc:-mdialect=pseudoc}" > #define LINK_SPEC "%{mbig-endian:-EB} %{!mbig-endian:-EL}" > #define LIB_SPEC "" > #define STARTFILE_SPEC "" > @@ -503,4 +504,6 @@ enum reg_class > #define DO_GLOBAL_DTORS_BODY \ > do { } while (0) > > +#define ASSEMBLER_DIALECT ((int) asm_dialect) > + > #endif /* ! GCC_BPF_H */ > diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md > index f6be0a212345..0b8f409db687 100644 > --- a/gcc/config/bpf/bpf.md > +++ b/gcc/config/bpf/bpf.md > @@ -77,6 +77,8 @@ > > (define_mode_attr mop [(QI "b") (HI "h") (SI "w") (DI "dw") > (SF "w") (DF "dw")]) > +(define_mode_attr smop [(QI "u8") (HI "u16") (SI "u32") (DI "u64") > + (SF "u32") (DF "u64")]) > (define_mode_attr mtype [(SI "alu32") (DI "alu")]) > (define_mode_attr msuffix [(SI "32") (DI "")]) > > @@ -110,7 +112,7 @@ > (plus:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" " r,I")))] > "1" > - "add\t%0,%2" > + "{add\t%0,%2|%w0 += %w1}" > [(set_attr "type" "")]) > > ;;; Subtraction > @@ -123,15 +125,15 @@ > (minus:AM (match_operand:AM 1 "register_operand" " 0") > (match_operand:AM 2 "register_operand" " r")))] > "" > - "sub\t%0,%2" > + "{sub\t%0,%2|%w0 -= %w1}" > [(set_attr "type" "")]) > > ;;; Negation > (define_insn "neg2" > - [(set (match_operand:AM 0 "register_operand" "=r") > - (neg:AM (match_operand:AM 1 "register_operand" " 0")))] > + [(set (match_operand:AM 0 "register_operand" "=r,r") > + (neg:AM (match_operand:AM 1 "reg_or_imm_operand" " r,I")))] > "" > - "neg\t%0" > + "{neg\t%0,%1|%w0 = -%w1}" > [(set_attr "type" "")]) > > ;;; Multiplication > @@ -140,7 +142,7 @@ > (mult:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" " r,I")))] > "" > - "mul\t%0,%2" > + "{mul\t%0,%2|%w0 *= %w2}" > [(set_attr "type" "")]) > > (define_insn "*mulsidi3_zeroextend" > @@ -149,7 +151,7 @@ > (mult:SI (match_operand:SI 1 "register_operand" "0,0") > (match_operand:SI 2 "reg_or_imm_operand" "r,I"))))] > "" > - "mul32\t%0,%2" > + "{mul32\t%0,%2|%w0 *= %w2}" > [(set_attr "type" "alu32")]) > > ;;; Division > @@ -162,7 +164,7 @@ > (udiv:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "" > - "div\t%0,%2" > + "{div\t%0,%2|%w0 /= %w2}" > [(set_attr "type" "")]) > > ;; However, xBPF does provide a signed division operator, sdiv. > @@ -172,7 +174,7 @@ > (div:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "TARGET_XBPF" > - "sdiv\t%0,%2" > + "{sdiv\t%0,%2|%w0 s/= %w2}" > [(set_attr "type" "")]) > > ;;; Modulus > @@ -185,7 +187,7 @@ > (umod:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "" > - "mod\t%0,%2" > + "{mod\t%0,%2|%w0 %%= %w2}" > [(set_attr "type" "")]) > > ;; Again, xBPF provides a signed version, smod. > @@ -195,7 +197,7 @@ > (mod:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "TARGET_XBPF" > - "smod\t%0,%2" > + "{smod\t%0,%2|%w0 s%%= %w2}" > [(set_attr "type" "")]) > > ;;; Logical AND > @@ -204,7 +206,7 @@ > (and:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "" > - "and\t%0,%2" > + "{and\t%0,%2|%w0 &= %w2}" > [(set_attr "type" "")]) > > ;;; Logical inclusive-OR > @@ -213,7 +215,7 @@ > (ior:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "" > - "or\t%0,%2" > + "{or\t%0,%2|%w0 %|= %w2}" > [(set_attr "type" "")]) > > ;;; Logical exclusive-OR > @@ -222,7 +224,7 @@ > (xor:AM (match_operand:AM 1 "register_operand" " 0,0") > (match_operand:AM 2 "reg_or_imm_operand" "r,I")))] > "" > - "xor\t%0,%2" > + "{xor\t%0,%2|%w0 ^= %w2}" > [(set_attr "type" "")]) > > ;;;; Conversions > @@ -245,9 +247,9 @@ > (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "0,r,q")))] > "" > "@ > - and\t%0,0xffff > - mov\t%0,%1\;and\t%0,0xffff > - ldxh\t%0,%1" > + {and\t%0,0xffff|%0 &= 0xffff} > + {mov\t%0,%1\;and\t%0,0xffff|%0 = %1;%0 &= 0xffff} > + {ldxh\t%0,%1|%0 = *(u16 *) %1}" > [(set_attr "type" "alu,alu,ldx")]) > > (define_insn "zero_extendqidi2" > @@ -255,9 +257,9 @@ > (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "0,r,q")))] > "" > "@ > - and\t%0,0xff > - mov\t%0,%1\;and\t%0,0xff > - ldxb\t%0,%1" > + {and\t%0,0xff|%0 &= 0xff} > + {mov\t%0,%1\;and\t%0,0xff|%0 = %1;%0 &= 0xff} > + {ldxh\t%0,%1|%0 = *(u8 *) %1}" > [(set_attr "type" "alu,alu,ldx")]) > > (define_insn "zero_extendsidi2" > @@ -266,8 +268,8 @@ > (match_operand:SI 1 "nonimmediate_operand" "r,q")))] > "" > "@ > - * return bpf_has_alu32 ? \"mov32\t%0,%1\" : \"mov\t%0,%1\;and\t%0,0xffffffff\"; > - ldxw\t%0,%1" > + * return bpf_has_alu32 ? \"{mov32\t%0,%1|%0 = %1}\" : \"{mov\t%0,%1\;and\t%0,0xffffffff|%0 = %1;%0 &= 0xffffffff}\"; > + {ldxw\t%0,%1|%0 = *(u32 *) %1}" > [(set_attr "type" "alu,ldx")]) > > ;;; Sign-extension > @@ -306,11 +308,11 @@ > (match_operand:MM 1 "mov_src_operand" " q,rI,B,r,I"))] > "" > "@ > - ldx\t%0,%1 > - mov\t%0,%1 > - lddw\t%0,%1 > - stx\t%0,%1 > - st\t%0,%1" > + {ldx\t%0,%1|%0 = *( *) %1} > + {mov\t%0,%1|%0 = %1} > + {lddw\t%0,%1|%0 = %1 ll} > + {stx\t%0,%1|*( *) %0 = %1} > + {st\t%0,%1|*( *) %0 = %1}" > [(set_attr "type" "ldx,alu,alu,stx,st")]) > > ;;;; Shifts > @@ -322,7 +324,7 @@ > (ashiftrt:SIM (match_operand:SIM 1 "register_operand" " 0,0") > (match_operand:SIM 2 "reg_or_imm_operand" " r,I")))] > "" > - "arsh\t%0,%2" > + "{arsh\t%0,%2|%w0 s>>= %w2}" > [(set_attr "type" "")]) > > (define_insn "ashl3" > @@ -330,7 +332,7 @@ > (ashift:SIM (match_operand:SIM 1 "register_operand" " 0,0") > (match_operand:SIM 2 "reg_or_imm_operand" " r,I")))] > "" > - "lsh\t%0,%2" > + "{lsh\t%0,%2|%w0 <<= %w2}" > [(set_attr "type" "")]) > > (define_insn "lshr3" > @@ -338,7 +340,7 @@ > (lshiftrt:SIM (match_operand:SIM 1 "register_operand" " 0,0") > (match_operand:SIM 2 "reg_or_imm_operand" " r,I")))] > "" > - "rsh\t%0,%2" > + "{rsh\t%0,%2|%w0 >>= %w2}" > [(set_attr "type" "")]) > > ;;;; Endianness conversion > @@ -352,9 +354,9 @@ > "" > { > if (TARGET_BIG_ENDIAN) > - return "endle\t%0, "; > + return "{endle\t%0, |%0 = le %0}"; > else > - return "endbe\t%0, "; > + return "{endbe\t%0, |%0 = be %0}"; > } > [(set_attr "type" "end")]) > > @@ -393,16 +395,16 @@ > > switch (code) > { > - case EQ: return "jeq\t%0,%1,%2"; break; > - case NE: return "jne\t%0,%1,%2"; break; > - case LT: return "jslt\t%0,%1,%2"; break; > - case LE: return "jsle\t%0,%1,%2"; break; > - case GT: return "jsgt\t%0,%1,%2"; break; > - case GE: return "jsge\t%0,%1,%2"; break; > - case LTU: return "jlt\t%0,%1,%2"; break; > - case LEU: return "jle\t%0,%1,%2"; break; > - case GTU: return "jgt\t%0,%1,%2"; break; > - case GEU: return "jge\t%0,%1,%2"; break; > + case EQ: return "{jeq\t%0,%1,%2|if %w0 == %w1 goto %2}"; break; > + case NE: return "{jne\t%0,%1,%2|if %w0 != %w1 goto %2}"; break; > + case LT: return "{jslt\t%0,%1,%2|if %w0 s< %w1 goto %2}"; break; > + case LE: return "{jsle\t%0,%1,%2|if %w0 s<= %w1 goto %2}"; break; > + case GT: return "{jsgt\t%0,%1,%2|if %w0 s> %w1 goto %2}"; break; > + case GE: return "{jsge\t%0,%1,%2|if %w0 s>= %w1 goto %2}"; break; > + case LTU: return "{jlt\t%0,%1,%2|if %w0 < %w1 goto %2}"; break; > + case LEU: return "{jle\t%0,%1,%2|if %w0 <= %w1 goto %2}"; break; > + case GTU: return "{jgt\t%0,%1,%2|if %w0 > %w1 goto %2}"; break; > + case GEU: return "{jge\t%0,%1,%2|if %w0 >= %w1 goto %2}"; break; > default: > gcc_unreachable (); > return ""; > @@ -416,7 +418,7 @@ > [(set (pc) > (label_ref (match_operand 0 "" "")))] > "" > - "ja\t%0" > + "{ja\t%0|goto %0}" > [(set_attr "type" "jmp")]) > > ;;;; Function prologue/epilogue > @@ -495,13 +497,14 @@ > ;; operands[2] is next_arg_register > ;; operands[3] is struct_value_size_rtx. > "" > - "ja\t%0" > + "{ja\t%0|goto %0}" > [(set_attr "type" "jmp")]) > > ;;;; Non-generic load instructions > > (define_mode_iterator LDM [QI HI SI DI]) > (define_mode_attr ldop [(QI "b") (HI "h") (SI "w") (DI "dw")]) > +(define_mode_attr pldop [(QI "u8") (HI "u16") (SI "u32") (DI "u64")]) > > (define_insn "ldind" > [(set (reg:LDM R0_REGNUM) > @@ -513,7 +516,7 @@ > (clobber (reg:DI R3_REGNUM)) > (clobber (reg:DI R4_REGNUM))] > "" > - "ldind\t%0,%1" > + "{ldind\t%0,%1|r0 = *( *) skb[%0 + %1]}" > [(set_attr "type" "ld")]) > > (define_insn "ldabs" > @@ -526,7 +529,7 @@ > (clobber (reg:DI R3_REGNUM)) > (clobber (reg:DI R4_REGNUM))] > "" > - "ldabs\t%0" > + "{ldabs\t%0|r0 = *( *) skb[%0]}" > [(set_attr "type" "ld")]) > > ;;;; Atomic increments > @@ -541,5 +544,5 @@ > (match_operand:SI 2 "const_int_operand")] ;; Memory model. > UNSPEC_XADD))] > "" > - "xadd\t%0,%1" > + "{xadd\t%0,%1|*( *) %0 += %1}" > [(set_attr "type" "xadd")]) > diff --git a/gcc/config/bpf/bpf.opt b/gcc/config/bpf/bpf.opt > index fe3ad355e4bd..ff805f9e083c 100644 > --- a/gcc/config/bpf/bpf.opt > +++ b/gcc/config/bpf/bpf.opt > @@ -160,3 +160,17 @@ Enum(bpf_isa) String(v2) Value(ISA_V2) > > EnumValue > Enum(bpf_isa) String(v3) Value(ISA_V3) > + > +masm= > +Target RejectNegative Joined Var(asm_dialect) Enum(asm_dialect) Init(ASM_NORMAL) > +Use given assembler dialect. > + > +Enum > +Name(asm_dialect) Type(enum bpf_asm_dialect) > +Known assembler dialects (for use with the -masm= option) > + > +EnumValue > +Enum(asm_dialect) String(normal) Value(ASM_NORMAL) > + > +EnumValue > +Enum(asm_dialect) String(pseudoc) Value(ASM_PSEUDOC) > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 3063e71c8906..b3be65d3efae 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -946,8 +946,8 @@ Objective-C and Objective-C++ Dialects}. > > @emph{eBPF Options} > @gccoptlist{-mbig-endian -mlittle-endian -mkernel=@var{version} > --mframe-limit=@var{bytes} -mxbpf -mco-re -mno-co-re > --mjmpext -mjmp32 -malu32 -mcpu=@var{version}} > +-mframe-limit=@var{bytes} -mxbpf -mco-re -mno-co-re -mjmpext > +-mjmp32 -malu32 -mcpu=@var{version} -masm=@var{dialect>}} There is a spurious > character there. Other than that, the patch is OK. Thanks! > > @emph{FR30 Options} > @gccoptlist{-msmall-model -mno-lsim} > @@ -24736,6 +24736,23 @@ the restrictions imposed by the BPF architecture: > @item Save and restore callee-saved registers at function entry and > exit, respectively. > @end itemize > + > +@opindex masm=@var{dialect} > +@item -masm=@var{dialect} > +Outputs assembly instructions using eBPF selected @var{dialect}. The default > +is @samp{normal}. > + > +Supported values for @var{dialect} are: > + > +@table @samp > +@item normal > +Outputs normal assembly dialect. > + > +@item pseudoc > +Outputs pseudo-c assembly dialect. > + > +@end table > + > @end table > > @node FR30 Options