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 194DB3858410 for ; Fri, 21 Jul 2023 14:56:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 194DB3858410 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 (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36LEGDiD011959 for ; Fri, 21 Jul 2023 14:56:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=references : from : to : cc : subject : in-reply-to : date : message-id : content-type : mime-version; s=corp-2023-03-30; bh=jdzMJwoy2HIEK08DVFsBvXvro679qbBA23zlSwox/TY=; b=lgKM3AAy3TiXDL0AhJgagOPwas8poO2EbupVHKtkoftqQWo+EJi8fDnUeRFIbFG9sxJ1 hJZT9cdeKeZyLkDtsvdKS8i6Uii0WxdTj0F6Xt/Pii1iTzxLewuVLWYt6KbSJm3nfG48 hZ72cu0Ncy5kCxhRbwcq/FoWLHY4sKXsWH4SxMWpPVNFRKuzCQh1tayTugQFLF/mOonj ldF6iszgqzo7OPyFEcut2A/HysLnyGMtzHeKdj67saKwg9xwNH1o8yNTz/yxaOfPGKx6 BWDW3Vtzax1PNZykCh0BrL7h9Uyp4f2UcBH0OyeHpRRz2ezvEyS9ObrDD9EK1jY44qis bw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3run78429j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 21 Jul 2023 14:56:56 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 36LD5lHq038204 for ; Fri, 21 Jul 2023 14:56:55 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2049.outbound.protection.outlook.com [104.47.57.49]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3ruhwa38db-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 21 Jul 2023 14:56:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Emwh2bOnCWQZub6oedd/pkSTUU5SCdUnjdzMjHKbETgdYzW/s61JeeW1Tj1TUqJTG5C8OeepxZIwLvs409qDytKyCPFQXBgIMoESWr+DUj8dGcufeYntNDUx0tKIooz43NBDl2jS3ZwzpdnzamytXY3AXtbgaJ82aIWstsEl8J3OwFXAsdlVt2VtHblha29m0daCaD+V2dPzw8Xb14zKe2kumtT3NoRYdEw9OcarJeJHXqAB+OKT4DyUcGIZPiP/TskT9zQc2ENsyg9ywJntuJKGIFATkDy5k5kBEk4pAuz88TqClybvamislPmjuHuh5DW8c9BsP5aAkK61ybt4FA== 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=jdzMJwoy2HIEK08DVFsBvXvro679qbBA23zlSwox/TY=; b=Qf2E6ywi9B8gt/GrY+8LSRJFbWV0RZaGXSNDL7A3lkdhafqBTv9R7vpz/9rfaAe/mQYme4K9iRxpm3KB54ldbMJ62s3FYzlbVsJh1mDQrvBhtWhT8aPKJNiQvP4WdkUbfqzwljqMCO5RBjJLcph+th6MN7H2X2Cx84c4H3aPSlM2t4bL6z0IiuE2ARAi30KRWPhl50ELqVTUl7Wx/dnrS7bdCM6V2jAanSG9es+pSHqLJO2iE05QrJedsxBs0k2v9MaEvl2K35NA+975q6280owXodAsQAMcsAIlY3mS30Idu+94J/inM3Me/AkyUqyguC6j191EC+eIkYp79/gF9g== 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=jdzMJwoy2HIEK08DVFsBvXvro679qbBA23zlSwox/TY=; b=MGM8KCIMhcptyK0Cm4j4aXq3ZJQ5eBodP+0qQ4L27/cWzs05/LFM4NYQIr8YbJvr/SMMfCpX3EvibsotVAgMB2HgGpYCN5yoefGDNhcftxwq9hwp46dcc8zBvSJrI3yVhiaT8v1Kq3fYVITouZ/IgcvaO59uCiWc7Sh2ftbOfn8= Received: from BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) by CH3PR10MB7353.namprd10.prod.outlook.com (2603:10b6:610:12c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33; Fri, 21 Jul 2023 14:56:53 +0000 Received: from BN6PR1001MB2340.namprd10.prod.outlook.com ([fe80::7514:36d6:fdf2:4313]) by BN6PR1001MB2340.namprd10.prod.outlook.com ([fe80::7514:36d6:fdf2:4313%6]) with mapi id 15.20.6609.026; Fri, 21 Jul 2023 14:56:53 +0000 References: <20230721114835.23667-1-cupertino.miranda@oracle.com> <87y1j98l8n.fsf@oracle.com> <875y6d5phn.fsf@oracle.com> <87a5vp8i04.fsf@oracle.com> User-agent: mu4e 1.4.15; emacs 28.1 From: Cupertino Miranda To: "Jose E. Marchesi" 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: <87a5vp8i04.fsf@oracle.com> Date: Fri, 21 Jul 2023 15:56:47 +0100 Message-ID: <87351h5n4g.fsf@oracle.com> Content-Type: multipart/mixed; boundary="=-=-=" X-ClientProxiedBy: LO3P123CA0008.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:ba::13) To BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN6PR1001MB2340:EE_|CH3PR10MB7353:EE_ X-MS-Office365-Filtering-Correlation-Id: c4c39d62-66b1-4f48-90cb-08db89fab849 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5aIWKXkguuc/vmxPMFNsTsR0tkLMDwVXZ/UE8KJHb3JnEbfqVvn4V5QkG5Alfc4WA31N4Knjl9JQmJexLlzf++MR8SnWNEfUMSewToOGSpfLhpbozL8NY7ysMbcjq7QFpRuweCZyX2qKoYWAzM5e+UiWrd7mWYh0lBfKTDGVl8+masCSMOwuxEKUKJ12p21uS9pfXZq3gKDREgTZJnDShSujH+IpS0SNLcz08pGhG4PnCUHbVmzGHSwrreS9S8sWTdFhmUw7l5w4rF6PDVHL4+SziU1YyvIpX31CdYgAO58CEZMVmj6EH9/TsAL0qj3X1/VCbI4DUfJQuFSxi69hPXkpRT3F2UspLS/ECfKcHqb4Z4fv3L4qR+MRWtORcEj6vtdWMbL0sHGXpE0jq3DiOLPYeMV1PlagUwzA0/ma0vmtBfNn/qo14l/mbUDr+Z3wN71wBeCwAq+OJEEB+OV8Vn+PsFjQK8aaK8q4jRfom3Y46WSDKUZcIWr3vSgHAmhX8zjbxSX0l2my4933Ft7pSveyTWcYBzzLUp0PMl/n5OMbcRSD4hib8Qg6mCqP49awOIWReKfDUQEkK8FfL8BPp2t3WKoX84INZJumav4xkMg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN6PR1001MB2340.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(346002)(39860400002)(376002)(136003)(366004)(396003)(451199021)(6506007)(30864003)(186003)(53546011)(2906002)(6512007)(107886003)(6666004)(44832011)(6486002)(36756003)(37006003)(38100700002)(83380400001)(8936002)(6636002)(6862004)(5660300002)(8676002)(316002)(66476007)(66556008)(4326008)(66946007)(41300700001)(2616005)(86362001)(478600001)(334744004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?laxV0d1+nuyLTQ836R/FT/79J9BiA29nxPMaaiuBVkSYJ0N1FNCtD7ZIigT/?= =?us-ascii?Q?uEgMOIpxFoGeRtAjalzhE2vKuNeWtsrU9CNpo+iRDHQdYJC/Px3Z38ZVFMtw?= =?us-ascii?Q?W3yIdfcnJopfopCU/MC0JzPEpTbivNjzfycPrDw66SwUg5vUZ9ekbrW7QMbR?= =?us-ascii?Q?LBw/+gdq5vMu9dee1QW+6J8rRkfqlVA9Kyn+iTvwmmAaN2urliroaNPM4UXd?= =?us-ascii?Q?7zJJk4vNERh8zSzF4AA2AHyEzyZXFX5EEGh8Z3B4Oo24TtT9GIMIb/kH1Xkn?= =?us-ascii?Q?/cbwCp57WARfLBr72bES5CRLlfqsTGvJIj4osXFjh9CLKcBllcFVABva/Iun?= =?us-ascii?Q?i5aJRpopdUN9ieoSeWpOVAIDv+sH/Ffr2J51gGuXeGtBvUKaoHvv8lHyD1Cc?= =?us-ascii?Q?Afgniq9TUP/20kaa/yDqfxpQv4RTBWRoCYZufUphglqqtlVKpEcyBZwajf5K?= =?us-ascii?Q?t7xIoxIDXJlfmPc6WXnn3dyKddntT1NZF/VUTb91skgoBkI/yhvrTyOenunC?= =?us-ascii?Q?9IPiTNa8HHMvuuQGQpoZltOReMdHvrRSzlRyWhVX3eAjNIHhCkhKFhFukF2P?= =?us-ascii?Q?+xzT9AhC1LyKvHrkeYKxGML3qy53fa3UnP8/FWqhg2trQBba5eP54Pp7PI11?= =?us-ascii?Q?R2QbMqcgb3QsiR5ynEXGIH527NruP3vooAbb/7L/c+h5baaLDfXepSjbCGzH?= =?us-ascii?Q?WHoBiUb8uPg0yf3w4ROLy1Mi2sKO41/ZI3QFO8TdcILM2NCbztKCP7lPjuMA?= =?us-ascii?Q?ycZHDkHm+JxVuMFe5W9klylqXxPU6xqmeWSmeu32VVy2aOUhBx6VAumoMzsW?= =?us-ascii?Q?AW58gH7jUDFCk8zIZhhaFK2BrT6ypLe9k/6KjuO506PaA3UO7cEV2s5jC5Ow?= =?us-ascii?Q?5qPmPyvJMiBBcF3x4eSTwM8MAdkjyBpBV/3AWcucooEvD3iCyqCERQW4fJRN?= =?us-ascii?Q?Y9T51kkhl0/8zIU1R40bbmGeOSwBiahWJYD6rXVf9nH0eVNtQNCm3lkyOK+A?= =?us-ascii?Q?5XZqv3vt+FIsBAx/s0hW4B0sr1L64qpvwIXJDpFvpTgRzzafr8RnyhtY+Alu?= =?us-ascii?Q?LvIwHx+S6FnItIVaDYmWpDCaWpEfi5QtxqBpsuBsyxUwVDJEGi6Rewe3L+sC?= =?us-ascii?Q?+i8ncyyJrjaixJeeOvXlFIMLslzVt+YObq3Na/JNto5g2b97StAEhlfewu9I?= =?us-ascii?Q?++Xbzg3fia1bcYr0NbRu1x45THZjwfxzII1tScZzURrFMw/MZTwYE+a1ODKV?= =?us-ascii?Q?C6GwdlkQxNbKiO67RAb5EisRRfjqdWIM7ZN9PCnm0OE0BL5KWChcmvlcaEHz?= =?us-ascii?Q?XorHr62bNGrodl8e8K4oDUln7Slkab//Kp4Bhjxv0+eozrORaNj2pQFd3WK5?= =?us-ascii?Q?oD2JyTWopZ6vJmRJ3TiEnexIHplaosS/DXpCnGgUwK/PSYXLSL9a+CD79tae?= =?us-ascii?Q?OeSVhq4GqV9Aft0vWOmWp8udRS6Kq6Rugo0syGn6PNumYSTnnhbUudCdoZu2?= =?us-ascii?Q?WQ5DBV9/1vONzXQf4sLQKWZ5cs4aQiYx3lb8S4+kzpT5IkJA0Gjd/BI395Z2?= =?us-ascii?Q?A0kEyX3a12pCW+G56BW5y8Xdn3F/dFiJ9Zjgow38ukDL2Vib04twbM6Ujg7s?= =?us-ascii?Q?iDp8eD1sheZ38KnUQ5/1nPA2HMwi1c5dmpMzZh7cHlO7?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: h/Py7B16AqxknGcX77pgZ+9I9B98Y/U5kWJ8xZ/9T18n4gUkpteKKTJk5Gpq6CGQDVOVAod9dLffbEyLBfORcJYYpyWxNzH3o/p7lYEmlkyvHiqp8jcHb+agksWbCDzx2fb3873eYdIqusyUn5Smsnmu/lhDnKZfaCbKL+k12utIwL0Q/l3TgCsRshsjWKX8+3U6/SgYWUIqUCPVjlNWO1G73N3YyO6IrmRo38SfWrI/WQQtCVbm5lhwKVAwdaHHadidoS/yiu5dfPNQF5XjmfrphH2x7ZmoXjuIwaCSepDaJOS0i77WdnvrehuVI7PqZJ8H+o64jEe8zVztatxPoayBNtX7hue12il01RRZz3v3zzHVVpj9FCiU+rkbyaeYelvDp9ZkqFw0EzwOQ/axpFvCSIyRQ1rPBpmiM8oX1N1ow2C5OLVRKVbzjMgPqyoGq3RfTW6XAEEo/CD03x2l07SiXNfMgtU2O1yhT8viXjdxQTlZj2xUZwfxEmUrMBbVYjmLBkovoA+KvlWX6zh8sqnLWdy0GYf5Lr/A7vQ/hDPmQ8ddaY67tBV0CMKE9bo6w28sG4/WB1kgJ+xcXyRrujf8qNgwV4YSyojcJRHC16Rx8iteBKw3wE15X/86ERLATyVOwbFNtqRibDfrgw+1CI1EQm6a7hf7BhtZ6kBJxu9eHO3bKQEt2SWmov3wd6J3qev4JRNrGoJcdRtucOotAsa4CLcAtuf6TV0ESk37EoBZygAn/yMG4S9XA4ljU4ZB X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c4c39d62-66b1-4f48-90cb-08db89fab849 X-MS-Exchange-CrossTenant-AuthSource: BN6PR1001MB2340.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2023 14:56:53.1664 (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: tOLT8zM0QbK91kFDV4JMlJn5uqk2i98u3iHMiXFBffgG8O/nnmf9QKS9JT85C2pgXVpZjJWuLOQzsMUFSkAwm+ppMxsVN9mGfHRWe8UEIXs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7353 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 mlxscore=0 phishscore=0 adultscore=0 spamscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307210134 X-Proofpoint-GUID: gu7RjeCfZYtuTuiurnK6lUsKTo2MWXNe X-Proofpoint-ORIG-GUID: gu7RjeCfZYtuTuiurnK6lUsKTo2MWXNe X-Spam-Status: No, score=-11.9 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: --=-=-= Content-Type: text/plain 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. > --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=v3-0001-bpf-pseudo-c-assembly-dialect-support.patch >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>}} @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 -- 2.38.1 --=-=-=--