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

📄 e_acoshf.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 3 页
字号:
.file "acoshf.s"// Copyright (c) 2000 - 2003, Intel Corporation// All rights reserved.//// Contributed 2000 by the Intel Numerics Group, 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://www.intel.com/software/products/opensource/libraries/num.htm.//// ==============================================================// History// ==============================================================// 03/28/01 Initial version// 04/19/01 Improved speed of the paths #1,2,3,4,5// 05/20/02 Cleaned up namespace and sf0 syntax// 02/06/03 Reordered header: .section, .global, .proc, .align// 05/14/03 Improved performance, set denormal flag for unorms >= 1.0//// API// ==============================================================// float acoshf(float)//// Overview of operation// ==============================================================//// There are 7 paths:// 1. x = 1.0//    Return acoshf(x) = 0.0// 2. 1.0 < x < 1.000499725341796875(0x3FF0020C00000000)//    Return acoshf(x) = sqrt(x-1) * Pol4(x),//    where Pol4(x) = (x*C2 + C1)*(x-1) + C0//// 3. 1.000499725341796875(0x3FF0020C00000000) <= x < 2^51//    Return acoshf(x) = log(x + sqrt(x^2 -1.0))//    To compute x + sqrt(x^2 -1.0) modified Newton Raphson method is used//      (2 iterations)//    Algorithm description for log function see below.//// 4. 2^51 <= x < +INF//    Return acoshf(x) = log(2*x)//    Algorithm description for log function see below.//// 5. x = +INF//    Return acoshf(x) = +INF//// 6. x = [S,Q]NaN//    Return acoshf(x) = QNaN//// 7. x < 1.0//    It's domain error. Error handler with tag = 137 is called////==============================================================// Algorithm Description for log(x) function// Below we are using the fact that inequality x - 1.0 > 2^(-6) is always//   true for this acosh implementation//// 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//==============================================================// 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 * 8// 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//// Registers used//==============================================================// Floating Point registers used:// f8, input// f9 -> f15,  f32 -> f62//// General registers used:// r14 -> r27, r32 -> r39//// Predicate registers used:// p6 -> p15//// p6 to filter out case when x = [Q,S]NaN// p7,p8 to filter out case when x < 1.0//// p10 to select path #1// p11 to filter out case when x = +INF// p12 used in the frcpa// p13 to select path #4// p14,p15 to select path #2// Assembly macros//==============================================================log_GR_exp_17_ones    = r14log_GR_signexp_f8     = r15log_table_address2    = r16log_GR_exp_16_ones    = r17log_GR_exp_f8         = r18log_GR_true_exp_f8    = r19log_GR_significand_f8 = r20log_GR_index          = r21log_GR_comp2          = r22acosh_GR_f8           = r23log_GR_comp           = r24acosh_GR_f8_sig       = r25log_table_address3    = r26NR_table_address      = r27GR_SAVE_B0            = r33GR_SAVE_GP            = r34GR_SAVE_PFS           = r35GR_Parameter_X        = r36GR_Parameter_Y        = r37GR_Parameter_RESULT   = r38acosh_GR_tag          = r39//==============================================================log_y            = f9NR1              = f10NR2              = f11log_y_rs         = f12log_y_rs_iter    = f13log_y_rs_iter1   = f14log_NORM_f8      = f15log_w            = f32acosh_comp       = f34acosh_comp2      = f33log_P3           = f35log_P2           = f36log_P1           = f37log2             = f38log_C0           = f39log_C1           = f40log_C2           = f41acosh_w_rs       = f42log_C            = f43log_arg          = f44acosh_w_iter1    = f45acosh_w_iter2    = f46log_int_Nfloat   = f47log_r            = f48log_rsq          = f49log_rp_p4        = f50log_rp_p32       = f51log_rcube        = f52log_rp_p10       = f53log_rp_p2        = f54log_Nfloat       = f55log_T            = f56log_r2P_r        = f57log_T_plus_Nlog2 = f58acosh_w_sqrt     = f59acosh_w_1        = f60log_arg_early    = f61log_y_rs_iter2   = f62// Data tables//==============================================================RODATA.align 16LOCAL_OBJECT_START(log_table_1)data8 0xbfd0001008f39d59 // p3data8 0x3fd5556073e0c45a // p2data8 0xbfdffffffffaea15 // p1data8 0x3FE62E42FEFA39EF // log2LOCAL_OBJECT_END(log_table_1)LOCAL_OBJECT_START(log_table_2)data8 0x3FE0000000000000 // 0.5data8 0x4008000000000000 // 3.0data8 0xD92CBAD213719F11, 0x00003FF9 // C2 3FF9D92CBAD213719F11data8 0x93D38EBF2EC9B073, 0x0000BFFC // C1 BFFC93D38EBF2EC9B073data8 0xB504F333F9DA0E32, 0x00003FFF // C0 3FFFB504F333F9DA0E32LOCAL_OBJECT_END(log_table_2)LOCAL_OBJECT_START(log_table_3)data8 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)data8 0x3FD214456D0EB8D4    //log(1/frcpa(1+  83/256)data8 0x3FD23EC5991EBA49    //log(1/frcpa(1+  84/256)data8 0x3FD2740D9F870AFB    //log(1/frcpa(1+  85/256)data8 0x3FD29ECDABCDFA04    //log(1/frcpa(1+  86/256)data8 0x3FD2D46602ADCCEE    //log(1/frcpa(1+  87/256)data8 0x3FD2FF66B04EA9D4    //log(1/frcpa(1+  88/256)data8 0x3FD335504B355A37    //log(1/frcpa(1+  89/256)data8 0x3FD360925EC44F5D    //log(1/frcpa(1+  90/256)data8 0x3FD38BF1C3337E75    //log(1/frcpa(1+  91/256)data8 0x3FD3C25277333184    //log(1/frcpa(1+  92/256)

⌨️ 快捷键说明

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