.file "libm_frexp.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
// 03/20/00 Improved speed
// 06/01/00 Fixed bug when x a double-extended denormal
// 12/08/00 Corrected label on .endp
// 01/23/02 Added handling for int 32 or 64 bits
// 05/20/02 Cleaned up namespace and sf0 syntax
// 02/10/03 Reordered header: .section, .global, .proc, .align
//
// API
//==============================================================
// double __libm_frexp(double x, int* y, int int_type)
// input  floating point f8, pointer to y (r33), int int_type (r34)
// output floating point f8, returns the fraction of x, 0.5 <= fraction < 1.0
// output int* y, returns the true exponent of x
//
// int_type = 0 if int is 32 bits
// int_type = 1 if int is 64 bits
//
// int* y is returned as a 32 bit integer if int_type = 0
// int* y is returned as a 64 bit integer if int_type = 1
//
// Overview of operation
//==============================================================
// break a floating point x number into fraction and an exponent
// The fraction is returned as a double
// The exponent is returned as an integer pointed to by y
//    This is a true (not a biased exponent) but 0fffe is subtracted
//    as a bias instead of 0xffff. This is because the fraction returned
//    is between 0.5 and 1.0, not the expected IEEE range.
//
// The fraction is 0.5 <= fraction < 1.0
//
// Registers used
//==============================================================
//
// general registers: 
// r14  exponent bias for x negative
// r15  exponent bias for x positive
// r16  signexp of x
// r17  exponent mask
// r18  exponent of x
// r19  exponent result
// r20  signexp of 2^64
// r32  on input contains the 64-bit IEEE double that is in f8
// r33  on input pointer to 32-bit or 64-bit integer for exponent
// r34  on input contains 0 if output int is 32 bits, else output int is 64 bits
//
// predicate registers:
// p6   set if x is Nan, zero, or infinity
// p7   set if x negative
// p8   set if x positive
// p9   set if x double-extended denormal
// p10  set if int_type = 0, 32-bit integer
// p11  set if int_type = 1, 64-bit integer
//
// floating-point registers:
// f8  input, output
// f9  normalized x
// f10 signexp for significand result for x positive
// f11 signexp for significand result for x negative
// f12 2^64

.section .text
GLOBAL_LIBM_ENTRY(__libm_frexp)

// Set signexp for significand result for x>0
// If x is a NaN, zero, or infinity, return it.
// Put 0 in the int pointer.
// x NAN, ZERO, INFINITY?
// Set signexp for significand result for x<0
{ .mfi
        mov         r15 = 0x0fffe
        fclass.m    p6,p7 = f8, 0xe7
        mov         r14 = 0x2fffe
}
// Form signexp of 2^64 in case x double-extended denormal
// Save the normalized value of input in f9
// The normalization also sets fault flags and takes faults if necessary
{ .mfi
        mov         r20 = 0x1003f
        fnorm.s0    f9 = f8 
        nop.i 999 ;;
}

// Move signexp for significand result for x>0 to FP reg
// Form 2^64 in case x double-extended denormal
{ .mmi
        setf.exp    f10 = r15
        setf.exp    f12 = r20
        nop.i 999 ;;
}

// Move signexp for significand result for x<0 to FP reg
// p7 if x<0, else p8
// If x=0,nan,inf, set p10 if output int to be 32 bits, or set p11 if 64 bits
{ .mfi
        setf.exp    f11 = r14
(p7)    fcmp.lt.s0  p7,p8 = f8,f0
(p6)    cmp.eq.unc  p10,p11 = r34, r0 ;; 
}

// If x NAN, ZERO, INFINITY, set *y=0 and exit
{ .mmb
(p10)   st4         [r33] = r0      // Store *y=0 as 32-bit integer
(p11)   st8         [r33] = r0      // Store *y=0 as 64-bit integer
(p6)    br.ret.spnt b0 ;;
}

// Form exponent mask
// Test for fnorm(x) denormal, means x double-extended denormal
{ .mfi
        mov         r17 = 0x1ffff
        fclass.m    p9,p0 = f9, 0x0b
        nop.i 999 ;;
}

// If x double-extended denormal add 64 to exponent bias for scaling
// If x double-extended denormal multiply x * 2^64 which is normal
// Set p10 if output int to be 32 bits, or set p11 if 64 bits
{ .mfi
(p9)    add         r15 = 64, r15
(p9)    fmpy.s0     f9 = f9, f12
        cmp.eq      p10,p11 = r34, r0 ;; 
}

// true exponent stored to int pointer
// the bias is treated as 0xfffe instead of 
// normal 0xffff because we want the significand
// to be in the range <=0.5 sig < 1.0
// Store the value of the exponent at the pointer in r33

// If x>0 form significand result 
{ .mfi
        nop.m 999
(p8)    fmerge.se   f8 = f10,f9
        nop.i 999  ;;
}

// Get signexp of normalized x
// If x<0 form significand result 
{ .mfi
        getf.exp    r16 = f9
(p7)    fmerge.se   f8 = f11,f9
        nop.i 999  ;;
}

// Get exp of normalized x
// Subtract off bias to get true exponent of x
{ .mmi
        and         r18 = r17,r16 ;;
        sub         r19 = r18,r15
        nop.i 999  ;;
}

// Store int *y as a 32-bit integer
// Make the value a double
{ .mfi
(p10)   st4         [r33] = r19        // Store *y as 32-bit integer
        fnorm.d.s0  f8 = f8
        nop.i 999
}
{ .mfb
(p11)   st8         [r33] = r19        // Store *y as 64-bit integer
        nop.f 999
        br.ret.sptk b0 ;;
}

GLOBAL_LIBM_END(__libm_frexp)
