19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
23 */
24 /*
25 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
26 * Use is subject to license terms.
27 */
28
29 .file "nextafter.S"
30
31 #include "libm.h"
32 LIBM_ANSI_PRAGMA_WEAK(nextafter,function)
33 .weak _nextafter
34 .type _nextafter,#function
35 _nextafter = __nextafter
36 #include "libm_synonyms.h"
37 #include "libm_protos.h"
38
39 #if defined(LIBM_BUILD) && !defined(ELFOBJ)
40 #define mENTRY(x) ENTRY(__libm/**/x)
41 #define mNAME(x) NAME(__libm/**/x)
42 #else
43 #define mENTRY(x) ENTRY(x)
44 #define mNAME(x) NAME(x)
45 #endif
46
47 RO_DATA
48 .align 8
49 .Lconstant:
50 two54 = 0x00
51 .word 0x43500000,0x0 ! 2**54
52 twom54 = 0x08
53 .word 0x3c900000,0x0 ! 2**-54
54 tiny = 0x10
55 .word 0x00100000,0x0 ! tiny
56
57 ! variable using fp
58 x = -0x8
59 y = -0x10
60
61 ENTRY(nextafter)
62 save %sp,-128,%sp
63 PIC_SETUP(l7)
64 std %i0,[%fp+x]
65 or %g0,%i0,%o0 ! save original arguments
66 or %g0,%i1,%o1
93 nop
94 2:
95 fbl 3f ! next_addulp
96 nop
97 1: ! next_subulp
98 subcc %i1,1,%i1
99 ba 4f ! next_final
100 subx %i0,0,%i0
101 3: ! next_addulp
102 addcc %i1,1,%i1
103 addx %i0,0,%i0
104 4: ! next_final
105 sethi %hi(0x7ff00000),%l3
106 std %i0,[%fp+x]
107 andcc %i0,%l3,%i2
108 be,a 1f ! xflow
109 ldd [%l0+tiny],%f2
110 cmp %i2,%l3
111 bne,a 9f ! next_return
112 ldd [%fp+x],%f0
113 call mNAME(_SVID_libm_err) ! overflow
114 or %g0,46,%o4
115 ba 9f
116 nop
117 1: ! xflow
118 fmuld %f2,%f2,%f2
119 ldd [%fp+x],%f0
120 9: ! next_return
121 ret
122 restore
123
124 SET_SIZE(nextafter)
|
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
23 */
24 /*
25 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
26 * Use is subject to license terms.
27 */
28
29 .file "nextafter.S"
30
31 #include "libm.h"
32 LIBM_ANSI_PRAGMA_WEAK(nextafter,function)
33 .weak _nextafter
34 .type _nextafter,#function
35 _nextafter = __nextafter
36 #include "libm_synonyms.h"
37 #include "libm_protos.h"
38
39 RO_DATA
40 .align 8
41 .Lconstant:
42 two54 = 0x00
43 .word 0x43500000,0x0 ! 2**54
44 twom54 = 0x08
45 .word 0x3c900000,0x0 ! 2**-54
46 tiny = 0x10
47 .word 0x00100000,0x0 ! tiny
48
49 ! variable using fp
50 x = -0x8
51 y = -0x10
52
53 ENTRY(nextafter)
54 save %sp,-128,%sp
55 PIC_SETUP(l7)
56 std %i0,[%fp+x]
57 or %g0,%i0,%o0 ! save original arguments
58 or %g0,%i1,%o1
85 nop
86 2:
87 fbl 3f ! next_addulp
88 nop
89 1: ! next_subulp
90 subcc %i1,1,%i1
91 ba 4f ! next_final
92 subx %i0,0,%i0
93 3: ! next_addulp
94 addcc %i1,1,%i1
95 addx %i0,0,%i0
96 4: ! next_final
97 sethi %hi(0x7ff00000),%l3
98 std %i0,[%fp+x]
99 andcc %i0,%l3,%i2
100 be,a 1f ! xflow
101 ldd [%l0+tiny],%f2
102 cmp %i2,%l3
103 bne,a 9f ! next_return
104 ldd [%fp+x],%f0
105 call NAME(_SVID_libm_err) ! overflow
106 or %g0,46,%o4
107 ba 9f
108 nop
109 1: ! xflow
110 fmuld %f2,%f2,%f2
111 ldd [%fp+x],%f0
112 9: ! next_return
113 ret
114 restore
115
116 SET_SIZE(nextafter)
|