~ubuntu-branches/ubuntu/utopic/eglibc/utopic

« back to all changes in this revision

Viewing changes to ports/sysdeps/ia64/fpu/s_significand.S

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2012-10-26 05:14:58 UTC
  • mfrom: (1.5.1) (4.4.22 experimental)
  • Revision ID: package-import@ubuntu.com-20121026051458-oryotr4i03ob5pab
Tags: 2.16-0ubuntu1
* Merge with unreleased 2.16 in Debian experimental, remaining changes:
  - Drop the Breaks line from libc6, which refers to a Debian transition
  - Remove the libc6 recommends on libc6-i686, which we don't build
  - Enable libc6{,-dev}-armel on armhf and libc6{-dev}-armhf on armel
  - Ship update-locale and validlocale in /usr/sbin in libc-bin
  - Don't build locales or locales-all in Ubuntu, we rely on langpacks
  - Heavily mangle the way we do service restarting on major upgrades
  - Use different MIN_KERNEL_SUPPORTED versions than Debian, due to
    buildd needs.  This should be universally bumped to 3.2.0 once all
    our buildds (including the PPA guests) are running precise kernels
  - Build i386 variants as -march=i686, build amd64 with -O3, and build
    ppc64 variants (both 64-bit and 32-bit) with -O3 -fno-tree-vectorize
  - Re-enable unsubmitted-ldconfig-cache-abi.diff and rebuild the cache
    on upgrades from previous versions that used a different constant
  - debian/patches/any/local-CVE-2012-3406.diff: switch to malloc when
    array grows too large to handle via alloca extension (CVE-2012-3406)
  - Build generic i386/i686 flavour with -mno-tls-direct-seg-refs
* Changes added/dropped with this merge while reducing our delta:
  - Stop building glibc docs from the eglibc source, and instead make
    the glibc-docs stub have a hard dependency on glibc-doc-reference
  - Remove outdated conflicts against ancient versions of ia32-libs
  - Drop the tzdata dependency from libc6, it's in required and minimal
  - Use gcc-4.7/g++-4.7 by default on all our supported architectures
  - Save our historical changelog as changelog.ubuntu in the source
  - Drop nscd's libaudit build-dep for now, as libaudit is in universe
  - Drop the unnecessary Breaks from libc6 to locales and locales-all
  - Ship xen's ld.so.conf.d snippet as /etc/ld.so.conf.d/libc6-xen.conf
* Disable hard failures on the test suite for the first upload to raring

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
.file "significand.s"
 
2
 
 
3
 
 
4
// Copyright (c) 2000 - 2003, Intel Corporation
 
5
// All rights reserved.
 
6
//
 
7
// Contributed 2000 by the Intel Numerics Group, Intel Corporation
 
8
//
 
9
// Redistribution and use in source and binary forms, with or without
 
10
// modification, are permitted provided that the following conditions are
 
11
// met:
 
12
//
 
13
// * Redistributions of source code must retain the above copyright
 
14
// notice, this list of conditions and the following disclaimer.
 
15
//
 
16
// * Redistributions in binary form must reproduce the above copyright
 
17
// notice, this list of conditions and the following disclaimer in the
 
18
// documentation and/or other materials provided with the distribution.
 
19
//
 
20
// * The name of Intel Corporation may not be used to endorse or promote
 
21
// products derived from this software without specific prior written
 
22
// permission.
 
23
 
 
24
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
25
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
26
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
27
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
 
28
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
29
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
30
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 
31
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 
32
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
 
33
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 
34
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
35
//
 
36
// Intel Corporation is the author of this code, and requests that all
 
37
// problem reports or change requests be submitted to it directly at
 
38
// http://www.intel.com/software/products/opensource/libraries/num.htm.
 
39
//
 
40
// History
 
41
//==============================================================
 
42
// 02/02/00 Initial version
 
43
// 04/04/00 Unwind support added
 
44
// 05/31/00 Fixed bug when x a double-extended denormal
 
45
// 05/20/02 Cleaned up namespace and sf0 syntax
 
46
// 02/10/03 Reordered header: .section, .global, .proc, .align
 
47
//
 
48
// API
 
49
//==============================================================
 
50
// double significand(double x)
 
51
//
 
52
// Overview of operation
 
53
//==============================================================
 
54
// If x = sig * 2**n with 1 <= sig < 2
 
55
// significand returns sig
 
56
//
 
57
// predicate registers used:
 
58
// p6, p7
 
59
//
 
60
// floating-point registers used:
 
61
// f8, f9, f10
 
62
 
 
63
.section .text
 
64
GLOBAL_LIBM_ENTRY(significand)
 
65
 
 
66
// qnan snan inf norm     unorm 0 -+
 
67
// 1    1    1   0        0     1 11
 
68
 
 
69
// f10 gets f8(sign) with f1(exp,significand)
 
70
{ .mfi
 
71
      nop.m 999
 
72
      fmerge.s       f10 = f8,f1
 
73
      nop.i 999
 
74
}
 
75
{ .mfi
 
76
      nop.m 999
 
77
      fnorm.s0          f9  = f8
 
78
      nop.i 999 ;;
 
79
}
 
80
 
 
81
// Test for denormal input
 
82
{ .mfi
 
83
      nop.m 999
 
84
      fclass.m.unc   p7,p0 = f8, 0x0b
 
85
      nop.i 999 ;;
 
86
}
 
87
 
 
88
// p6 = TRUE ==> x is not (nan,inf,0)
 
89
//               return sign(f8) exp(f1) significand(f8)
 
90
// else          x is (nan,inf,0)
 
91
//               return sign(f8) exp(f8) significand(f8), normalized.
 
92
{ .mfi
 
93
      nop.m 999
 
94
      fclass.m.unc   p0,p6 = f8, 0xe7
 
95
      nop.i 999 ;;
 
96
}
 
97
 
 
98
{ .mmb
 
99
      nop.m 999
 
100
      nop.m 999
 
101
(p7)  br.cond.spnt SIGNIFICAND_DENORM ;; // Branch if x denormal
 
102
}
 
103
 
 
104
{ .mfi
 
105
      nop.m 999
 
106
(p6)  fmerge.se      f8 = f10,f8
 
107
      nop.i 999 ;;
 
108
}
 
109
 
 
110
{ .mfb
 
111
      nop.m 999
 
112
      fnorm.d.s0        f8 = f8
 
113
      br.ret.sptk    b0 ;;
 
114
}
 
115
 
 
116
SIGNIFICAND_DENORM:
 
117
// Here if x denorm
 
118
{ .mfi
 
119
      nop.m 999
 
120
      fmerge.se      f8 = f10,f9
 
121
      nop.i 999 ;;
 
122
}
 
123
 
 
124
// Check if fnorm(x) still denormal, means x double-extended denormal
 
125
{ .mfi
 
126
      nop.m 999
 
127
      fclass.m.unc   p7,p0 = f9, 0x0b
 
128
      nop.i 999 ;;
 
129
}
 
130
 
 
131
// This will be the final result unless x double-extended denormal
 
132
{ .mfi
 
133
      nop.m 999
 
134
      fnorm.d.s0        f8 = f8
 
135
      nop.i 999 ;;
 
136
}
 
137
 
 
138
// If x double-extended denorm, then significand ok, but must merge in
 
139
//    correct signexp
 
140
{ .mfi
 
141
      nop.m 999
 
142
(p7)  fmerge.se      f8 = f10,f8
 
143
      nop.i 999 ;;
 
144
}
 
145
 
 
146
// Final normalization if x double-extended denorm
 
147
{ .mfb
 
148
      nop.m 999
 
149
(p7)  fnorm.d.s0        f8 = f8
 
150
      br.ret.sptk    b0 ;;
 
151
}
 
152
 
 
153
GLOBAL_LIBM_END(significand)