⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e_logf.s

📁 Glibc 2.3.2源代码(解压后有100多M)
💻 S
📖 第 1 页 / 共 3 页
字号:
.file "logf.s"// Copyright (C) 2000, 2001, Intel Corporation// All rights reserved.// // Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story,// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met://// * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.//// * Redistributions in binary form must reproduce the above copyright// notice, this list of conditions and the following disclaimer in the// documentation and/or other materials provided with the distribution.//// * The name of Intel Corporation may not be used to endorse or promote// products derived from this software without specific prior written// permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Intel Corporation is the author of this code, and requests that all// problem reports or change requests be submitted to it directly at // http://developer.intel.com/opensource.//// History//==============================================================// 3/01/00  Initial version// 8/15/00  Bundle added after call to __libm_error_support to properly//          set [the previously overwritten] GR_Parameter_RESULT.// 1/10/01  Improved speed, fixed flags for neg denormals////// API//==============================================================// float logf(float)// float log10f(float)//// Overview of operation//==============================================================// Background//// Consider  x = 2^N 1.f1 f2 f3 f4...f63// Log(x) = log(frcpa(x) x/frcpa(x))//        = log(1/frcpa(x)) + log(frcpa(x) x)//        = -log(frcpa(x)) + log(frcpa(x) x)//// frcpa(x)       = 2^-N frcpa((1.f1 f2 ... f63)//// -log(frcpa(x)) = -log(C) //                = -log(2^-N) - log(frcpa(1.f1 f2 ... f63))//// -log(frcpa(x)) = -log(C) //                = +Nlog2 - log(frcpa(1.f1 f2 ... f63))//// -log(frcpa(x)) = -log(C) //                = +Nlog2 + log(frcpa(1.f1 f2 ... f63))//// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x)// Log(x) =  +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x)// Log(x) =  +Nlog2 - log(/frcpa(1.f1 f2 ... f63))   + log(frcpa(x) x)// Log(x) =  +Nlog2 + T                              + log(frcpa(x) x)//// Log(x) =  +Nlog2 + T                     + log(C x)//// Cx = 1 + r//// Log(x) =  +Nlog2 + T  + log(1+r)// Log(x) =  +Nlog2 + T  + Series( r - r^2/2 + r^3/3 - r^4/4 ....)//// 1.f1 f2 ... f8 has 256 entries.// They are 1 + k/2^8, k = 0 ... 255// These 256 values are the table entries.//// Implementation//===============// CASE 1:  |x-1| >= 2^-8// C = frcpa(x)// r = C * x - 1//// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4//// x = f * 2*n where f is 1.f_1f_2f_3....f_63// Nfloat = float(n)  where n is the true unbiased exponent// pre-index = f_1f_2....f_8// index = pre_index * 16// get the dxt table entry at index + offset = T//// result = (T + Nfloat * log(2)) + rseries//// The T table is calculated as follows// Form x_k = 1 + k/2^8 where k goes from 0... 255//      y_k = frcpa(x_k)//      log(1/y_k)  in quad and round to double// CASE 2:  |x-1| < 2^-6// w = x - 1//// Form wseries = w + Q1*w^2 + Q2*w^3 + Q3*w^4//// result = wseries// Special values //==============================================================// log(+0)    = -inf// log(-0)    = -inf// log(+qnan) = +qnan // log(-qnan) = -qnan // log(+snan) = +qnan // log(-snan) = -qnan // log(-n)    = QNAN Indefinite// log(-inf)  = QNAN Indefinite // log(+inf)  = +inf// Registers used//==============================================================// Floating Point registers used: // f8, input// f9 -> f15,  f32 -> f47// General registers used:  // r32 -> r51// Predicate registers used:// p6 -> p15// p8 log base e// p6 log base e special// p9 used in the frcpa// p13 log base e large W// p14 log base e small w// p7 log base 10// p10 log base 10 large W// p11 log base 10 small w// p12 log base 10 special#include "libm_support.h"// Assembly macros//==============================================================log_int_Nfloat   = f9 log_Nfloat       = f10 log_P3           = f11 log_P2           = f12 log_P1           = f13 log_inv_ln10     = f14log_log2         = f15 log_w            = f32log_T            = f33 log_rp_p32       = f34 log_rp_p2        = f35 log_rp_p10       = f36log_rsq          = f37 log_T_plus_Nlog2 = f38 log_r            = f39log_C            = f40log_rp_q32       = f41log_rp_q2        = f42log_rp_q10       = f43log_wsq          = f44log_Q            = f45log_inv_ln10     = f46log_NORM_f8      = f47// ===================================log_GR_exp_17_ones               = r33log_GR_exp_16_ones               = r34log_GR_exp_f8                    = r35log_GR_signexp_f8                = r36log_GR_true_exp_f8               = r37log_GR_significand_f8            = r38log_GR_index                     = r39log_AD_1                         = r40log_GR_signexp_w                 = r41log_GR_fff7                      = r42log_AD_2                         = r43log_GR_exp_w                     = r44GR_SAVE_B0                       = r45GR_SAVE_GP                       = r46GR_SAVE_PFS                      = r47GR_Parameter_X                   = r48GR_Parameter_Y                   = r49GR_Parameter_RESULT              = r50log_GR_tag                       = r51// Data tables//==============================================================#ifdef _LIBC.rodata#else.data#endif.align 16log_table_1:ASM_TYPE_DIRECTIVE(log_table_1,@object)data8 0xbfd0001008f39d59    // p3data8 0x3fd5556073e0c45a    // p2ASM_SIZE_DIRECTIVE(log_table_1)log_table_2:ASM_TYPE_DIRECTIVE(log_table_2,@object)data8 0xbfdffffffffaea15    // p1data8 0x3fdbcb7b1526e50e    // 1/ln10data8 0x3fe62e42fefa39ef    // Log(2)data8 0x0                   // paddata8 0x3F60040155D5889E    //log(1/frcpa(1+   0/256)data8 0x3F78121214586B54    //log(1/frcpa(1+   1/256)data8 0x3F841929F96832F0    //log(1/frcpa(1+   2/256)data8 0x3F8C317384C75F06    //log(1/frcpa(1+   3/256)data8 0x3F91A6B91AC73386    //log(1/frcpa(1+   4/256)data8 0x3F95BA9A5D9AC039    //log(1/frcpa(1+   5/256)data8 0x3F99D2A8074325F4    //log(1/frcpa(1+   6/256)data8 0x3F9D6B2725979802    //log(1/frcpa(1+   7/256)data8 0x3FA0C58FA19DFAAA    //log(1/frcpa(1+   8/256)data8 0x3FA2954C78CBCE1B    //log(1/frcpa(1+   9/256)data8 0x3FA4A94D2DA96C56    //log(1/frcpa(1+  10/256)data8 0x3FA67C94F2D4BB58    //log(1/frcpa(1+  11/256)data8 0x3FA85188B630F068    //log(1/frcpa(1+  12/256)data8 0x3FAA6B8ABE73AF4C    //log(1/frcpa(1+  13/256)data8 0x3FAC441E06F72A9E    //log(1/frcpa(1+  14/256)data8 0x3FAE1E6713606D07    //log(1/frcpa(1+  15/256)data8 0x3FAFFA6911AB9301    //log(1/frcpa(1+  16/256)data8 0x3FB0EC139C5DA601    //log(1/frcpa(1+  17/256)data8 0x3FB1DBD2643D190B    //log(1/frcpa(1+  18/256)data8 0x3FB2CC7284FE5F1C    //log(1/frcpa(1+  19/256)data8 0x3FB3BDF5A7D1EE64    //log(1/frcpa(1+  20/256)data8 0x3FB4B05D7AA012E0    //log(1/frcpa(1+  21/256)data8 0x3FB580DB7CEB5702    //log(1/frcpa(1+  22/256)data8 0x3FB674F089365A7A    //log(1/frcpa(1+  23/256)data8 0x3FB769EF2C6B568D    //log(1/frcpa(1+  24/256)data8 0x3FB85FD927506A48    //log(1/frcpa(1+  25/256)data8 0x3FB9335E5D594989    //log(1/frcpa(1+  26/256)data8 0x3FBA2B0220C8E5F5    //log(1/frcpa(1+  27/256)data8 0x3FBB0004AC1A86AC    //log(1/frcpa(1+  28/256)data8 0x3FBBF968769FCA11    //log(1/frcpa(1+  29/256)data8 0x3FBCCFEDBFEE13A8    //log(1/frcpa(1+  30/256)data8 0x3FBDA727638446A2    //log(1/frcpa(1+  31/256)data8 0x3FBEA3257FE10F7A    //log(1/frcpa(1+  32/256)data8 0x3FBF7BE9FEDBFDE6    //log(1/frcpa(1+  33/256)data8 0x3FC02AB352FF25F4    //log(1/frcpa(1+  34/256)data8 0x3FC097CE579D204D    //log(1/frcpa(1+  35/256)data8 0x3FC1178E8227E47C    //log(1/frcpa(1+  36/256)data8 0x3FC185747DBECF34    //log(1/frcpa(1+  37/256)data8 0x3FC1F3B925F25D41    //log(1/frcpa(1+  38/256)data8 0x3FC2625D1E6DDF57    //log(1/frcpa(1+  39/256)data8 0x3FC2D1610C86813A    //log(1/frcpa(1+  40/256)data8 0x3FC340C59741142E    //log(1/frcpa(1+  41/256)data8 0x3FC3B08B6757F2A9    //log(1/frcpa(1+  42/256)data8 0x3FC40DFB08378003    //log(1/frcpa(1+  43/256)data8 0x3FC47E74E8CA5F7C    //log(1/frcpa(1+  44/256)data8 0x3FC4EF51F6466DE4    //log(1/frcpa(1+  45/256)data8 0x3FC56092E02BA516    //log(1/frcpa(1+  46/256)data8 0x3FC5D23857CD74D5    //log(1/frcpa(1+  47/256)data8 0x3FC6313A37335D76    //log(1/frcpa(1+  48/256)data8 0x3FC6A399DABBD383    //log(1/frcpa(1+  49/256)data8 0x3FC70337DD3CE41B    //log(1/frcpa(1+  50/256)data8 0x3FC77654128F6127    //log(1/frcpa(1+  51/256)data8 0x3FC7E9D82A0B022D    //log(1/frcpa(1+  52/256)data8 0x3FC84A6B759F512F    //log(1/frcpa(1+  53/256)data8 0x3FC8AB47D5F5A310    //log(1/frcpa(1+  54/256)data8 0x3FC91FE49096581B    //log(1/frcpa(1+  55/256)data8 0x3FC981634011AA75    //log(1/frcpa(1+  56/256)data8 0x3FC9F6C407089664    //log(1/frcpa(1+  57/256)data8 0x3FCA58E729348F43    //log(1/frcpa(1+  58/256)data8 0x3FCABB55C31693AD    //log(1/frcpa(1+  59/256)data8 0x3FCB1E104919EFD0    //log(1/frcpa(1+  60/256)data8 0x3FCB94EE93E367CB    //log(1/frcpa(1+  61/256)data8 0x3FCBF851C067555F    //log(1/frcpa(1+  62/256)data8 0x3FCC5C0254BF23A6    //log(1/frcpa(1+  63/256)data8 0x3FCCC000C9DB3C52    //log(1/frcpa(1+  64/256)data8 0x3FCD244D99C85674    //log(1/frcpa(1+  65/256)data8 0x3FCD88E93FB2F450    //log(1/frcpa(1+  66/256)data8 0x3FCDEDD437EAEF01    //log(1/frcpa(1+  67/256)data8 0x3FCE530EFFE71012    //log(1/frcpa(1+  68/256)data8 0x3FCEB89A1648B971    //log(1/frcpa(1+  69/256)data8 0x3FCF1E75FADF9BDE    //log(1/frcpa(1+  70/256)data8 0x3FCF84A32EAD7C35    //log(1/frcpa(1+  71/256)data8 0x3FCFEB2233EA07CD    //log(1/frcpa(1+  72/256)data8 0x3FD028F9C7035C1C    //log(1/frcpa(1+  73/256)data8 0x3FD05C8BE0D9635A    //log(1/frcpa(1+  74/256)data8 0x3FD085EB8F8AE797    //log(1/frcpa(1+  75/256)data8 0x3FD0B9C8E32D1911    //log(1/frcpa(1+  76/256)data8 0x3FD0EDD060B78081    //log(1/frcpa(1+  77/256)data8 0x3FD122024CF0063F    //log(1/frcpa(1+  78/256)data8 0x3FD14BE2927AECD4    //log(1/frcpa(1+  79/256)data8 0x3FD180618EF18ADF    //log(1/frcpa(1+  80/256)data8 0x3FD1B50BBE2FC63B    //log(1/frcpa(1+  81/256)data8 0x3FD1DF4CC7CF242D    //log(1/frcpa(1+  82/256)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -