/[avr-libc]/avr-libc/libm/fplib/tanh.S
ViewVC logotype

Diff of /avr-libc/libm/fplib/tanh.S

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3.2.1 by joerg_wunsch, Fri Jul 1 21:49:13 2005 UTC revision 1.3.2.2 by aesok, Sun Nov 13 21:08:06 2005 UTC
# Line 54  Line 54 
54  #include "macros.inc"  #include "macros.inc"
55  #include "fplib.inc"  #include "fplib.inc"
56    
57            TEXT_SEG(fplib, tanh)          TEXT_SEG(fplib, tanh)
58            FUNCTION(tanh)          FUNCTION(tanh)
59    
60  GLOBAL(tanh)  GLOBAL(tanh)
61          /* check for x > 8.3177661895751953 [41051592]          /* check for x > 8.3177661895751953 [41051592]
# Line 69  GLOBAL(tanh) Line 69  GLOBAL(tanh)
69     CPC   rA1,rB1     CPC   rA1,rB1
70     CPC   rA2,rB2     CPC   rA2,rB2
71     CPC   rA3,rB3        ; compare with 8.3177661895751953 = | ln(2^24)/2 |     CPC   rA3,rB3        ; compare with 8.3177661895751953 = | ln(2^24)/2 |
72     BRCS  _tanh_00     BRCS  1f
73     LDI   rA3,0x3F     LDI   rA3,0x3F
74     LDI   rA2,0x80     LDI   rA2,0x80
75     LDI   rA1,0x00     LDI   rA1,0x00
# Line 77  GLOBAL(tanh) Line 77  GLOBAL(tanh)
77     BLD   rA3,7          ; if x positivive _tanh(x) = 1     BLD   rA3,7          ; if x positivive _tanh(x) = 1
78     RET     RET
79    
80   _tanh_00:  1:
81     BLD   rA3,7     BLD   rA3,7
82    
83     PUSH  rA0                    /* LDI    rB3,1                 */  /*   PUSH  rA0                  */ LDI    rB3,0                
84     PUSH  rA1                    /* RCALL  _ldexp    ; x -> 2x   */  /*                              */ LDI    rB2,1                
85     PUSH  rA2                    /*                              */  /*   PUSH  rA1                  */ RCALL  _U(ldexp)    ; x -> 2x  
86     PUSH  rA3                    /* RCALL  _exp                  */  /*   PUSH  rA2                  */                              
87     RCALL _U(cosh)               /* PUSH   rA0                   */  /*   PUSH  rA3                  */ RCALL  _U(exp)                  
88     POP   rB3                    /* PUSH   rA1                   */  /*   RCALL _U(cosh)             */ PUSH   rA0                  
89     POP   rB2                    /* PUSH   rA2                   */  /*   POP   rB3                  */ PUSH   rA1                  
90     POP   rB1                    /* PUSH   rA3                   */  /*   POP   rB2                  */ PUSH   rA2                  
91     POP   rB0                    /* CLR    rB0                   */  /*   POP   rB1                  */ PUSH   rA3                  
92     PUSH  rA3                    /* CLR    rB1                   */  /*   POP   rB0                  */ CLR    rB0                  
93     PUSH  rA2                    /* LDI    rB2,0x80              */  /*   PUSH  rA3                  */ CLR    rB1                  
94     PUSH  rA1                    /* LDI    rB3,0x3F ; B = 1.0    */  /*   PUSH  rA2                  */ LDI    rB2,0x80              
95     PUSH  rA0                    /* RCALL  ___addsf3              */  /*   PUSH  rA1                  */ LDI    rB3,0x3F ; B = 1.0    
96     MOV   rA3,rB3                /* POP    rB3                   */  /*   PUSH  rA0                  */ RCALL  _U(__addsf3)            
97     MOV   rA2,rB2                /* POP    rB2                   */  /*   MOV   rA3,rB3              */ POP    rB3                  
98     MOV   rA1,rB1                /* POP    rB1                   */  /*   MOV   rA2,rB2              */ POP    rB2                  
99     MOV   rA0,rB0                /* POP    rB0  ; B = exp(2x)    */  /*   MOV   rA1,rB1              */ POP    rB1                  
100     RCALL _U(sinh)               /* PUSH   rA0                   */  /*   MOV   rA0,rB0              */ POP    rB0  ; B = exp(2x)    
101     POP   rB0                    /* PUSH   rA1                   */  /*   RCALL _U(sinh)             */ PUSH   rA0                  
102     POP   rB1                    /* PUSH   rA2                   */  /*   POP   rB0                  */ PUSH   rA1                  
103     POP   rB2                    /* PUSH   rA3                   */  /*   POP   rB1                  */ PUSH   rA2                  
104     POP   rB3                    /* CLR    rA0                   */  /*   POP   rB2                  */ PUSH   rA3                  
105     RJMP  _U(__divsf3)           /* CLR    rA1                   */  /*   POP   rB3                  */ CLR    rA0                  
106                                  /* LDI    rA2,0x80              */  /*   RJMP  _U(__divsf3)         */ CLR    rA1                  
107                                  /* LDI    rA3,0xBF ; A = -1.0   */  /*                              */ LDI    rA2,0x80              
108                                  /* RCALL  ___addsf3              */  /*                              */ LDI    rA3,0xBF ; A = -1.0  
109                                  /* POP    rB3                   */  /*                              */ RCALL  _U(__addsf3)            
110                                  /* POP    rB2                   */  /*                              */ POP    rB3                  
111                                  /* POP    rB1                   */  /*                              */ POP    rB2                  
112                                  /* POP    rB0  ; B = exp(2x)+1  */  /*                              */ POP    rB1                  
113                                  /* RJMP  ___divsf3               */  /*                              */ POP    rB0  ; B = exp(2x)+1  
114    /*                              */ RJMP  _U(__divsf3)              
115    
116            ENDFUNC            ENDFUNC
117    

Legend:
Removed from v.1.3.2.1  
changed lines
  Added in v.1.3.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26