~ubuntu-branches/ubuntu/gutsy/avr-libc/gutsy

« back to all changes in this revision

Viewing changes to libm/fplib/fp_split.S

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2006-05-01 12:03:39 UTC
  • mto: (3.1.1 edgy)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20060501120339-q93dxulpunby36dj
Tags: upstream-1.4.4
ImportĀ upstreamĀ versionĀ 1.4.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*  -*- Mode: Asm -*-  */
2
2
 
3
3
/* Copyright (c) 2002  Michael Stumpf  <mistumpf@de.pepperl-fuchs.com>
 
4
   Copyright (c) 2005  Anatoly Sokolov <aesok@post.ru>
4
5
   All rights reserved.
5
6
 
6
7
 
32
33
   POSSIBILITY OF SUCH DAMAGE. 
33
34
*/
34
35
 
 
36
/* $Id: fp_split.S,v 1.8.2.1 2005/12/05 22:06:55 aesok Exp $ */
 
37
 
35
38
/*
36
39
    fp_split.S is part of     FPlib V 0.3.0       ported to avr-as
37
40
    for details see readme.fplib
49
52
 * split 2 incoming operands , x and y, y first
50
53
 */
51
54
 
52
 
#if !defined(DOXYGEN)
 
55
#if !defined(__DOXYGEN__)
53
56
 
54
57
#include "gasava.inc"
 
58
#include "macros.inc"
55
59
#include "fplib.inc"
56
60
 
57
61
          TEXT_SEG(fplib, __fp_split)
65
69
    ADD     rB2,rB2           ; MSB of exponent to carry
66
70
    adc     rB3,rB3           ; whole exponent in rB3, sign in C
67
71
    CPI     rB3,0xFF          ; check for NAN
68
 
    BREQ    fp_split_nan      ; if no jump then C as hidden one is set
 
72
    BREQ    .L_fp_split_nan   ; if no jump then C as hidden one is set
69
73
    CLR     rBE            ; clear fraction extension
70
74
    cp      rBE,rB3        ; set C if nonzero exponent.  -MM 2000-11-25
71
75
    brcs    1f
76
80
    ADD     rA2,rA2        ; MSB of exponent to carry
77
81
    adc     rA3,rA3        ; whole exponent in rA3, sign in C
78
82
    CPI     rA3,0xFF       ; if no jump then C as hidden one is set
79
 
    BREQ    fp_split_nan
 
83
    BREQ    .L_fp_split_nan
80
84
    CLR     rAE            ; clear fraction extension
81
85
    cp      rAE,rA3        ; set C if nonzero exponent.  -MM 2000-11-25
82
86
    brcs    1f
84
88
1:
85
89
    ROR     rA2            ; sets hidden bit
86
90
    RET
87
 
 fp_split_nan:
 
91
.L_fp_split_nan:
88
92
    POP     rA3
89
93
    POP     rA3            ; pop return adress
90
94
 #ifdef __ERRNO__
95
99
 
96
100
          ENDFUNC
97
101
 
98
 
#endif /* not DOXYGEN */
 
102
/*
 
103
 *----------------------------------------------------------------------------------------------
 
104
 * split up in sign : exp : fraction   : fraction extention
 
105
 *          x  T    : rA3 : rA2:rA1:rA0: rAE
 
106
 *
 
107
 * if defined FPLIB_CHECK_FOR_NAN
 
108
 * does not return to calling function in case of NaN !
 
109
 * -> call fp_split before pushing locals to stack!!!
 
110
 *
 
111
 */
 
112
 
 
113
        FUNCTION(__fp_split_a)
 
114
 
 
115
GLOBAL(__fp_split_a)
 
116
        BST     rA3, 7          ; T = sign
 
117
        
 
118
        ADD     rA2, rA2        ; MSB of exponent to carry
 
119
        adc     rA3, rA3        ; whole exponent in rA3, sign in C
 
120
        CPI     rA3, 0xFF       ; if no jump then C as hidden one is set
 
121
        BREQ    .L_fp_split_a_nan
 
122
        CLR     rAE             ; clear fraction extension
 
123
        CP      rAE, rA3        ; set C if nonzero exponent.  
 
124
        BRCS    1f
 
125
        LDI     rA3, 1          ; zero exponent really means 1 with hidden bit = 0
 
126
1:
 
127
        ROR     rA2             ; sets hidden bit
 
128
        RET
 
129
        
 
130
.L_fp_split_a_nan:
 
131
        POP     rA3
 
132
        POP     rA3             ; pop return adress
 
133
 #ifdef __ERRNO__
 
134
        LDI     rA3, EDOM       ; NaN is argument domain error !
 
135
 #endif
 
136
        CLR     r1
 
137
        RJMP    _U(__fp_nan)
 
138
 
 
139
        ENDFUNC
 
140
 
 
141
 
 
142
#endif /* not __DOXYGEN__ */