From patchwork Fri Sep 30 16:56:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Greenhalgh X-Patchwork-Id: 677142 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3slyLY6wjlz9sf6 for ; Sat, 1 Oct 2016 02:58:13 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=ywAwNOpA; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; q=dns; s=default; b=hVX+AFzNmc3pMxqR FzfCOPVTqh+Bqg/T0OfHys5IYpEzgamAEfwCiyVTwDgk5pmgfNYTV1Hrrrz3XBg1 GQVq70gklPtUHts2JmAK3JuAEbIOZAqZxvanuduJUqCAhtoYqQTHyBczCJ3TC3eU BbjUAIgIhsffwBTL0yae9run4NA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=default; bh=V++UMm46Oz8ttRctQ9V0pF RxFJo=; b=ywAwNOpAlQOzfv69uqs/66cuSVipH5Aeecd/daHlzUO9sINcZLTZFs leTfHBBuV1a3HwAz+tHT2aF9UtRqNwfprCq/e7kYHc0rCYOluMd4Mc2gJ8ilznYW x3N25xbHSqnmGDV0YAeSlsT+4HmSxy/4GtjnwBnXfKDfRBlH+Iep0= Received: (qmail 60976 invoked by alias); 30 Sep 2016 16:57:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 60862 invoked by uid 89); 30 Sep 2016 16:57:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL, BAYES_20, SPF_PASS autolearn=ham version=3.3.2 spammy=intentions, 3596, introduces, sk:james.g X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (207.82.80.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 30 Sep 2016 16:57:17 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp0147.outbound.protection.outlook.com [213.199.154.147]) (Using TLS) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-32-OFu-XrwwMc6lR0rBJJ-fAw-1; Fri, 30 Sep 2016 17:57:13 +0100 Received: from HE1PR0801CA0022.eurprd08.prod.outlook.com (10.167.184.32) by HE1PR08MB0873.eurprd08.prod.outlook.com (10.164.53.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5; Fri, 30 Sep 2016 16:57:10 +0000 Received: from DB3FFO11FD031.protection.gbl (2a01:111:f400:7e04::168) by HE1PR0801CA0022.outlook.office365.com (2603:10a6:3:6::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.649.16 via Frontend Transport; Fri, 30 Sep 2016 16:57:10 +0000 Received: from nebula.arm.com (217.140.96.140) by DB3FFO11FD031.mail.protection.outlook.com (10.47.217.62) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.629.5 via Frontend Transport; Fri, 30 Sep 2016 16:57:09 +0000 Received: from e107456-lin.cambridge.arm.com (10.1.2.79) by mail.arm.com (10.1.106.66) with Microsoft SMTP Server id 14.3.294.0; Fri, 30 Sep 2016 17:57:04 +0100 From: James Greenhalgh To: CC: Subject: [Patch 1/11] Add a new target hook for describing excess precision intentions Date: Fri, 30 Sep 2016 17:56:53 +0100 Message-ID: <1475254617-10825-2-git-send-email-james.greenhalgh@arm.com> In-Reply-To: <1475254617-10825-1-git-send-email-james.greenhalgh@arm.com> References: <1475254617-10825-1-git-send-email-james.greenhalgh@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:217.140.96.140; IPV:CAL; SCL:-1; CTRY:GB; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(377424004)(189002)(199003)(36756003)(92566002)(8676002)(2906002)(106466001)(19580395003)(84326002)(104016004)(19580405001)(246002)(2351001)(2476003)(77096005)(6666003)(189998001)(11100500001)(450100001)(76176999)(50986999)(229853001)(6916009)(50226002)(87936001)(2950100002)(356003)(110136003)(626004)(5890100001)(7846002)(86362001)(4610100001)(305945005)(568964002)(512874002)(586003)(4326007)(5000100001)(33646002)(5660300001)(8936002)(26826002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR08MB0873; H:nebula.arm.com; FPR:; SPF:Pass; PTR:fw-tnat.cambridge.arm.com; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB3FFO11FD031; 1:4tUkEpsepU+RBrQJ9ZavpRH5nmyzIeJDYUXZWTRLd1RtIypfa2/fhV4m90ZLwlv7HNbZ4TSWDCqNkuvbThcoCy2tEy/GE8VL4Tm4Z1XnAgeklYe82pdmzLJuF4aE6GAw0PbrZCmp0LgX3drZ+C4AeU6g64IaUyVHCKoVWZTsJW8hrRKA/gNwgc7ovHNEyUpOyfNNqVSI75+tQIztTHLn9LBcL//j9MQFbGQsfRWhxqkvtoH8QgcWP35Uf2+3lhC2WziF6EI60XtrgevGtoJ9hiTBLUTNnYJoy7QWLOpNcqctXJo8m+ufIKDBMmXKd1gNxSo7oPMLqKvfZFIUfQQBVDzSb1wdzWaM97hZyG2pdBj/5US90Ulql/SrKunsOTEG4RlhZwdFxItlgMOAdLkanjMLlHjfdVKFGXD/K5lnfT+n2PoqYgt2DJxJZvOlpnNYjKiw0xSDKaph1ir3ThYNRJ4d7mwguyrA5cpXv7TsZMR431p1t9p9x9HbmY8Ira8Jklc8OAJqVi6AIksWdjTxmjHe5+GoaZuubaJ+2ptXOuzXLDNoOTaFaGv1OoJv5iKp X-MS-Office365-Filtering-Correlation-Id: 3f63dfae-e8da-40a3-aaee-08d3e952d195 X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0873; 2:/t5QpY2JD1H3WQZIpaSCDKpNRbyyOK3xuONFec7j00aAPNnyNFr0T7+7g3mREmzNIGJYovDkBK82N0d5Jl0br2wtaHP35TmBVJ4MsfexON12AcQH+fgEFNf3OMUL9DwGpJ2oW2nuLFGRqy9ugYk1mK5eqtQCa4bOZZ1v5kCQ3J3Kk9k6pQK2oSZP2m8byBEJ; 3:WBr2rLIEc35WJkdHydwJAu34LunRRE56UR0p0XKHaWcmWO+Zgfs4Cq0fh7WT3AZX+K6YO3l0j9dnY3zQ7U3N46rhSN8T8LTCMu9si/YopmRn3IzFpTXLbG8qZvB9kz5PwVRWOGX/2QChjZ8Z/8DERehy9+St2bt1/zgcJ0LIkmAWnbjZp0ILhi6W3loUQkE/l4EThsvs9xxaipDN+Y0mXscKnyDdDVM/YpXIF66hyoA+cb733NiYteIBP7lJlzKTrkB1FDDA+OOXiopns4G9eA==; 25:CH3GqeCeHz0tyqSNyMn7u8d3SHz51IpCFJxoXRjL4cUPncHxBDkMXAFR/qDhtyzWoKDZeFJFXHnxVidFZeTer0tIxv7EV7GmnwO37nW27JnPPqiTNj+RRxusjKmiyKck+EzcyHxO2kDd3umFal3jHNbDmQdskagMZmvTt3g+QfEZKV7CuF/Zbw6PDwAfizV7PqMkEX4uMyXcrYUXrnlz9Lgn9JyRjL6+zw/eZXQmcPB3NqMaK7q2Tml4e9+4lNMVACD9A8eSXEIF8Dfsbq7pW6pdcbFE/J8kegv6xR3yBy7DCi//dKShnk0MU2MS3ZwghbkmeHmaaqUUdDW15LjUp3VZ7UdKR5XJF7zxE33cSRW/Yrwq3EzF4AaXvf1jgxC33VV+/Gwld5KuP2Hrz4EFWkVAPgvHRCwKYYmSgDHRy+ybe2NU6MLICGPV0qnNw9XbKKXeNiNe8/1nvdrsf+8kOQ== X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:HE1PR08MB0873; X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0873; 31:anDSFBtqF9SzMaazNvYnJGA03DaDJfll92iObSwAUxQJXrkid6wgZNwWcUpGp2+DuEBVCX2u9N3+GdLS5GYhqiOjwpj20OanP7LgiSKG6pQT/ISvalBAWmA09U7Jiru4FxrWzlxJ16n4RMApYBjoCauIAS9tMCKiW4wNMX3OBnejymChW/tx2qWqU+QV1sLVQZFI0w+U+NKr4tQr/7sIJC0+c9AHwq6AUQ1IVDQGmq72Gv8lUtt4TjS3iIz9KCcJtFSrU2QMJYO9q2oLQlhWnTxGzB7VOMYDCx5HRk6qwlE=; 20:HLNegbqxCEU7RvGcGa6XXLBFHNfM5usQWrNOctSsxIEDs3RaUS1VcwEDiY5+znblHTzT2Fx+KU0jsSkznminZlG52VPRxF9rCP7b5iW5OAqZPJmthvQc+HvEN+3gmHdD1db9F5CANwfwje4td5viv/CUFFM+FZ0s1aBxPz33/1YURt2QHFJfOyLuRtMopBTh5h9s/XBE6JKcQ9Mn0/Fne00/KomTQQ9fQapeh1UIgwJYTXo3k+doq5OC7QofP7X1 NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415321)(6040176)(601004)(2401047)(13020025)(13023025)(13024025)(13013025)(8121501046)(5005006)(10201501046)(3002001)(6055026); SRVR:HE1PR08MB0873; BCL:0; PCL:0; RULEID:; SRVR:HE1PR08MB0873; X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0873; 4:RtPljDT9GNJR+4eQ2loJYtPY9sP2bY/y/ETS5ik8BIm0Q4WSvSJl4Y9jQSgfMTSCmNnC1MmQkcOy+oFbDc7L/BdDNQfC0sV2trAOvv3WjNsrdmOhf6OPs0i4HdA7szsnO5/8kV8ZJG+IAAyxvdVecon4k3b8xB1V2bytwKJjWAsp5KnRMqRGSChjcm3fKzixqlEYPB9IboSD7L0VB3GvGJdlhuVBN3QvWXQrn/NjUeqDbt+Xm5JNzbdRPYf9H9iGySljNMqSZKJPdhtokWCZGXU6Oojl0cPuJlTpdDf7DRdrTQwwFGJ4oQ8YvxMKPf1gTNGI/InyrsR+6JUeCpML26UiYJGTsErove17cCpco1KY+btagp86DXPHJ2mgsUIzG0noJ/AUqbfdMnU2mSZmk6EIPOqnoHsFNIhOaPGty5RC6xT4nbl6w8bXvmerfSxunwlqv124behcGyEna9AoaXEnZjqDXUcOPghvQ038ziCLouCr1MYSNxCF8Y1VcAJJmWlXZz80Qnpn3D0gUn3/VwLzzGpbsGDJqpTGucS0sSQ= X-Forefront-PRVS: 008184426E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR08MB0873; 23:DmDfdYzVBf9dUPaiYJu9tpEH+ixpnFGHyyabvCiZI?= =?us-ascii?Q?aVmsLrIsLinKFSqye2jsmhKFGz9o9g1zABg4yTf71tyQwQzm5zdY498IwYh0?= =?us-ascii?Q?srbU90dqSBN2Cj1uFW625CgVgwRmAQXJzQZbQ5/LmD0oHjXplZ+cf41sqAOC?= =?us-ascii?Q?FsD6s2UcHP4aSIvsVG4VYOeSHhzCyP4dvso6zTuX+tXcIOEmVbd0DtZZObeY?= =?us-ascii?Q?MO8SQu/txYngE2MjycpVJtlL1r8913/GyQXYM8JzhcNhfnX/shOQy2bLdOY5?= =?us-ascii?Q?RHJgiq2Cz1wAeqd8Z+UoYldVe35dX+t3CLm8vj/mxU1vGTPbjyZaeapx2N+7?= =?us-ascii?Q?KFE+OTeU95oRrMpiZnpdWDrQlWhdFqjqBZm8XDqQ4g1FtmzBhrjtG56jKOBv?= =?us-ascii?Q?tIz8rMmFMPbuPwF1sMDYrWNfAYA5CeIYIk80gffwof2l0kweEJOf9m8BQk7m?= =?us-ascii?Q?7jmR30Xn7pjht5P59bD1dYr2UDM2PQN63YSeV0hjaZUn4CVOSPsPN4GJx/A3?= =?us-ascii?Q?zPAyxg0D8MEOIdPDtJZV4SzfTGl5CT7tLqsDWsgn42AgogS+p4BBvMZPH0Rc?= =?us-ascii?Q?qSCGoVW1Mt0DEXH4pjph2gHDyRJtnWNdYA2fifH/Nu4GmADjVnO2zp9agF/5?= =?us-ascii?Q?vN9b8WOn0Il+NX2lJ3gipRnW6d/nj9m1v/XjPGhp0mGP032vxL8clZUndKNc?= =?us-ascii?Q?c0ju2pZ6vXcZgnl/iuTReUSktZ9dJ01+v7c8vvTNQIN7xAF8UX/k9HxZJLxF?= =?us-ascii?Q?17WIUUB0pi/eGyPYInaG7229fpr0jmZOqkHbZZSjVDdlVj4roFWhe1uEpt89?= =?us-ascii?Q?JTqslLyVi3CCIYrtUjrqDWPQQR8OoId8yqzO3vC1f0D/SJqmP8aMq07U9T/X?= =?us-ascii?Q?b1QzomXii7KBkA1XpDxQ6WKoI7gV9/j7Fu/+g+yz9xhyYfFJe/B2p4uCXQXp?= =?us-ascii?Q?o96EOos6UME+QQue+/7AqE1oHrEa38v5YBTu1rTO/dDtJqsndDbgQY0JFCxg?= =?us-ascii?Q?Cdhzqgguh3LpBWn4iOr0Pq8KDvUHqFgyreqlIEybWqvNMQ0ZCBazy6wajIW+?= =?us-ascii?Q?1TBhamLICGbxIiWzkR9IG8ugkk6HJklWafQRjwS2xMHKSMxWz+E6bOfqAMaI?= =?us-ascii?Q?oAfmU+AtWokh9mmYpJe3q8tpYFTUZcHkPE5nZkBpZYmvSPdEK9dcygPwiyOs?= =?us-ascii?Q?9hWoiyVMiWexafsN9qk5smPnjBFv8Gq3vcU?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0873; 6:XhlrZI5aNhCkoGJuwS/eH6X4FvwQJZBcDiXjiogXvActfiiKmggm9UyFBLU1Bo1s0Ac/T2G8Q4ayyxE5soKk5ZHO91O1p7QB7ck/LZJGQLBL8QAz0YnNpRzeJiPpvrqEGc47cIoorHkDwe/565ES+ZdCLz4iuo8shnVPb8O95vcMtFudpyF62rs707jIqP1bxpjQ7VXjNuK+ltLRhEu2PFTuAuQZR7c44/Q71MGvyyYRu9U9DlT3AnwRKWNTUOnIPvJIYrmaNFrl9moxxgmfsiAD9ThLVaPOeFtnN8cBAb0yt4jtgAVO/zjC3v82JPS4pU5/L73lYfIv9B4bZPCRzw==; 5:9gbDGhydRO90XYKESlLyxA/kfvvWFXnYbmmkIe6YmdujOwIINZuvMRQplSZhgKboc30wbiUSyIKPkvBhAwFg6Lw598Lr65R7kZqE8vZ7Sor0sg5hkQWxDL/BB+KuDEY31w8+662hAKFE1cbzFR8cKg==; 24:bLwc3TKQn0YvAW/CQyG8OIHOL//aAsif3pvYRlvEuH0CKa5iQEI4bKY1TTvhi7auGnZFAjsYQph2SqdVnotDXwSlocmuy+enuZLgOP7OrKA=; 7:w51rQZ495VFcIhV0BKSm5KYKel5KpGpkadfCersK07hEFEP2biGWDkt8x+unIQN6SmlQ3TKwdrXYpozKVecYadRsFONbqZYQVe+Gq+WoEwcTryIzetvSq66EX12f5tu0Eb3F3t3D7u6bumfRl7/iWAu+RbBvPwwnUuPVF4s9Q7GyI2+fOaZ4DMKzphbabzqfoLqoah8MqAHhd535Ck2bwiC12iaqLCGNuqeb/op7jQD0V4Voja4j3/SpymGQloa+4TERl5EBU1Jj9c0Z3qymqO2svYHOCNR2viBzs+ey9qkaIv6SndBuxMQz9VugjQHq SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0873; 20:7xpAqx4a+TCVBrdg7GRZGEegCajLEIKn38KrU1dU/mW2Aw71sqNFmGpCogpjsAEm+j8Ar82WEK6zZH4qn47ShnNhg1thKiqx/RzJ786PzywCvbEted1AikQ7Yat6fNWpDME33IAfS9CQXAQxfcK36FonuoMzEVgyqzhrTuEDd2o= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2016 16:57:09.9712 (UTC) X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[217.140.96.140]; Helo=[nebula.arm.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB0873 X-MC-Unique: OFu-XrwwMc6lR0rBJJ-fAw-1 X-IsSubscribed: yes Hi, This patch introduces TARGET_C_EXCESS_PRECISION. This hook takes a tri-state argument, one of EXCESS_PRECISION_TYPE_IMPLICIT, EXCESS_PRECISION_TYPE_STANDARD, EXCESS_PRECISION_TYPE_FAST. Which relate to the implicit extra precision added by the target, the excess precision that should be guaranteed for -fexcess-precision=standard, and the excess precision that should be added for performance under -fexcess-precision=fast . Bootstrapped and tested in sequence with the other patches in this series on Arch64, and as a standalone patch on x86_64. OK? Thanks James --- gcc/ 2016-09-30 James Greenhalgh * target.def (excess_precision): New hook. * target.h (flt_eval_method): New. (excess_precision_type): Likewise. * targhooks.c (default_excess_precision): New. * targhooks.h (default_excess_precision): New. * doc/tm.texi.in (TARGET_EXCESS_PRECISION): New. * doc/tm.texi: Regenerate. diff --git a/gcc/coretypes.h b/gcc/coretypes.h index fe1e984..26b0fa3 100644 --- a/gcc/coretypes.h +++ b/gcc/coretypes.h @@ -359,6 +359,24 @@ enum memmodel MEMMODEL_SYNC_SEQ_CST = MEMMODEL_SEQ_CST | MEMMODEL_SYNC }; +/* enums used by the targetm.excess_precision hook. */ + +enum flt_eval_method +{ + FLT_EVAL_METHOD_UNPREDICTABLE = -1, + FLT_EVAL_METHOD_PROMOTE_TO_FLOAT = 0, + FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE = 1, + FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE = 2, + FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16 = 16 +}; + +enum excess_precision_type +{ + EXCESS_PRECISION_TYPE_IMPLICIT, + EXCESS_PRECISION_TYPE_STANDARD, + EXCESS_PRECISION_TYPE_FAST +}; + /* Support for user-provided GGC and PCH markers. The first parameter is a pointer to a pointer, the second a cookie. */ typedef void (*gt_pointer_operator) (void *, void *); diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 8a98ba4..0bdae58 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -947,6 +947,10 @@ sign-extend the result to 64 bits. On such machines, set Do not define this macro if it would never modify @var{m}. @end defmac +@deftypefn {Target Hook} {enum flt_eval_method} TARGET_C_EXCESS_PRECISION (enum excess_precision_type @var{type}) +Return a value, with the same meaning as @code{FLT_EVAL_METHOD} C that describes which excess precision should be applied. @var{type} is either @code{EXCESS_PRECISION_TYPE_IMPLICIT}, @code{EXCESS_PRECISION_TYPE_FAST}, or @code{EXCESS_PRECISION_TYPE_STANDARD}. For @code{EXCESS_PRECISION_TYPE_IMPLICIT}, the target should return which precision and range operations will be implictly evaluated in regardless of the excess precision explicitly added. For @code{EXCESS_PRECISION_TYPE_STANDARD} and @code{EXCESS_PRECISION_TYPE_FAST}, the target should return the explicit excess precision that should be added depending on the value set for @code{-fexcess-precision=[standard|fast]}. +@end deftypefn + @deftypefn {Target Hook} machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree @var{type}, machine_mode @var{mode}, int *@var{punsignedp}, const_tree @var{funtype}, int @var{for_return}) Like @code{PROMOTE_MODE}, but it is applied to outgoing function arguments or function return values. The target hook should return the new mode diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index f1cfc86..7c7af33 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -921,6 +921,8 @@ sign-extend the result to 64 bits. On such machines, set Do not define this macro if it would never modify @var{m}. @end defmac +@hook TARGET_C_EXCESS_PRECISION + @hook TARGET_PROMOTE_FUNCTION_MODE @defmac PARM_BOUNDARY diff --git a/gcc/target.def b/gcc/target.def index 83373a5..1542692 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -5402,6 +5402,23 @@ DEFHOOK_UNDOC machine_mode, (char c), default_mode_for_suffix) +DEFHOOK +(excess_precision, + "Return a value, with the same meaning as @code{FLT_EVAL_METHOD} C that\ + describes which excess precision should be applied. @var{type} is\ + either @code{EXCESS_PRECISION_TYPE_IMPLICIT},\ + @code{EXCESS_PRECISION_TYPE_FAST}, or\ + @code{EXCESS_PRECISION_TYPE_STANDARD}. For\ + @code{EXCESS_PRECISION_TYPE_IMPLICIT}, the target should return which\ + precision and range operations will be implictly evaluated in regardless\ + of the excess precision explicitly added. For\ + @code{EXCESS_PRECISION_TYPE_STANDARD} and\ + @code{EXCESS_PRECISION_TYPE_FAST}, the target should return the\ + explicit excess precision that should be added depending on the\ + value set for @code{-fexcess-precision=[standard|fast]}.", + enum flt_eval_method, (enum excess_precision_type type), + default_excess_precision) + HOOK_VECTOR_END (c) /* Functions specific to the C++ frontend. */ diff --git a/gcc/targhooks.c b/gcc/targhooks.c index d75650f..08d0b35 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -2110,4 +2110,12 @@ default_max_noce_ifcvt_seq_cost (edge e) return BRANCH_COST (true, predictable_p) * COSTS_N_INSNS (3); } +/* Default implementation of TARGET_EXCESS_PRECISION. */ + +enum flt_eval_method +default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED) +{ + return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; +} + #include "gt-targhooks.h" diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 3356f0a..3fabde7 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -263,4 +263,7 @@ extern bool default_optab_supported_p (int, machine_mode, machine_mode, extern unsigned int default_max_noce_ifcvt_seq_cost (edge); +extern enum flt_eval_method +default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED); + #endif /* GCC_TARGHOOKS_H */