diff options
Diffstat (limited to 'sysdeps/ia64/fpu/s_significand.S')
-rw-r--r-- | sysdeps/ia64/fpu/s_significand.S | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/sysdeps/ia64/fpu/s_significand.S b/sysdeps/ia64/fpu/s_significand.S deleted file mode 100644 index 720e043..0000000 --- a/sysdeps/ia64/fpu/s_significand.S +++ /dev/null @@ -1,153 +0,0 @@ -.file "significand.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 -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 05/31/00 Fixed bug when x a double-extended denormal -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double significand(double x) -// -// Overview of operation -//============================================================== -// If x = sig * 2**n with 1 <= sig < 2 -// significand returns sig -// -// predicate registers used: -// p6, p7 -// -// floating-point registers used: -// f8, f9, f10 - -.section .text -GLOBAL_LIBM_ENTRY(significand) - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 1 11 - -// f10 gets f8(sign) with f1(exp,significand) -{ .mfi - nop.m 999 - fmerge.s f10 = f8,f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Test for denormal input -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p6 = TRUE ==> x is not (nan,inf,0) -// return sign(f8) exp(f1) significand(f8) -// else x is (nan,inf,0) -// return sign(f8) exp(f8) significand(f8), normalized. -{ .mfi - nop.m 999 - fclass.m.unc p0,p6 = f8, 0xe7 - nop.i 999 ;; -} - -{ .mmb - nop.m 999 - nop.m 999 -(p7) br.cond.spnt SIGNIFICAND_DENORM ;; // Branch if x denormal -} - -{ .mfi - nop.m 999 -(p6) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fnorm.d.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -SIGNIFICAND_DENORM: -// Here if x denorm -{ .mfi - nop.m 999 - fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Check if fnorm(x) still denormal, means x double-extended denormal -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x0b - nop.i 999 ;; -} - -// This will be the final result unless x double-extended denormal -{ .mfi - nop.m 999 - fnorm.d.s0 f8 = f8 - nop.i 999 ;; -} - -// If x double-extended denorm, then significand ok, but must merge in -// correct signexp -{ .mfi - nop.m 999 -(p7) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -// Final normalization if x double-extended denorm -{ .mfb - nop.m 999 -(p7) fnorm.d.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(significand) |