From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2084.outbound.protection.outlook.com [40.107.21.84]) by sourceware.org (Postfix) with ESMTPS id 6C6473858D28 for ; Thu, 16 Mar 2023 18:12:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6C6473858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hEKdwx7OmSOsJqm59acLlK56OJ0QxzVQQ/11LRKLjZw=; b=9lm9oZyuADb2clU1X6jr4gnVBP5WAnBEa4QKijJuuqpGrMdDt5tABfpivJ1lsZaaXvYRlNdSCeMH2OuPOL70t/xmHOqWSSXjCGmlWEpNalRv3e3Kr8p7v6gLXU/pOuUkk3DYDEn1PNd4nycjyHYRayH9FobtUS8rc/+U/xh6jrk= Received: from DB6P195CA0010.EURP195.PROD.OUTLOOK.COM (2603:10a6:4:cb::20) by DB9PR08MB9588.eurprd08.prod.outlook.com (2603:10a6:10:45e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.26; Thu, 16 Mar 2023 18:12:03 +0000 Received: from DBAEUR03FT005.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:cb:cafe::82) by DB6P195CA0010.outlook.office365.com (2603:10a6:4:cb::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.31 via Frontend Transport; Thu, 16 Mar 2023 18:12:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT005.mail.protection.outlook.com (100.127.142.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6199.19 via Frontend Transport; Thu, 16 Mar 2023 18:12:03 +0000 Received: ("Tessian outbound 0df938784972:v135"); Thu, 16 Mar 2023 18:12:03 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 572168fb2e447781 X-CR-MTA-TID: 64aa7808 Received: from d1f30986a054.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 701BF7DB-470A-4D65-9471-4A72077B2EE6.1; Thu, 16 Mar 2023 18:11:56 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d1f30986a054.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 16 Mar 2023 18:11:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a+qakCBIYTuFXnxKGD8HfsQhS0zJcoPc/WI0OvwpeeOdJvWxTBF3+udGanklbtv7J0CQkfrz71k5p6/8FXB1WrkSThSXnh/M/BUetGa5t0GV1NE5tsRXElCaJ6zlFzme4WaSOL0THIa+jk4i1PcLL3xD+h0tDzgKnlKd5Zl0saZAVrEqolp86+CLPtq6lxKvzPauHkH2AleZ045mdOdByA7L6AGsFBCf5+a7irwuvmprbgryK/5DO3yeM/d4MCEuP+MJTQh8DfcGz5bUBOM/2Yis25jP1tv8tV5C3/olEMI8lUBTRdlMjgoUp6ZckGOljWM9CJE/aZBmJzHpbVC+cQ== 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=hEKdwx7OmSOsJqm59acLlK56OJ0QxzVQQ/11LRKLjZw=; b=HhgFnwojrnB91VJjoR+C28dpJvs7WgwROCIiIRQSfmBhPTR0NVYCDQ/400flsjir89XXFYu25Lz0fEG6qLJ6t/GvkLRsykMnoNYpnLoHzm3al1gmtmg2TebkJOKWsrUu2j4fywbmZqgZBr2WWuF4UNqpmYTqzOA7Y+DPVhCv+0cQ0mNVYQcubLe9x/dVG8oks/in0zGz5VSpzhSRJVJbaKH3QbrXLTu6epsN7s06WEGMsP5UadUeWGy7kVLJ3Y2eQsJ2yaZXws1ZQGUjaiobVJYwKF7y0fP3oC4BXPhVrAAyJ+71anVwdrbfFtf7Unmhas1pKr2s9+odCajQfTx+5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hEKdwx7OmSOsJqm59acLlK56OJ0QxzVQQ/11LRKLjZw=; b=9lm9oZyuADb2clU1X6jr4gnVBP5WAnBEa4QKijJuuqpGrMdDt5tABfpivJ1lsZaaXvYRlNdSCeMH2OuPOL70t/xmHOqWSSXjCGmlWEpNalRv3e3Kr8p7v6gLXU/pOuUkk3DYDEn1PNd4nycjyHYRayH9FobtUS8rc/+U/xh6jrk= Received: from PAWPR08MB8982.eurprd08.prod.outlook.com (2603:10a6:102:33f::20) by PAVPR08MB8800.eurprd08.prod.outlook.com (2603:10a6:102:2fc::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.24; Thu, 16 Mar 2023 18:11:54 +0000 Received: from PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::dc17:8fa2:cce5:3573]) by PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::dc17:8fa2:cce5:3573%7]) with mapi id 15.20.6178.030; Thu, 16 Mar 2023 18:11:54 +0000 From: Wilco Dijkstra To: Adhemerval Zanella , "libc-alpha@sourceware.org" , "H . J . Lu" CC: kirill Subject: Re: [PATCH v2 4/5] math: Improve fmodf Thread-Topic: [PATCH v2 4/5] math: Improve fmodf Thread-Index: AQHZV4ENjwLxBAoRq02fdqgV7KhxJK79qKXi Date: Thu, 16 Mar 2023 18:11:54 +0000 Message-ID: References: <20230315205910.4120377-1-adhemerval.zanella@linaro.org> <20230315205910.4120377-5-adhemerval.zanella@linaro.org> In-Reply-To: <20230315205910.4120377-5-adhemerval.zanella@linaro.org> Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAWPR08MB8982:EE_|PAVPR08MB8800:EE_|DBAEUR03FT005:EE_|DB9PR08MB9588:EE_ X-MS-Office365-Filtering-Correlation-Id: 070bac15-af31-430b-6a88-08db2649f1bc x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: EeTlgC5jviVFnvGzTrJjIzyQuChHhnVgzKj/ilEN6TZeU61WHKUZbANdogRBHU43TC/WI1+08GpFfiBK3Fa/1kzxf95iNw/RYoD2t5CnjjlJyX8ul+GrA0TSGeApfFrxh1Y6o+BSbS3k63+cAcwiG+kAGmvCpKq7a15sqPgURT6BS+nX7JsHLGsjUZAbMo8sGmcjCWb3hf3wsDO9t6cViNaNJHvnOzue6Uws/VCLTURsThOCRqW+88/qL3DOhho/bSO7iLnSmoXhSrEO50sgTho3SHXfD7NWV5VWwDzTWNvwpjWhSok9bPtqdmcsgpzAb2OMF6p9VESAS82gNFRE1KpOnb8xRnHXTGJ8xk7/qoRPYI6yQ8/1WasHEXtQjYBzmeGohW4HL7gWjZbOWuDsq0STOZneBY/P2DkJk7tVOueNBXBGJa9H83+ynaOSLz5i9b7pXpCZs6nqlOyaXM7NUpm0wntS3YXZnOiO72Dt8JfhN9q6+pr+DQ8frnaP4o8Idc+vJs8BFTr8IdHR487UFGvF8qpmzB9lkXweLUMgsS81ZCsHgAotfn9zjcpoGNzGIVFLJCEnkisktMWcEgGAUQoYT1gcW5DzYo+JwM9QvVKqn+zsgiTVL/rCokrpdFZqgflw2KD+IUnz4xleG+ZeiS5UWzZwcJ1vjfasn0AULdTasQKLyS+qmcVhGVEGQAau X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAWPR08MB8982.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(366004)(396003)(346002)(39860400002)(376002)(136003)(451199018)(122000001)(2906002)(8676002)(83380400001)(5660300002)(55016003)(33656002)(8936002)(316002)(76116006)(91956017)(66476007)(66946007)(52536014)(38100700002)(38070700005)(9686003)(186003)(110136005)(64756008)(66556008)(86362001)(4326008)(41300700001)(7696005)(66446008)(478600001)(71200400001)(6506007)(26005);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB8800 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT005.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 57f8c7a1-0204-4fe5-cce9-08db2649ec7d X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W2Za6U8ZIXRaOXyZBLEdYiNPtwGQGui5grpLUuQE/ewfxMnCyesB/ApsQ3ZI2JrpUNkliO1Y0PI/Ul9Hj1AheZdZ3//mIIYAg+KssLFmsbKqcCysdTJa4tGoGPzWe8UUCkrr7tqjvoN51UOfp6hjIB2se5ACNq27wxCTWk2+ZGNBEWGWsoJBnltj+CV8PkIxApH5XW9lxQUEVmcUHtmg2tzd6lmr/azsJLkT7Di9BZL7h0wD08A1DJnIcW+yQeTeXlVA9HMD129qhu4v3wllvpVYrSlkgtRn6kyZOAO65nV8LId4lz6uq026F69n2zk4JiFXkJZ2E0nzN1rPZQuuAAfkXiUDc67+GU9K9bPGMxGMpP3uMwX7CmlCCUp7LZkVpifjZrDfVYiB/d7kHHPB2s84PlahhAjxp8UuKkGGW/SIsvqyOywWZ4ilmK75gSp0rGPYGulYi/E0nRvXvA9Lgm07B4cMeBHOY1/lzU2zd0MxrwAotRYiIGNAV4YEOXCxaZNTJ4/5VX2Y5m2NEWm1zbIGHGynl9NfcPVABcihvQSsXdwYgaxxCHS8RbQHMXXQNEZA3wuhm3aMVkwZ9ybAGGK6UVDNovXz/ZWTHHr2R043gwRKIgdta/8OlXxFuHGs1vU8Gg1GPXXa27GHd2+x4OeM8dppvtWdrxq7pNEnevnO36+Agqk2H7phTcLEeO+O X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230025)(4636009)(346002)(376002)(136003)(396003)(39860400002)(451199018)(40470700004)(46966006)(36840700001)(41300700001)(52536014)(5660300002)(8936002)(2906002)(81166007)(82740400003)(356005)(36860700001)(33656002)(86362001)(7696005)(478600001)(70586007)(8676002)(70206006)(4326008)(40480700001)(40460700003)(55016003)(82310400005)(47076005)(83380400001)(336012)(110136005)(316002)(107886003)(186003)(9686003)(26005)(6506007);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2023 18:12:03.3026 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 070bac15-af31-430b-6a88-08db2649f1bc X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT005.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB9588 X-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=no 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 Adhemerval,=0A= =0A= =0A= +=A0 /* Common case where exponents are close: ey >=3D -103 and |x/y| < 2^8= ,=A0 */=0A= +=A0 if (__glibc_likely (ey > MANTISSA_WIDTH && ex - ey <=3D EXPONENT_WIDTH= ))=0A= +=A0=A0=A0 {=0A= +=A0=A0=A0=A0=A0 uint64_t mx =3D (hx & MANTISSA_MASK) | (MANTISSA_MASK + 1)= ;=0A= +=A0=A0=A0=A0=A0 uint64_t my =3D (hy & MANTISSA_MASK) | (MANTISSA_MASK + 1)= ;=0A= +=0A= +=A0=A0=A0=A0=A0 uint32_t d =3D (ex =3D=3D ey) ? (mx - my) : (mx << (ex - e= y)) % my;=0A= +=A0=A0=A0=A0=A0 return make_float (d, ey - 1, sx);=0A= +=A0=A0=A0 }=0A= =0A= So we do need to handle zero case here, I think fmodf (5, 1) will now=0A= return 0.5... We could add support in make_float (see below).=0A= =0A= +=A0 /* Special case, both x and y are subnormal.=A0 */=0A= +=A0 if (__glibc_unlikely (ex =3D=3D 0 && ey =3D=3D 0))=0A= +=A0=A0=A0 return asfloat (sx | hx % hy);=0A= =0A= This will handle zero case correctly.=0A= =0A= + /* Convert |x| and |y| to 'mx + 2^ex' and 'my + 2^ey'. Assume that hx i= s=0A= + not subnormal by conditions above. */=0A= + uint32_t mx =3D get_mantissa (hx) | (MANTISSA_MASK + 1);=0A= + ex--;=0A= +=0A= + uint32_t my =3D get_mantissa (hy) | (MANTISSA_MASK + 1);=0A= =0A= Odd uses of get_mantissa here but not in the fast path above... They are co= mputing=0A= the same value so can be shared.=0A= =0A= +=A0 mx %=3D my;=0A= +=0A= +=A0 if (__glibc_unlikely (mx =3D=3D 0))=0A= +=A0=A0=A0 return asfloat (sx);=0A= +=0A= +=A0 if (exp_diff =3D=3D 0)=0A= +=A0=A0=A0 return make_float (my, ey, sx);=0A= =0A= That should be make_float (mx, ey, sx) - no testcase caught this?!?=0A= =0A= (note both issues are in double version too)=0A= =0A= --- a/sysdeps/ieee754/flt-32/math_config.h=0A= +++ b/sysdeps/ieee754/flt-32/math_config.h=0A= =0A= +=A0=A0 NB: zero is not supported.=A0 */=0A= +static inline double=0A= +make_float (uint32_t x, int ep, uint32_t s)=0A= +{=0A= +=A0 int lz =3D __builtin_clz (x) - EXPONENT_WIDTH;=0A= +=A0 x <<=3D lz;=0A= +=A0 ep -=3D lz;=0A= +=0A= +=A0 if (__glibc_unlikely (ep < 0))=0A= =0A= We could do (ep < 0 || x =3D=3D 0) to handle the zero case correctly (this = works=0A= eventhough clz (0) is not well defined).=0A= =0A= +=A0=A0=A0 {=0A= +=A0=A0=A0=A0=A0 x >>=3D -ep;=0A= +=A0=A0=A0=A0=A0 ep =3D 0;=0A= +=A0=A0=A0 }=0A= +=A0 return asfloat (s + x + (ep << MANTISSA_WIDTH));=0A= +}=0A= +=0A= =A0=0A= Cheers,=0A= Wilco=