Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/815517/?format=api
{ "id": 815517, "url": "http://patchwork.ozlabs.org/api/patches/815517/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/59C114D5.5090009@arm.com/", "project": { "id": 41, "url": "http://patchwork.ozlabs.org/api/projects/41/?format=api", "name": "GNU C Library", "link_name": "glibc", "list_id": "libc-alpha.sourceware.org", "list_email": "libc-alpha@sourceware.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<59C114D5.5090009@arm.com>", "list_archive_url": null, "date": "2017-09-19T13:00:05", "name": "[5/9] New generic log2f", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "1a4351690704ef401e2f9b2ff3409427870eaf3f", "submitter": { "id": 65667, "url": "http://patchwork.ozlabs.org/api/people/65667/?format=api", "name": "Szabolcs Nagy", "email": "szabolcs.nagy@arm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/59C114D5.5090009@arm.com/mbox/", "series": [ { "id": 3865, "url": "http://patchwork.ozlabs.org/api/series/3865/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=3865", "date": "2017-09-19T12:49:03", "name": "Optimized expf, exp2f, logf, log2f and powf", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/3865/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/815517/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/815517/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<libc-alpha-return-84726-incoming=patchwork.ozlabs.org@sourceware.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "mailing list libc-alpha@sourceware.org" ], "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=sourceware.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=libc-alpha-return-84726-incoming=patchwork.ozlabs.org@sourceware.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (1024-bit key;\n\tsecure) header.d=sourceware.org header.i=@sourceware.org\n\theader.b=\"QBdkdMkM\"; dkim-atps=neutral", "sourceware.org; auth=none", "spf=none (sender IP is )\n\tsmtp.mailfrom=Szabolcs.Nagy@arm.com; " ], "Received": [ "from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xxNK828Vbz9s7g\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 19 Sep 2017 23:00:44 +1000 (AEST)", "(qmail 32415 invoked by alias); 19 Sep 2017 13:00:33 -0000", "(qmail 29663 invoked by uid 89); 19 Sep 2017 13:00:27 -0000" ], "DomainKey-Signature": "a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id\n\t:list-unsubscribe:list-subscribe:list-archive:list-post\n\t:list-help:sender:message-id:date:from:mime-version:to:cc\n\t:subject:references:in-reply-to:content-type; q=dns; s=default; b=\n\tVI8dMO4poYjupmK8tSkFH0gipBQgBGx7J9/gWjTIyIAXGgOJLLXaF6Sr+bou1P7f\n\tkn7nRBbmG5X5q8x0uszU747h4U/4fDCsjqhtj+DqgunK9cBvj69jvf4PiwiDpOSa\n\t4wFOSw72liTSOkiUwE3m342lQIOLSdQogWAjD2DgVA8=", "DKIM-Signature": "v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id\n\t:list-unsubscribe:list-subscribe:list-archive:list-post\n\t:list-help:sender:message-id:date:from:mime-version:to:cc\n\t:subject:references:in-reply-to:content-type; s=default; bh=bG7o\n\tyzegXfdD11FtlJLh+5tIJGs=; b=QBdkdMkMpwxOzCPuQ/KTDMasYThVRPwCaC0x\n\t6guwPkaj50HL4ayLwRn1CQznA1jTTG2mgbCxWXSuWPh0UHeqhX+aeIXOswFwRVTF\n\tiJ5C/biVih3zF1sNU9k8qYB8RaHTCDEls7NQsjKPrjvioXHKkuiBfBRMN6Iur/B5\n\tQIBhpiE=", "Mailing-List": "contact libc-alpha-help@sourceware.org; run by ezmlm", "Precedence": "bulk", "List-Id": "<libc-alpha.sourceware.org>", "List-Unsubscribe": "<mailto:libc-alpha-unsubscribe-incoming=patchwork.ozlabs.org@sourceware.org>", "List-Subscribe": "<mailto:libc-alpha-subscribe@sourceware.org>", "List-Archive": "<http://sourceware.org/ml/libc-alpha/>", "List-Post": "<mailto:libc-alpha@sourceware.org>", "List-Help": "<mailto:libc-alpha-help@sourceware.org>,\n\t<http://sourceware.org/ml/#faqs>", "Sender": "libc-alpha-owner@sourceware.org", "X-Virus-Found": "No", "X-Spam-SWARE-Status": "No, score=-23.9 required=5.0 tests=AWL, BAYES_00,\n\tGIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3,\n\tKAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=", "X-HELO": "EUR01-DB5-obe.outbound.protection.outlook.com", "Message-ID": "<59C114D5.5090009@arm.com>", "Date": "Tue, 19 Sep 2017 14:00:05 +0100", "From": "Szabolcs Nagy <szabolcs.nagy@arm.com>", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64;\n\trv:31.0) Gecko/20100101 Thunderbird/31.8.0", "MIME-Version": "1.0", "To": "GNU C Library <libc-alpha@sourceware.org>", "CC": "nd@arm.com", "Subject": "[PATCH 5/9] New generic log2f", "References": "<59C1123F.9080003@arm.com>", "In-Reply-To": "<59C1123F.9080003@arm.com>", "Content-Type": "multipart/mixed;\n\tboundary=\"------------090302000701070208030806\"", "X-ClientProxiedBy": "DB6P189CA0022.EURP189.PROD.OUTLOOK.COM\n\t(2603:10a6:6:2e::35)\n\tTo VI1PR0802MB2495.eurprd08.prod.outlook.com (2603:10a6:800:b6::23)", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "0a04a308-ecd7-4858-24fd-08d4ff5e5b68", "X-MS-Office365-Filtering-HT": "Tenant", "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:VI1PR0802MB2495; ", "X-Microsoft-Exchange-Diagnostics": [ "1; VI1PR0802MB2495;\n\t3:2AMBoEqLgrK9W2H0hI4ieVtgv/iudyPUDb+KDLipOO4AQ3hgOdIv3zt7fH+YVUK/Od27tBGlOHfqNBXFvmAH1jLutjTXuItghzKJbrqMcllD7knK/2guA/wV83C53YISRM/su9cneteqIeRd6aja2TcxG68RXQUcsnDUhsHZZtjmDOYkLfO1OJ3njtyU3qL0/NwFoPFcX5V/Ur8r8rY5mMoZ6mUS1lQyftIV+v9EiTTwGfKt9kc77a1KKjtS8SA3;\n\t25:4kna9W+fvAtgMxBdHYSBpqI/IIPWpvM7o22osZVzyHkOEDTmZ5NGbwOqyFzJGqXWLIOn8P/jD3volNq7R4s3vcgtl74aW6519UfsC7RwfSfnRRv46ihjbh3HVLHxDRCta0iB/FfoKEWHInwWe2HzNKr6ucpgpekW4SOHNiecT5vUEa45U4FLmhkAKkUma5jtqkudur7Fd5lcmNTsMymtU/D/zRWl/w9SvxKKpSepjhVeGuqrbhPFjNbSgk3VI4h2q4fjogBbbBROWHiW2sEqqzei2gYKnCg7DuvsOXdvtbq1Y5Om6HeCsbdEg+waW7Q5MzOAeDXyYqI/z4gTeLsmiQ==;\n\t31:aupgmoc37eJ4jNga3HzB/iBQDtJVDGpP1Xt8NigX7uvwzKjsGvGt4vOWlUbTO8u4omSe7nIkP3GHGfYG+H0fOz+WN4B8Y8f4x4+zJxhafwBJ1DIB9eJkxmthOTXVU9uUXr2KXNzJ161m3cfEFrJxqaRq/V6IXmi5Qvw0Z9IbbL1iqkz2lpY6JXrcjMLt0rlDmkHzPSNPDdFdQO3WghvblIbBLr6uJ9EHdU7zS4vVX78=", "1; VI1PR0802MB2495;\n\t20:tHLPcmK/dsJOVKTTQp2gHiAbQEXADToBF6gAhs322ait3qigf3tqZ5HcRft/r3sCWHX/22eMKDzhBDxr6ESeUEmAG1o/DvWM+XrITrdtEpvTX1arJ52cUA0Ou5UqnIDUy4DenzBp3zYX6rB3AVoxgKarhYs+gesDrG393fbGjoA=;\n\t4:s7G2coaIBlVw1z5oGwHy0dn5jmdrapvLXFDsvXakvs0kNUDGUTtsD2ccAFl++s9n6n72qcNdCvNzAL7eLeEXBNXFci7di2iWYAHahn9uLuCD8o4VBEfpB95B30CbOorJMX3pFeRXxOzqroVCkIE1mm5IKw/aIciUkcbpciFtpxHcyihyevawmyzI0dLKvUz9OowVDSaQG/eKjUk9d79aXItoTYgfTdr7GpLINBEoD7xwPJ0h22X0iut0E9S4gnmp7/szOsnPUXvWM8iUFXnokNBj/fwWzRzybYtWmR3wnTY=", "1; VI1PR0802MB2495;\n\t23:0o0ruk0W8jyoq0dlPufwEaDHEV8a5RJqyZwXmdxObgarfRoqT+s27MyIcdDNF+bm7BqcRSqyVViliZgQT5PiPgLgjOBkfjWBB3HsIObR8866pdcKoq5lVtni8fCu5KLrC2MPAedS12+6zqCQyD0LLqT9xRlG/Z21+eXGHPuE1zHaOikxylUGyycE7SYG5g7Nk7Cf0u5qZyA9+JmhhIasn+dRWXwUz2r32PyMx9XsqU5tVPubLtb4v3k++QODzY1XNxw3MT1tqdKdYTaWiykx0TU6oUUc6WOFkXfr6joCaq6/m1bN5ND0YKADy0KrMgJsP/DCpZJLpb0EXOiyE40Wj+fUdKIKggtpUcb2lf2ADBN7YT9YMERfoC76k+9ZWYvwF9jcJlZ3RVypzuYQ0TaOg70+apG7M1zrX6T2/3GuNzg1xWRp+elXAY+wL9svyV2aje7SzZ6PE+Dxb1qUXWbZl9J8skmLykqZk1hRFMtTtdJvKEUFeiJ9pp5HB22WTJ6TBxCWBLlxCrAyPemsy15dnjM7AAxfurGedQ7vagXFYSG9zebWFa2BawgIMYs4Zq6WnrborVBwb8B0E626fFlCoGm7X32kOf/QqryLKz+BK4qQEcP3JVtAd3ByMjOwzXIpR9Bs6tRBb/ucebP00phdPMhTOK6wLXpKpBNhICfP/qkIYGpqd2IWyZGjvPRmZCvy3KUXYB5sKnTMVzrbGLpv23gQKS8a2VYtCOtZIUO3s+aPZV7fVQJOv8Xe9bvzlOUJO21CFM2hh9RQMuvPrqTIGvejxU48GEDedeQrlREd790LuzvC0Kxu7BYVOsodeAWzAo6GLH6CXuDqLJWGERT1fdBjzrJoD0C1zhAstQma/iY5yzWAmQvYNMxS4eu1G7LlLo//pZD2AVoDC6Js5hS0ZNXxZimh9TkK9aT9LJgECfBr98ghWBZ0oOrW8ynYL+f8uwrfpRqefoOzY/rticGDN/+jZBh2HtG4I5xY389rS+QZeMVkUl3BS9BFktdmjsvg52QIlDlXoTHJcT+gXOj/enEX4c3kW1ifFJKj9UOE1fmDvV3ykOAP5viXGND8eLNgCXDHZUEByRFbx+bFP25sUiPuN2q7UB8/cJ3nnSQoMlT3TJ2PoDlZ7VjHujFlM9byL8xbyHZRLOS8561A1mOqAHi51FIHJ0i1L9jr/8F03Q8ZRCpVB96dYCNk3mKO06FC+VkeOgP3rkQmnDY75gaMVwwM6cEj77adiQ8teJgBlk6ZpFYkfDVbGBWt5+Kq585GdNpQFGEA24uGlO4iCpl+DDqp+dGiZXpkXmNpaV0VPiT3mhK9Ogd0U++82z6Jaql/gRB0vQ+z6uUmET5dh+JAf+KsmK7md/FtUnpClxKM9amoaBtnuLJm5vACec/3SPPzY2s9tNE1TrWwlsG6hqYGr6hCJGUT0xkE17O1dut3TU9UeAAIHqv2D0ZV+mRNTt+V0gLb0PKONeGCsWMcByvSUz8yaV92i7Q8hwIDBMmatB/OZQdCUlj4yD+6A8IRTgVU", "1; VI1PR0802MB2495;\n\t6:7F4in4Nd2WLqoDlGzxiZ/M4tR7ypxXXZNJPb0580+9JFJsOXI9AVnfqhkLHKRgAMvSc53+2i/UDJjta3ZRHvpkNZ1ifXusgej+VUfSk//clzamPyYG5g4hG1l+BwyYYEFv96O3Tg1h02t2a4CZ5ClhwnVF8IJ1q2QL67Mut1dfsgluC+MdKqAKYyjxzlv2tzbxKnT+tnTfnI2D3OS7AaY2ypqVeV7mVpQe1bXDeUa5BuPvzG/iisZhIaLpNgaR4FsH6MKyvoH5kWT0pyNmarmgkSSmA9E/kiGibUrBXuk9B647P2w40x1vAxvyzPX9nnG4khSt/9FZJliWKvRrIirQ==;\n\t5:y7P3f+KK3ezK4k9sF3UNdJwdFY1TJQ+IXoyYrvGe4zw5WbxI0Yb25ABDRHp0iQQVi6Mb8RvAa0IcGRuGFAfd51CmHlsN6AtNxOQWOc86zxCWZOb6bknWgKjXUcGzWEDUTd9NmT8EIL31Qx//8D8P/w==;\n\t24:HjP//1xm3kqdCLzz/+xFsjRAGWEGupcpGm32Zu61c37uuAtRjQ6HtdRkZ97/2nAr8bK0DKxYd4ebXrRjR02cmoy/nIJ3KP0MI/Y7FjJYndA=;\n\t7:vFGQStFZZJ/co4bxedANbhd+7Fr/Vqq64Hso7/DmKkxV7sAalBilyZH8LD2H+eSOyFjdqDl9cm390ERQCZikoojCSBc9LZBoLxKZAjV03w5EsF23Okb9DXM/S7TK8eD61QCDcyg82NT5o5XRBtC+zUqbYKw3BJP4BUlK9+KMk6pdWuMnZp0Z8ccs885LCMfQq6a6zk/mQ6RoAWxpAcmBK9ShDu4erKrXo3DbF+VJVhM=" ], "X-MS-TrafficTypeDiagnostic": "VI1PR0802MB2495:", "NoDisclaimer": "True", "X-Exchange-Antispam-Report-Test": "UriScan:(180628864354917);", "X-Microsoft-Antispam-PRVS": "<VI1PR0802MB249529ACBED3973950047BB8ED600@VI1PR0802MB2495.eurprd08.prod.outlook.com>", "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(100000703101)(100105400095)(6055026)(6041248)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:VI1PR0802MB2495; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:VI1PR0802MB2495; ", "X-Forefront-PRVS": "04359FAD81", "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(7370300001)(4630300001)(6009001)(6049001)(39860400002)(346002)(376002)(199003)(377424004)(189002)(84326002)(2906002)(58126008)(6666003)(25786009)(68736007)(59896002)(4610100001)(5660300001)(77096006)(83506001)(4326008)(72206003)(106356001)(86362001)(80316001)(5890100001)(21490400003)(6486002)(2950100002)(76176999)(53936002)(7736002)(50986999)(54356999)(16586007)(65816999)(6916009)(270700001)(305945005)(105586002)(64126003)(478600001)(66066001)(189998001)(65806001)(65956001)(33656002)(8676002)(16526017)(101416001)(2476003)(36756003)(16576012)(81156014)(97736004)(81166006)(3846002)(316002)(568964002)(6116002)(7350300001)(87266999)(5000100001)(41533002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2495;\n\tH:[10.2.206.69]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1;\n\tLANG:en; ", "Received-SPF": "None (protection.outlook.com: arm.com does not designate\n\tpermitted sender hosts)", "SpamDiagnosticOutput": "1:99", "SpamDiagnosticMetadata": "NSPM", "X-OriginatorOrg": "arm.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "19 Sep 2017 13:00:08.8361\n\t(UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR0802MB2495" }, "content": "Similar to the new logf: double precision arithmetics\nand a small lookup table is used. The argument reduction\nstep is the same as for the new logf.\n\nwith naive ubenchmark (on aarch64):\nreciprocal-throughput: 2.7x faster\nlatency: 2x faster\nold worst case error: 1.72 ulp\nnew worst case error: 0.75 ulp\naarch64 .text size: -252 bytes\naarch64 .rodata size: +244 bytes\n\n2017-09-19 Szabolcs Nagy <szabolcs.nagy@arm.com>\n\n\t* math/Makefile (type-float-routines): Add e_log2f_data.\n\t* sysdeps/ieee754/flt-32/e_log2f.c: New implementation.\n\t* sysdeps/ieee754/flt-32/e_log2f_data.c: New file.\n\t* sysdeps/ieee754/flt-32/math_config.h (__log2f_data): Define.\n\t(LOG2F_TABLE_BITS, LOG2F_POLY_ORDER): Define.\n\t* sysdeps/i386/fpu/e_log2f_data.c: New file.\n\t* sysdeps/ia64/fpu/e_log2f_data.c: New file.\n\t* sysdeps/m68k/m680x0/fpu/e_log2f_data.c: New file.", "diff": "diff --git a/math/Makefile b/math/Makefile\nindex 919fec13ef..b4b3101592 100644\n--- a/math/Makefile\n+++ b/math/Makefile\n@@ -115,7 +115,8 @@ type-double-routines := branred doasin dosincos halfulp mpa mpatan2\t\\\n \n # float support\n type-float-suffix := f\n-type-float-routines := k_rem_pio2f math_errf e_exp2f_data e_logf_data\n+type-float-routines := k_rem_pio2f math_errf e_exp2f_data e_logf_data\t\\\n+\t\t e_log2f_data\n \n # _Float128 support\n type-float128-suffix := f128\ndiff --git a/sysdeps/i386/fpu/e_log2f_data.c b/sysdeps/i386/fpu/e_log2f_data.c\nnew file mode 100644\nindex 0000000000..1cc8931700\n--- /dev/null\n+++ b/sysdeps/i386/fpu/e_log2f_data.c\n@@ -0,0 +1 @@\n+/* Not needed. */\ndiff --git a/sysdeps/ia64/fpu/e_log2f_data.c b/sysdeps/ia64/fpu/e_log2f_data.c\nnew file mode 100644\nindex 0000000000..1cc8931700\n--- /dev/null\n+++ b/sysdeps/ia64/fpu/e_log2f_data.c\n@@ -0,0 +1 @@\n+/* Not needed. */\ndiff --git a/sysdeps/ieee754/flt-32/e_log2f.c b/sysdeps/ieee754/flt-32/e_log2f.c\nindex 782d901094..6c42f27843 100644\n--- a/sysdeps/ieee754/flt-32/e_log2f.c\n+++ b/sysdeps/ieee754/flt-32/e_log2f.c\n@@ -1,86 +1,88 @@\n-/* e_logf.c -- float version of e_log.c.\n- * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.\n- * adapted for log2 by Ulrich Drepper <drepper@cygnus.com>\n- */\n+/* Single-precision log2 function.\n+ Copyright (C) 2017 Free Software Foundation, Inc.\n+ This file is part of the GNU C Library.\n \n-/*\n- * ====================================================\n- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.\n- *\n- * Developed at SunPro, a Sun Microsystems, Inc. business.\n- * Permission to use, copy, modify, and distribute this\n- * software is freely granted, provided that this notice\n- * is preserved.\n- * ====================================================\n- */\n+ The GNU C Library is free software; you can redistribute it and/or\n+ modify it under the terms of the GNU Lesser General Public\n+ License as published by the Free Software Foundation; either\n+ version 2.1 of the License, or (at your option) any later version.\n+\n+ The GNU C Library is distributed in the hope that it will be useful,\n+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n+ Lesser General Public License for more details.\n \n+ You should have received a copy of the GNU Lesser General Public\n+ License along with the GNU C Library; if not, see\n+ <http://www.gnu.org/licenses/>. */\n \n #include <math.h>\n-#include <math_private.h>\n-#include <fix-int-fp-convert-zero.h>\n+#include <stdint.h>\n+#include \"math_config.h\"\n+\n+/*\n+LOG2F_TABLE_BITS = 4\n+LOG2F_POLY_ORDER = 4\n \n-static const float\n-ln2 = 0.69314718055994530942,\n-two25 = 3.355443200e+07,\t/* 0x4c000000 */\n-Lg1 = 6.6666668653e-01,\t/* 3F2AAAAB */\n-Lg2 = 4.0000000596e-01,\t/* 3ECCCCCD */\n-Lg3 = 2.8571429849e-01, /* 3E924925 */\n-Lg4 = 2.2222198546e-01, /* 3E638E29 */\n-Lg5 = 1.8183572590e-01, /* 3E3A3325 */\n-Lg6 = 1.5313838422e-01, /* 3E1CD04F */\n-Lg7 = 1.4798198640e-01; /* 3E178897 */\n+ULP error: 0.752 (nearest rounding.)\n+Relative error: 1.9 * 2^-26 (before rounding.)\n+*/\n \n-static const float zero = 0.0;\n+#define N (1 << LOG2F_TABLE_BITS)\n+#define T __log2f_data.tab\n+#define A __log2f_data.poly\n+#define OFF 0x3f330000\n \n float\n-__ieee754_log2f(float x)\n+__ieee754_log2f (float x)\n {\n-\tfloat hfsq,f,s,z,R,w,t1,t2,dk;\n-\tint32_t k,ix,i,j;\n+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */\n+ double_t z, r, r2, p, y, y0, invc, logc;\n+ uint32_t ix, iz, top, tmp;\n+ int k, i;\n+\n+ ix = asuint (x);\n+#if WANT_ROUNDING\n+ /* Fix sign of zero with downward rounding when x==1. */\n+ if (__glibc_unlikely (ix == 0x3f800000))\n+ return 0;\n+#endif\n+ if (__glibc_unlikely (ix - 0x00800000 >= 0x7f800000 - 0x00800000))\n+ {\n+ /* x < 0x1p-126 or inf or nan. */\n+ if (ix * 2 == 0)\n+\treturn __math_divzerof (1);\n+ if (ix == 0x7f800000) /* log2(inf) == inf. */\n+\treturn x;\n+ if ((ix & 0x80000000) || ix * 2 >= 0xff000000)\n+\treturn __math_invalidf (x);\n+ /* x is subnormal, normalize it. */\n+ ix = asuint (x * 0x1p23f);\n+ ix -= 23 << 23;\n+ }\n+\n+ /* x = 2^k z; where z is in range [OFF,2*OFF] and exact.\n+ The range is split into N subintervals.\n+ The ith subinterval contains z and c is near its center. */\n+ tmp = ix - OFF;\n+ i = (tmp >> (23 - LOG2F_TABLE_BITS)) % N;\n+ top = tmp & 0xff800000;\n+ iz = ix - top;\n+ k = (int32_t) tmp >> 23; /* arithmetic shift */\n+ invc = T[i].invc;\n+ logc = T[i].logc;\n+ z = (double_t) asfloat (iz);\n \n-\tGET_FLOAT_WORD(ix,x);\n+ /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */\n+ r = z * invc - 1;\n+ y0 = logc + (double_t) k;\n \n-\tk=0;\n-\tif (ix < 0x00800000) {\t\t\t/* x < 2**-126 */\n-\t if (__builtin_expect((ix&0x7fffffff)==0, 0))\n-\t\treturn -two25/__fabsf (x);\t/* log(+-0)=-inf */\n-\t if (__builtin_expect(ix<0, 0))\n-\t\treturn (x-x)/(x-x);\t/* log(-#) = NaN */\n-\t k -= 25; x *= two25; /* subnormal number, scale up x */\n-\t GET_FLOAT_WORD(ix,x);\n-\t}\n-\tif (__builtin_expect(ix >= 0x7f800000, 0)) return x+x;\n-\tk += (ix>>23)-127;\n-\tix &= 0x007fffff;\n-\ti = (ix+(0x95f64<<3))&0x800000;\n-\tSET_FLOAT_WORD(x,ix|(i^0x3f800000));\t/* normalize x or x/2 */\n-\tk += (i>>23);\n-\tdk = (float)k;\n-\tf = x-(float)1.0;\n-\tif((0x007fffff&(15+ix))<16) {\t/* |f| < 2**-20 */\n-\t if(f==zero)\n-\t {\n-\t\tif (FIX_INT_FP_CONVERT_ZERO && dk == 0.0f)\n-\t\t dk = 0.0f;\n-\t\treturn dk;\n-\t }\n-\t R = f*f*((float)0.5-(float)0.33333333333333333*f);\n-\t return dk-(R-f)/ln2;\n-\t}\n-\ts = f/((float)2.0+f);\n-\tz = s*s;\n-\ti = ix-(0x6147a<<3);\n-\tw = z*z;\n-\tj = (0x6b851<<3)-ix;\n-\tt1= w*(Lg2+w*(Lg4+w*Lg6));\n-\tt2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7)));\n-\ti |= j;\n-\tR = t2+t1;\n-\tif(i>0) {\n-\t hfsq=(float)0.5*f*f;\n-\t return dk-((hfsq-(s*(hfsq+R)))-f)/ln2;\n-\t} else {\n-\t return dk-((s*(f-R))-f)/ln2;\n-\t}\n+ /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */\n+ r2 = r * r;\n+ y = A[1] * r + A[2];\n+ y = A[0] * r2 + y;\n+ p = A[3] * r + y0;\n+ y = y * r2 + p;\n+ return (float) y;\n }\n strong_alias (__ieee754_log2f, __log2f_finite)\ndiff --git a/sysdeps/ieee754/flt-32/e_log2f_data.c b/sysdeps/ieee754/flt-32/e_log2f_data.c\nnew file mode 100644\nindex 0000000000..e39de3ba56\n--- /dev/null\n+++ b/sysdeps/ieee754/flt-32/e_log2f_data.c\n@@ -0,0 +1,44 @@\n+/* Data definition for log2f.\n+ Copyright (C) 2017 Free Software Foundation, Inc.\n+ This file is part of the GNU C Library.\n+\n+ The GNU C Library is free software; you can redistribute it and/or\n+ modify it under the terms of the GNU Lesser General Public\n+ License as published by the Free Software Foundation; either\n+ version 2.1 of the License, or (at your option) any later version.\n+\n+ The GNU C Library is distributed in the hope that it will be useful,\n+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n+ Lesser General Public License for more details.\n+\n+ You should have received a copy of the GNU Lesser General Public\n+ License along with the GNU C Library; if not, see\n+ <http://www.gnu.org/licenses/>. */\n+\n+#include \"math_config.h\"\n+\n+const struct log2f_data __log2f_data = {\n+ .tab = {\n+ { 0x1.661ec79f8f3bep+0, -0x1.efec65b963019p-2 },\n+ { 0x1.571ed4aaf883dp+0, -0x1.b0b6832d4fca4p-2 },\n+ { 0x1.49539f0f010bp+0, -0x1.7418b0a1fb77bp-2 },\n+ { 0x1.3c995b0b80385p+0, -0x1.39de91a6dcf7bp-2 },\n+ { 0x1.30d190c8864a5p+0, -0x1.01d9bf3f2b631p-2 },\n+ { 0x1.25e227b0b8eap+0, -0x1.97c1d1b3b7afp-3 },\n+ { 0x1.1bb4a4a1a343fp+0, -0x1.2f9e393af3c9fp-3 },\n+ { 0x1.12358f08ae5bap+0, -0x1.960cbbf788d5cp-4 },\n+ { 0x1.0953f419900a7p+0, -0x1.a6f9db6475fcep-5 },\n+ { 0x1p+0, 0x0p+0 },\n+ { 0x1.e608cfd9a47acp-1, 0x1.338ca9f24f53dp-4 },\n+ { 0x1.ca4b31f026aap-1, 0x1.476a9543891bap-3 },\n+ { 0x1.b2036576afce6p-1, 0x1.e840b4ac4e4d2p-3 },\n+ { 0x1.9c2d163a1aa2dp-1, 0x1.40645f0c6651cp-2 },\n+ { 0x1.886e6037841edp-1, 0x1.88e9c2c1b9ff8p-2 },\n+ { 0x1.767dcf5534862p-1, 0x1.ce0a44eb17bccp-2 },\n+ },\n+ .poly = {\n+ -0x1.712b6f70a7e4dp-2, 0x1.ecabf496832ep-2, -0x1.715479ffae3dep-1,\n+ 0x1.715475f35c8b8p0,\n+ }\n+};\ndiff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h\nindex e1feafccfe..4e27b99bf4 100644\n--- a/sysdeps/ieee754/flt-32/math_config.h\n+++ b/sysdeps/ieee754/flt-32/math_config.h\n@@ -123,4 +123,15 @@ extern const struct logf_data\n double poly[LOGF_POLY_ORDER];\n } __logf_data;\n \n+#define LOG2F_TABLE_BITS 4\n+#define LOG2F_POLY_ORDER 4\n+extern const struct log2f_data\n+{\n+ struct\n+ {\n+ double invc, logc;\n+ } tab[1 << LOG2F_TABLE_BITS];\n+ double poly[LOG2F_POLY_ORDER];\n+} __log2f_data;\n+\n #endif\ndiff --git a/sysdeps/m68k/m680x0/fpu/e_log2f_data.c b/sysdeps/m68k/m680x0/fpu/e_log2f_data.c\nnew file mode 100644\nindex 0000000000..1cc8931700\n--- /dev/null\n+++ b/sysdeps/m68k/m680x0/fpu/e_log2f_data.c\n@@ -0,0 +1 @@\n+/* Not needed. */\n", "prefixes": [ "5/9" ] }