From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id B35BA385C6DC for ; Fri, 21 Jul 2023 11:48:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B35BA385C6DC 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 (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36L4x7An005094 for ; Fri, 21 Jul 2023 11:48:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=UI1X21l+ifBlgVVj9B+eD+VFt74oGkurgKycrVG+D38=; b=4C71jdHIHbNb0ayA7+fBpUfYF1JbAoB4o3x6PXlFps+0KGSZa+jKhN/2MkhmdbbBjPCb UszTvpKZK20Xeqlm+rIlDxMPQZgWGGKZF9XP54BA25/H/NOgBX8IVCFc9GfUWoHuCuC/ 2ZZjg3ljPFQ5cBGJa5yfo+TxlG+tS1fUsSRboM1TpXhLTlrj2t+yiHPQ27UC0YqqHp+5 UQPk5b75JhgketRFFiA65pYuG6SbLZnDMY81uadJOYCiWK3F4a2QNx3k2JzE1abdcb0d zkaEjNQWNgMWYa9RCHr1H87ISUySUcc2iSRNQ7aAjtC88utnfWo1Em+FJuL0nhg0KvM9 Zg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3ry1m4jf1g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 21 Jul 2023 11:48:51 +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 36L9PwFE038203 for ; Fri, 21 Jul 2023 11:48:50 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2101.outbound.protection.outlook.com [104.47.55.101]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3ruhw9w3bf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 21 Jul 2023 11:48:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LFbGXnq6t6/UFpmp/iJ8lxdvBdFeVIixh2wMUPZr+M6/u7O3ZPSBrWkf1R6RIaK9ajZiZCMLz1ig03m6XqnjnKdg6c3lFPVgZAagc3V1dkH5EZUKBsRpqyF6tYMIPegxBLg8z/Wx36bFDWiO/dFHnDjY7XHJCcK+VKvZS3o5A5WH+vFi1XLijwCKnm40rjqhdWmnAUc5wQ/cx2MIm2N1Kigb6cgonuu6lnXYdxL3Y9Or7IJ9JX6KP8oDsm4n+vK35Ehwx7rraGC9ShBrGQ2Tw0xAH8GBjCMwVIjBJ5cm7hByWoQPeGu8pOCOM/nNgqgkfyOqjo9tXZ4Zhj2/H5qCVA== 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=UI1X21l+ifBlgVVj9B+eD+VFt74oGkurgKycrVG+D38=; b=gUwYl9VaV4vaE7jst4JfCSmzSbltZLOKxtniIopfivYU/t+0bqvKyfCyfhQPINx3WOMLNJOonLB2vSPrg4f7OYnd7XNAiIruCSTvcB+z6jJlA2L3pfGUclVc8Kmxk0bUYkOc2EH0EjK5mvk5NbcMFY9329RVsS7JmAovs4DRrGKCOy1oR/7iO9PZSO2iTfXKIHSqS4GMumPM0Y9epFCFaOv0p+Lzj8to3keUzmblyiLFYaZKO599r+HB0K5i0Kr55nxkvUnHEIVNmFZAnTFcLFeYq09kBWNUGL/ovadp+fKrOeC2yeWkX2PqNNRdCEwioo4ZHbvTb6Cogg0DeLqvCg== 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=UI1X21l+ifBlgVVj9B+eD+VFt74oGkurgKycrVG+D38=; b=o0ntEMR3wfxaGVPAZbr6hj5+9BIQuXVXcPqpSGyC6fLa+HKBKnjvZESh1Z8ipZg/OBNOqWsvY5HJY2K871WgxWusYdKPK++OJjm8WOcMdu8Yw6uXn0r/wBe+kFdhrvSIdPo/uib/gBV26cGKKtvRJY9r8pjTLQgbuU2OLVqFfBQ= Received: from BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) by IA1PR10MB6195.namprd10.prod.outlook.com (2603:10b6:208:3a5::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.24; Fri, 21 Jul 2023 11:48:48 +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 11:48:48 +0000 From: Cupertino Miranda To: gcc-patches@gcc.gnu.org Cc: elena.zannoni@oracle.com, jose.marchesi@oracle.com, david.faust@oracle.com, Cupertino Miranda Subject: [PATCH] bpf: pseudo-c assembly dialect support Date: Fri, 21 Jul 2023 12:48:35 +0100 Message-Id: <20230721114835.23667-1-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: AS4P192CA0034.EURP192.PROD.OUTLOOK.COM (2603:10a6:20b:658::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_|IA1PR10MB6195:EE_ X-MS-Office365-Filtering-Correlation-Id: b75ea7b4-1874-4091-4a08-08db89e07201 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: a+MzHUSqIof1/rx6RR2Z1OmUPQTHT0x7LXvmqHJV7x/LbFzFJXvSdov1FzuXzphgalyuQqE51LwIpV6UrhtK2TdoLgpphKkwX4FrJB+q7/wBha2uqRCFzNkHYVdeMgA+eJuL+lcqAazgosQuT3w0GYvEf+Mq999QBuMoF/Y3VaArBptPoT90wZ/9UCyXOM7dFxWW178zi182ADaRYgRMHJ+8SOOGNAn4hJP1tQAhe5y7rjWh+CehvEZvtr1+gQFsX1V/+f2S0WMHuTkGRLODXmwhm8DTeWWb/RyUlO1N2cBTyRO3uW2nOVpIOR9A8+7Ywd5k3aXh5wFpf4rjeIdgBtCGhK9i1SntxRg8lnXDvyOm7ayvTvMgNf2ymvjNNUiU3SGt9n5JUDkmkEJ/s6uhM25C5DVSq57NiUah/ohup/6zIKYVkFXLs/MpFPY3FMqyYydoIVjevC6DsHUQqxLgIRG88PvK/fUe5MiEPIiZoKHwsV0ddgIteWwPRtAI4BojKlPxq49Yihst3xmeDrsvmrMbo/DAvjAgxs0KB1Ys5Jc0rt03J5BTGyk3E+jI8AmF4F6PNzDW7BPaxdAVvJP13ZVd1k37P6K4ZYBoXaK0s1E= 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)(366004)(376002)(39860400002)(396003)(136003)(346002)(451199021)(36756003)(107886003)(478600001)(6666004)(6512007)(6486002)(1076003)(6506007)(186003)(86362001)(6916009)(66946007)(66556008)(44832011)(66476007)(316002)(4326008)(8936002)(38100700002)(8676002)(5660300002)(2616005)(2906002)(41300700001)(83380400001)(30864003)(334744004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bnfmkMVqBDd5wfPT2UAbutSsac72mwbWMFZwY5KAWHuH8RBHgcWwtLn51RDD?= =?us-ascii?Q?WiJueF1bfYvi97p6di5NsZldX/spDZakO8mo1rc/N1eVR7BHY+0Sh/iEGiti?= =?us-ascii?Q?kuOTbYBuGgJ9ddaz9joSPR86iVJWLGysBoVxfTdLSWG5vTxSeQhm8MC9VAfh?= =?us-ascii?Q?/Ct8UMz3k420f67bCx4JLlgF3wkiF1tXA4p4GQRooCbxs2bxhkjzGzU/xu3G?= =?us-ascii?Q?w05+ANnevFiCxewaCdc6PSIsx+4TINqDME7OIU6mpcvmsz6nQ8MPy2tXXVZl?= =?us-ascii?Q?Jc0LkaRxiMSGljwz0ViFPIK/a7H5vPOZAVhuJQouucJBaJm3L5wgOUI5810y?= =?us-ascii?Q?kUimpuWpFp/R8msSGzZMN/50h0oQcE18waSH5+smpO8hkNNc4n4Q4eQXD6k0?= =?us-ascii?Q?Z306ldc5f16C8XjShFDAmKx7bmQjUINp+5jDc1o3hpa/Jkj+0MlNHpsOFO+Z?= =?us-ascii?Q?xN9pCLPSPAQDGAONm62wzcxX6pLxuSKNm2JEX2BYtXgsB/gKUmQ4798yKepC?= =?us-ascii?Q?IcAV6RwRrwJinvinJbe4qH08JEdy14L8zecDVE1/jEir6mndz51NXVnjFI5T?= =?us-ascii?Q?1vcu0S3MM4WjijC/YCuGbUrgCWF83UfsOadYl+jrTc4Ujtfbu9IMc6s7AaKd?= =?us-ascii?Q?f6+0o5TfWCYquu5K6xorhyGpvN0hTb1iqgV82RxBwa4rs1LUUpK8IiF7VPek?= =?us-ascii?Q?d7rvV71EDGcrTKvahEESiHGNYdP49kfsjWGYmrTvnTWRlIkl6sK7AsMWbtoN?= =?us-ascii?Q?C+7Vw7Kf+GKyMpLMoDjN0P3OSTJTyAXUjY4o7NEyrd79bgW43KiuTxDpgK3s?= =?us-ascii?Q?YGZJY1RL6ywScof8a3McxicOAi5opj9EJqAvLfnqJEgTDxvDP3cd13HI3tbQ?= =?us-ascii?Q?uoVHvxTdIxyAhbTUihqrBA+dDZZT7UOYQfbbD/Mmz757gAot254knLHDieRY?= =?us-ascii?Q?AlY+qjG3Jb3wcfn9VmSZVb5ssrWCMdxntZrZSS3yHmVx5zecNFLr1Hs6hZ1n?= =?us-ascii?Q?5D/JG2FkbYMLUmQhVcAgWhuycNkwJAkd6kfhhPbBmLUwLARqkwd6T/ibrWNZ?= =?us-ascii?Q?gDNnN6LXPa9GhcRU/HlTRTs0rVXUCd5SEoFcnfjRpGzwWVIWblKbLPvGdt7t?= =?us-ascii?Q?MshmYW2UNkOfTMro0PJs60A/R5YADt52I+EPwCpDUddZTu9IIOhP5s4NV0W6?= =?us-ascii?Q?mueNQ6pGOwvK1bNkV6h//h+b3JCPnGuqa8C5ABQCC/oMmUbNdGTdWGnsY9Z8?= =?us-ascii?Q?0Ez2ih3aAOuNhZVUJz2Nihd2+G369R03IkKl0HTOe6fKwQWsYWwQ1Qi0B212?= =?us-ascii?Q?N8KiWfCc8z9mpAleqp5WbdyT2qIQz/+XfFLLKe4+fjJ5kdQAfGQH8NNWEPWE?= =?us-ascii?Q?VA+wFcYCOfJeBsnnIi9boJ5SSbxK+4w97RLrppVdaXRc3notQHnYFE5/a+54?= =?us-ascii?Q?jvcmO01mXDJpRAQVgsFF0Fq1UP3FsgQl0Daw9lgPFz0SLikFYV4Ntpp5FFPy?= =?us-ascii?Q?AtyjIJ2WA9kTdvCnbleDRI0N7XxAujMuC67u2L774lAmsnthHX8zsDU0xlkc?= =?us-ascii?Q?Vbspi0bInVsXiOykD1LoowjFKoAJDF9vjCowLz+0WfHagMayK4rn0RNhSKB1?= =?us-ascii?Q?isMruQ1ufdit7KVnyD+fEUs=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lIESK7WAMEmVgjr53kzQxITx/yiz8mgsT+7SvQ/RafuvWNNwevGN4lDnKJqBKPbqwEKXwIVFQ18939r1m+AU8nGR05QhgMtvbXeX632wIgfw6YD2RUw8DolUy/qKGWhTViVp5HectUlXALlJkvOR2Qr2rJru8D7CGP06C8q1U8oF8iz3XwI/7nMAXTFpr8zHuCQNKJoT4WeZ9SRdT1P40GCtZgwM/XixvNra9fY0yWuZuSyYTiMeONIAlvQU5SF6C/OTMKr5ufIbM54ILqRqYZ8nd8U78DrJcyWxfwyUStqdCRWCI3btWfKX8l+wrhUdSQzTxoP5nLuHc6hVbALDf6NxY6v2VSaLnkZERCXrRgTRq5paIJj5stkCtC+BqUu6XvGzXULiMTY20QNzhKwPDOsq+u4YFKOJLeCvZIEXpNEzBBv4ekHanQApKktgRu+StdYhqZph/D5qzd3v4gLSHG2//dtbyF7jQX2rS3UqTRsgsqeix4KsHAOQpU8ClzwTmvruH1/AI869fb+YvqRByURjuqLnlqgxD5MjT82vlHuLvjIFxWorL0heYYUhVNDD8yJdYqMbyArtESZHi+0r+kOFOd88/DaBki36drHOkOWTiKjxhaofsYP6EEKdt029mVVZLAwp4+p1fbwtkoZNf0xWklgIXHLvtnVeO0PBv15ayM3XmJ/pemioAXTxU44pdupEMPSU7osnojXbzn2xiDzc8neS1P31QnhEkyX2h6vbmRaM3gPHVpSsuBJS8KcL X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b75ea7b4-1874-4091-4a08-08db89e07201 X-MS-Exchange-CrossTenant-AuthSource: BN6PR1001MB2340.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2023 11:48:48.3365 (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: KpnbXTJyWIvIndtwhvpl0diB0xtaS+nD+snjTFeMVFCAOsx8ujXSWmjvcn8Ji8V2W5/4fmKYelfijdK/h6DUY5vUE6YGvDHzvbDZ7QI2YoI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB6195 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_07,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-2307210106 X-Proofpoint-GUID: ZH1L-sNvd2neGZEGTy728Arr3IuHHrZO X-Proofpoint-ORIG-GUID: ZH1L-sNvd2neGZEGTy728Arr3IuHHrZO 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: Hi everyone, Looking forward to all your reviews. Best regards, Cupertino 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: 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. --- 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 ++++++ 5 files changed, 114 insertions(+), 54 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) -- 2.30.2