]> oss.titaniummirror.com Git - msp430-libc.git/blobdiff - src/libm/sqrt.S
Imported msp430-libc-20100207
[msp430-libc.git] / src / libm / sqrt.S
index 4c05975bd54c7f34f40833432551c27e40d020b0..0a9acdb5f809228f021d40492826e607d7f1ca19 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: sqrt.S,v 1.1 2002/08/30 11:53:44 diwil Exp $
+ * $Id: sqrt.S,v 1.1.2.1 2009/01/26 15:47:13 sb-sf Exp $
  */
+       #include    "../core_common.inc"
        .file "sqrt.S"
-       
+    
        .text
        .p2align 1,0
 .global        sqrt
@@ -51,12 +52,16 @@ sqrt:
        tst     r15
        jn      .Lsqrt_err
 
-       push    argsave_lo
-       push    argsave_hi
-       push    y_lo
-       push    y_hi
-       push    yprev_lo
-       push    yprev_hi
+#if defined(__MSP430X__)
+        XPUSHM  #6, r11
+#else
+        push   yprev_hi
+        push   yprev_lo
+        push   y_hi
+        push   y_lo
+        push   argsave_hi
+        push   argsave_lo
+#endif
 
        mov     r14, argsave_lo
        mov     r15, argsave_hi
@@ -73,10 +78,10 @@ sqrt:
        mov     y_hi, r13
        mov     argsave_lo, r14 ;       arg/y
        mov     argsave_hi, r15
-       call    #__divsf3       
+       XCALL   #__divsf3       
        mov     y_lo, r12               ; +y
        mov     y_hi, r13
-       call    #__addsf3
+       XCALL   #__addsf3
        mov     #llo(0x3f000000), r12   ; *0.5
        mov     #lhi(0x3f000000), r13
        call    #__mulsf3
@@ -91,13 +96,20 @@ sqrt:
        mov     y_lo, r14
        mov     y_hi, r15
 
-       pop     yprev_hi
-       pop     yprev_lo
-       pop     y_hi
-       pop     y_lo
-       pop     argsave_hi
-       pop     argsave_lo
-       ret
+#if defined(__MSP430X__)
+        XPOPM   #6, r11
+        XRET
+#elif defined(__MSP430_SAVE_PROLOGUE__)
+        br      #__epilogue_restorer + 2 * 2
+#else
+        pop    argsave_lo
+        pop    argsave_hi
+        pop    y_lo
+        pop    y_hi
+        pop    yprev_lo
+        pop    yprev_hi
+        ret
+#endif
 
 .Lsqrt_err:
        mov     #0xffff, r14