{"id":818176,"url":"http://patchwork.ozlabs.org/api/patches/818176/?format=json","web_url":"http://patchwork.ozlabs.org/project/glibc/patch/59C8E292.6030505@arm.com/","project":{"id":41,"url":"http://patchwork.ozlabs.org/api/projects/41/?format=json","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":"<59C8E292.6030505@arm.com>","list_archive_url":null,"date":"2017-09-25T11:03:46","name":"[3/7,v2] New generic log2f","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"483be109f5ddb98d71c4d8f99415a51e2fe0c6c4","submitter":{"id":65667,"url":"http://patchwork.ozlabs.org/api/people/65667/?format=json","name":"Szabolcs Nagy","email":"szabolcs.nagy@arm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/glibc/patch/59C8E292.6030505@arm.com/mbox/","series":[{"id":4935,"url":"http://patchwork.ozlabs.org/api/series/4935/?format=json","web_url":"http://patchwork.ozlabs.org/project/glibc/list/?series=4935","date":"2017-09-25T10:57:58","name":"Optimized expf, exp2f, logf, log2f and powf","version":1,"mbox":"http://patchwork.ozlabs.org/series/4935/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/818176/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/818176/checks/","tags":{},"related":[],"headers":{"Return-Path":"<libc-alpha-return-84913-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-84913-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=\"apXjzzJM\"; 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 3y11Rp5YtRz9t1G\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 25 Sep 2017 21:04:06 +1000 (AEST)","(qmail 18313 invoked by alias); 25 Sep 2017 11:03:59 -0000","(qmail 18284 invoked by uid 89); 25 Sep 2017 11:03:57 -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\tlsvmHLd87OsKY1RK15U8XKWX2x9leDe/9D5Ht2gxjFYQosL/HcuyK1Dd/K/IWRnv\n\t5LDoHQQ3UFrBmsOJWAFsY4nnoJhQN1K5CgTalcpwZGB/+47R7r3/NMibCbHGEWAh\n\teDxsuTBQbfE5EbVJ98sKeZRqH20bOHwA77pCJHxPJrg=","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=21Cq\n\tq3Hu1fScBDP39ipvRAJ1rE0=; b=apXjzzJMpFDcWuOzJNHY7kAgS2m0GqR9u1DY\n\tUmpnA3GGsfJEGqbIS3yq36ZW6gnbtceZnpWJZztYahs/pDiYRl5UVZ5bppqjJRYe\n\tE1hHBRuycsFJl/XAnX6/A02q0CWSYUikgookm2IQdMUaphCLQk/6f6jzYFJI/aUm\n\tw8yRfGM=","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=-24.0 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-HE1-obe.outbound.protection.outlook.com","Message-ID":"<59C8E292.6030505@arm.com>","Date":"Mon, 25 Sep 2017 12:03:46 +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 3/7 v2] New generic log2f","References":"<59C8E136.6070606@arm.com>","In-Reply-To":"<59C8E136.6070606@arm.com>","Content-Type":"multipart/mixed;\n\tboundary=\"------------040701050608030008020806\"","X-ClientProxiedBy":"VI1PR0401CA0017.eurprd04.prod.outlook.com\n\t(2603:10a6:800:4a::27) To AM5PR0802MB2481.eurprd08.prod.outlook.com\n\t(2603:10a6:203:97::23)","X-MS-PublicTrafficType":"Email","X-MS-Office365-Filtering-Correlation-Id":"edfe472d-48e2-43fe-e793-08d504051a44","X-MS-Office365-Filtering-HT":"Tenant","X-Microsoft-Antispam":"UriScan:; BCL:0; PCL:0;\n\tRULEID:(22001)(2017030254152)(48565401081)(2017052603199)(49563074)(201703131423075)(201703031133081)(201702281549075);\n\tSRVR:AM5PR0802MB2481; ","X-Microsoft-Exchange-Diagnostics":["1; AM5PR0802MB2481;\n\t3:79xpHh9BS/7xGvqbp8F5/RoKKxiVWKeXR3lXDvlMvVxe5wJMlCnZ94ZT7tNm6KuENrKfW0KDQqNMgGql/gl3E1nd89gWRrLPVMaGNvLXKbZJIURgLSQkEcFD9z+1gXAAqIWKAX6PWCisYjzUAb9gvL9QSAeg+J68GD9mjNLHNX8X6C7IaU6dDhdYtmeW65BBGcRl/CWozUn29ZMInuEZD9/60i8f/5hwizexp/C7abyrLVq7E8rrQ49y8EuRupoV;\n\t25:9gD9LOdOcBL95pTLC3LQitZDnlrtZ9XgJtKjk2YtPjB+1PXRXyAyl49HMJdlOj8p6aZM237zLTsENT8opNh3e4LcXdIHd/DPTAOue/ERcUQ9+ynilsLEQDZh2pwTYl2bXgM0ZMtRW9fRDxF5oDM7xd6vGfHrwxQmpKMd7pgKXB6f7dy/Qp/WDztbTkaXy6q9yMecotJKkj8oTA18KjGRFcof1lNJ7fMtrM+E1xYSym71XboDnUQwIawE0gRB+v8mHVlJ+SEiNzyAxDzz5puY1jNV1adC9CNNP2RZHLuwLtS7tD16fqYxyJf3dkoCx6IS0+9BZY8Lx2WvB3n2cIGpjw==;\n\t31:1xOsYvRrN1X/TKH2zwodFhvyYexmZNVWWJ0aFkFgOzmcPXow2KLN6BWyEBGVnjZ+rki+M31g5kO9eDG3qXVWF/OmbL0u+oh3FOP18So6SmO+1EELudHc9RIkBaMe8wjIVa3+JCwyBymIWSrG6bzhz2Q6SOQebG8oCnXbzrZsP1yJzA5RVG3USWTQH/C+DVWZ2kuW/38rhQpGKzTCNVEqj1V35A73Hrqx06KzKHJ/t2E=","1; AM5PR0802MB2481;\n\t20:KH8mo2zrCdK7YuFb+cke9xUqp2OXIt3qYDWMaAZbiF0nTqvoLGFxcYy6U/Ss2uNarb8BP+y6Vqt5xVIqTTbQycpPBzt4eUKSlgqD0qdgzEAjVZ+5MCnTbV9QFF8oB0V978h9Xy5aIK4sbTac044q/F6BUq8PWuKxfUU2QITf22M=;\n\t4:BG4O9yhRhBhgjI2X5lR9xTDa356BLv25ekbS2bi6vHi5GD/VBxt26qpfZbf0+9LxEmHCW+1irLqxIfMW0TYqeAn6CjHMrDbcJ53x6a3NHa3TBWRTpSEoEasByZ7lFMFUt64sQXFW5O1eyqboqbQMF4djt/Frh706zUAZZef3Fu5JeovuYcrRaid/RlEZchVotenZPTAJdLtbECbchW3Uf2DCt9xK2HfDGAbGzqsBmO02D2I8n3EFVqE6lmVScQ4E","1; AM5PR0802MB2481;\n\t23:eLRF9LxQ54vyXjcj2fma8FmoZQnA4PRW4Gv7wWR8Z0mIVM9A3FDbQyNAikMZJMFVEUunCgz4aE8Hfrcm1gYG2rAad5C3HKwYQcCvoWbQH8DmW6Z8fj72wodZitPAhs0+D7nTv8b+4AonoCUgrTACHVJwbX8OIf5IRdWVwvVYtw+eLVQ5RZ9DCOfMEfvjTuMSlSo0RGP1I015ZYMPEMFB7lIcnTKrPqSKBQtNs/cXoZpcwAjnG4h8iMawz7iTi2ylc0VWLw/wK7iLLt8MuSFYGTz/V5hCacN0yZlVLlLb+P/DFFSzChALRkvEalZV3iYObAyHTScCcf98l3X6wLf2+4D+CNwfPuLikaWFwK/wOdeTYZSFcyw9skShZf9UWsLHcUzyBJMb5Y4H6VgobafKEC1evwUmoiC8xyz9BqDhZqiWAKbdTwqD8yU1vh5wfSZSvFrpOHNvqbzvggUL3vmmvwtfVCiSn7dXVWxoh39dz5xeCwHSEnuN0k9CdOxBLP4aqyXkZkfN4SheeTkG9rVYkpiJ/TA7giGceoUrF7buzZQGv0YfXBCRZ2qjAsDwJ76uu9xOBm/KZFu/WqiNdYw6j1JASojNe68BM+jiFZS9U2Ts8K8fp1gZKPxfi4KSxiUUILbJoFkbMt3D861G5PpM6XWDnIUktWwwE86EJjrqP+hh9bC29WXlHakLzmgwb8yZuVl85IRS/xofPtiESRFn0v/kfh2eGBpQ7jtyjiuNjFuGSgH+pDmZa9N11FGLC0VVORGGnbd3wO3wC6mMLaTqwAXI2JYvb43VSlIguniCp+V+BvWoUIwf+yjAuxYtQQJnLJzNsNXOddt8jZJKq3cD4M/6L19YZ2K86YF1FikIAH5rZ3pPf7w6NdiavRZD/JMf/T0PUqcMTqbgCvRJkxz4adhZ2Fbw3ACLsPzyvO0xjKQpYyQGsX+v4UYcjEX9/1hut9/Kw+01lU62cxjcCNmG7rkjKKS3Dkbgadttn+k1onwOABCYDUvU2YXHQPf1tpccTEe8+uOp5D7aVNbh2/0vG4Q59zznOj1cqdGyIShWsiz4PFsuFjsIAQaW/NQtyLYPS67ggWPgd2aoOOQfe57LNbakJOBuUzLMN3SzL94SXf2pPlRkHqlojczmPTFAWF4/yM8XGg1O3qN7fEzE2HwRdGG517BDjpLXNgwXGUgRaf47y9zoQVSzL+qVRgHfaErZzyIfEV3yNcDLvfWzHb24bkc1SzKdUdGXol8AkKSWYqWEfaZWpQsn98bcHDRVDxVYH+La/rCHHhug1Coho6sDSBoYt9GhLQ39pQwRgLfeKGKbqFGW0dwwjbvGF3x1V4LcCYpF4SJGfsBgY6bhsAew0TUTQ3jlelil8WL76oS22Ek7QBJKSMGSiq3SNSkotrHjkCZDL8XU5Tjld4iBJ9LUSpnaBHNiax/Pgq5hRBhaiqA=","1; AM5PR0802MB2481;\n\t6:cgvulZ0bGJXBIHcKKsVm1CefuXxBcjpfor89t9/hZOW03RSKtezEwyTPWvrbgZmMIClnARZncwV2SZRc4ZPtvYqZ/TywB9VdpZ/tyJolms9CUYc3nmEHjreLD/HtXBzeC6YxLaGDD21JvAD5/uFPYoHp4hc3karH+ySXy5cysRSm3ZOU1KYaw6pKAoesZ/bmN/ePAV+5lB62goqYqKVKQvS4/MiotBZAd1DaRhnlA7LXmyiiw1OSq9UzZ/VF0k/bHDK1lvzom7UH1s+D5KwdbHr0/LxW3jhakCDIa695QObTCJ6QKYs9tLStLeSu+XrPjzgr8gXlkaGGP2Bm34wOXg==;\n\t5:aomu0goMZbu1hRzlSH0DMD/CUTiQPSv/t0Xj5OrcGJjSlfhh1HsvCyrcTgsCW/ddX33QjhG3chSO/r53q835JyQ6DdAGN9QwWpJjkuPFoa4n8ijFo8+SBUowEI2bmv2tu2hb3D4in30e0YQo8acMzw==;\n\t24:lXa1ydlegnNckE5Xte2HyxVW8Pcu+m9OKDb+9jOAukuA0wRjaPc1L/9mr0tgGDUEvwvecmvROlylrGePSje65R5WzRXlPb5cD30WvZsxw3Q=;\n\t7:oQYfnkU1Xr1vEmPcLs8ZjZ0HlS2P/x4BUiBFBL8PwTBGa4Ij4+he2mu9yoDy8pWaaR7zpOnoHg3wbZ38CEeG9c0xAA5Z+IBw7OdPtjR7fyqmHm4r/lTXpgE/079x7jvOLVuByvfcDna+cddqOPty+VQ00uXEEpLpoMYCQ4st8aQuzfqR0yNAjf86vzSpEidFwpKN3OcIAOo3qCfK4WFPZawguFk1YdSK18ChNuHiVxs="],"X-MS-TrafficTypeDiagnostic":"AM5PR0802MB2481:","NoDisclaimer":"True","X-Exchange-Antispam-Report-Test":"UriScan:;","X-Microsoft-Antispam-PRVS":"<AM5PR0802MB248118B6E17FE4C02876D806ED7A0@AM5PR0802MB2481.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)(10201501046)(100000703101)(100105400095)(3002001)(93006095)(93001095)(6055026)(6041248)(20161123560025)(20161123558100)(20161123555025)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:AM5PR0802MB2481; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:AM5PR0802MB2481; ","X-Forefront-PRVS":"04410E544A","X-Forefront-Antispam-Report":"SFV:NSPM;\n\tSFS:(10009020)(6049001)(6009001)(39830400002)(376002)(346002)(199003)(189002)(4610100001)(8676002)(101416001)(7736002)(97736004)(72206003)(36756003)(25786009)(83506001)(66066001)(64126003)(80316001)(65806001)(4326008)(65956001)(84326002)(16526017)(316002)(76176999)(54356999)(58126008)(8936002)(2906002)(5000100001)(53936002)(50986999)(478600001)(16576012)(189998001)(33656002)(2476003)(3846002)(6916009)(6116002)(6666003)(59896002)(2950100002)(105586002)(68736007)(16586007)(65816999)(568964002)(305945005)(87266999)(86362001)(5890100001)(5660300001)(270700001)(106356001)(77096006)(6486002)(564344004)(81156014)(81166006)(41533002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2481;\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":"25 Sep 2017 11:03:49.8926\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"f34e5979-57d9-4aaa-ad4d-b122a662184d","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AM5PR0802MB2481"},"content":"v2:\n- __log2f_data is attribute_hidden","diff":"From e931f4585585e39ccb5f1f3a29debe670eb53629 Mon Sep 17 00:00:00 2001\nFrom: Szabolcs Nagy <szabolcs.nagy@arm.com>\nDate: Mon, 4 Sep 2017 17:53:47 +0100\nSubject: [PATCH 3/7] New generic log2f\n\nSimilar to the new logf: double precision arithmetics and a small\nlookup table is used. The argument reduction step is the same as in\nthe new logf.\n\nwithout wrapper on aarch64:\nlog2f reciprocal-throughput: 2.3x faster\nlog2f latency: 2.1x 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.\n---\n math/Makefile                          |   3 +-\n sysdeps/i386/fpu/e_log2f_data.c        |   1 +\n sysdeps/ia64/fpu/e_log2f_data.c        |   1 +\n sysdeps/ieee754/flt-32/e_log2f.c       | 148 +++++++++++++++++----------------\n sysdeps/ieee754/flt-32/e_log2f_data.c  |  44 ++++++++++\n sysdeps/ieee754/flt-32/math_config.h   |  11 +++\n sysdeps/m68k/m680x0/fpu/e_log2f_data.c |   1 +\n 7 files changed, 135 insertions(+), 74 deletions(-)\n create mode 100644 sysdeps/i386/fpu/e_log2f_data.c\n create mode 100644 sysdeps/ia64/fpu/e_log2f_data.c\n create mode 100644 sysdeps/ieee754/flt-32/e_log2f_data.c\n create mode 100644 sysdeps/m68k/m680x0/fpu/e_log2f_data.c\n\ndiff --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 9dde0f98eb..cca0b53d36 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 attribute_hidden;\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 attribute_hidden;\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-- \n2.11.0\n\n","prefixes":["3/7","v2"]}